繁体   English   中英

从python列表中选择包含某个单词的特定元素

[英]Selecting specific elements that contain a certain word from a list in python

我想进行情感分析,但只想使用包含特定单词的列表元素。 关于评论,我只想分析评论

例如,我的清单是:

comments = ["nice blog","i like your blog","nivea is a nice product","i like nivea"]

如何创建仅添加包含“ nivea”一词的注释的列表?

因此,我希望最终列表为:

commentsfinal = ["nivea is a nice product","i like nivea"]

我试图计算评论的总数(因此不是妮维雅提及的总数,而是真正的评论),其中妮维雅以不同的方式提及。 所有不同的方式导致不同的结果,有人可以帮助我哪种是正确的,为什么?

第一次尝试:

niveaucountlist=[]
match="nivea"

for comment in allcomments:
    niveacount=0
    for word in comment.split():
        if word in match:
            niveacount+=1
        niveacountlist.append(niveacount)

total=sum(niveacount)

这给了我4547条评论的结果

第二次尝试:我尝试的第二件事是列出一个列表,其中每个注释均以提及nivea的总次数来评估。 我得到一个像这样的列表:

niveacountlist=[1,0,0,1,2,0]

然后我删除了所有值为零的元素(因为这些注释与nivea无关)

niveacountlistpos=[x for x in niveacountlist if x != 0]
print(len(niveacountlistpos))

这导致了3771条评论。

上一次尝试:我的最后一次尝试是你们在我的第一个问题中回答了我的内容。 所以我用了regexp并做了:

import re
nivealist=[x for x in allcomments if re.search("nivea",x)]

这导致了2583条评论。

那么,这里发生了什么? 有人可以解释一下为什么结果都不同吗?

---我还有另一个(最后一个)问题,是关于我计算nivea提及总数的方式(因此nivea在所有时间中的总和都在注释中)。 我试图通过将所有注释(称为allwords)组成字符串,然后执行以下操作:

match="nivea"
niveacount1=0
for word in allwords:
    niveacount1+=1
print(niveacount1)

这个对吗? 或者我可以用更好的方法做到这一点。

您可以使用列表推导in来测试子字符串性。

nivea_comments = [c for c in comments if "nivea" in c]

如果您从事函数式编程,则将其视为过滤器

nivea_comments = filter(lambda c: "nivea" in c, comments)

使用正则表达式和列表理解例如:

import re
new_list = [x for x in comments if re.search('nivea', x)]

第一次尝试:

您的第一次尝试没有找到正确的金额,因为它正在寻找匹配的单词。 如果注释中有“ i”,则会查看“ i”是否也出现在nivea中。 确实如此,所以计数器将加1。这就是为什么您在那里收不到正确金额的原因。

第二次尝试:

第二次尝试给出了一个不同的答案,因为您要使用len()来请求列表的长度,而不是列表中所有值的总和。 它也具有与第一次尝试相同的问题,因此这就是为什么该值仍高于最后一次尝试的原因。

作为最后一个问题的答案,这不是一个好方法。 因为如果它是一个字符串,并且您使用了for循环,它将对每个字母而不是每个注释执行此操作。 例如:

s = "This is a check"
for word in s:
    print(word)

将返回:

T
h
i
s

等等

因此,最好使用前面提到的列表理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM