2016-04-29 43 views
-1

我想進行情感分析,但只想使用包含某個單詞的列表元素。這是關於意見,我只是想分析的是從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) 

這是正確的嗎?或者我可以以更好的方式做到這一點..

回答

3

您可以使用list comprehensionin來測試子字符串。

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

如果您正在進行函數式編程,您會將其識別爲filter

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

使用正則表達式和列表理解 例如:

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

非常感謝!我瞭解了正則表達式,但我嘗試使用re.match選項或re.findall,但它不起作用。這工作!你可以解釋一下當你說:x for x在評論中發生了什麼?我可以用其他東西替換x嗎? –

+0

是的,你可以,x for x從註釋中獲取每個元素的名稱x,並將其放置在列表中,如果re.search找到該模式的話。它就像循環中的常規循環,附加到列表中,但在一行中。 –

+0

好的,謝謝!現在,我有點困惑,因爲我嘗試過不同的方式來獲得品牌提及的評論總數。我嘗試的所有方式都會導致不同的答案。你能解釋一下發生了什麼嗎?我會寫在我的第一個問題框中。 –

0

首先嚐試:

你的第一次嘗試,因爲它是尋找沒有得到適量在比賽中的詞。如果一個'我'在評論中,它會看看'我'也出現在妮維雅。它確實如此,所以櫃檯會以1加起來。這就是爲什麼你沒有在那裏得到合適的數量。

第二個嘗試:

第二次嘗試是給不同的答案,因爲你所要求的列表的長度LEN(),而不是列表中的所有值的總和。它也有第一次嘗試相同的問題,所以這就是爲什麼這個值仍然高於最後一次嘗試。

作爲你最後一個問題的答案,這不是一個好的做法。因爲如果它是一個字符串,並且您使用for循環,則它會爲每個字母而不是每個註釋執行此操作。 例如:

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

返回結果:

T 
h 
i 
s 

所以最好使用列表理解像前面提到的。

相關問題