在python中从列表中选择包含特定单词的特定元素
我想做一个情绪分析,但只想使用列表中包含某个单词的元素。这是关于评论的,我只想分析 例如,我的列表是:在python中从列表中选择包含特定单词的特定元素,python,list,sentiment-analysis,Python,List,Sentiment Analysis,我想做一个情绪分析,但只想使用列表中包含某个单词的元素。这是关于评论的,我只想分析 例如,我的列表是: 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"] 我试着统计评论的总
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"]
我试着统计评论的总数(所以不是nivea被提及的总数,而是评论的总数),其中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)
这是正确的吗?或者我可以用更好的方法来做。您可以在中使用和来测试子字符串的正确性
nivea_comments = [c for c in comments if "nivea" in c]
如果你对函数式编程感兴趣,你会认识到这是一个很好的例子
使用正则表达式和列表理解 例如:
import re
new_list = [x for x in comments if re.search('nivea', x)]
s = "This is a check"
for word in s:
print(word)
第一次尝试: 您的第一次尝试没有得到正确的金额,因为它正在查找匹配的单词。如果注释中有“i”,则会查看“i”是否也出现在nivea中。它确实出现了,因此计数器将以1提高。这就是您没有得到正确金额的原因 第二次尝试: 第二次尝试给出了不同的答案,因为您使用len()询问列表的长度,而不是列表中所有值的总和。它与第一次尝试存在相同的问题,因此该值仍然高于上次尝试的值 作为对你最后一个问题的回答,这不是一个很好的方法,因为如果它是一个字符串,并且你使用for循环,它会对每个字母而不是每个注释执行。 例如:
import re
new_list = [x for x in comments if re.search('nivea', x)]
s = "This is a check"
for word in s:
print(word)
将返回:
T
h
i
s
等等
因此,最好使用前面提到的列表理解。非常感谢!我学习了正则表达式,但我尝试使用re.match选项或re.findall,但不起作用。这很管用!你能解释一下当你在注释中说:x代表x时发生了什么吗?我可以用其他东西代替x吗?是的,你可以,x代表x Iit’如果re.search找到模式,它会从名为x的评论中提取每个元素,并将其放入列表中。这就像一个常规的for循环,带有append to list,但只在一行中。好的,谢谢!现在,我有点困惑,因为我以前尝试过不同的方法来获取提到品牌的评论总数。所有我尝试过的方法得到了不同的答案。你能解释一下发生了什么吗?我会在我的第一个问题框中写出来。如果在x中使用“nivea”,为什么不在注释中使用
[x代表x]
,正如本杰明·霍奇森所做的那样?在这种情况下,使用正则表达式比较容易,但由于我的工作领域,这是我想到的第一件事。但我同意@CodingLambdas的说法,在这里更容易。