我想進行情感分析,但只想使用包含某個單詞的列表元素。這是關於意見,我只是想分析的是從python的列表中選擇包含某個單詞的特定元素
例如,我的名單的評論:
comments = ["nice blog","i like your blog","nivea is a nice product","i like 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]
然後我刪除了所有具有零值的元素(因爲這些是不是關於妮維雅
niveacountlistpos=[x for x in niveacountlist if x != 0]
print(len(niveacountlistpos))
這導致了3771個評論評論..
最後一次嘗試: 我最後的嘗試是什麼你們回答我,我的第一個問題,所以我用正則表達式,做:
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)
這是正確的嗎?或者我可以以更好的方式做到這一點..
非常感謝!我瞭解了正則表達式,但我嘗試使用re.match選項或re.findall,但它不起作用。這工作!你可以解釋一下當你說:x for x在評論中發生了什麼?我可以用其他東西替換x嗎? –
是的,你可以,x for x從註釋中獲取每個元素的名稱x,並將其放置在列表中,如果re.search找到該模式的話。它就像循環中的常規循環,附加到列表中,但在一行中。 –
好的,謝謝!現在,我有點困惑,因爲我嘗試過不同的方式來獲得品牌提及的評論總數。我嘗試的所有方式都會導致不同的答案。你能解釋一下發生了什麼嗎?我會寫在我的第一個問題框中。 –