簡體   English   中英

在Python中使用Counter,如何過濾最常見的單詞

[英]Using Counter in Python, how do I filter the most common words

我試圖找到在導出到.txt文件的whatsapp聊天中使用的最常用單詞。 此代碼有效...

from collections import Counter
import re
words = re.findall(r'\w+', open('chat.txt').read().lower())
print(Counter(words).most_common(10))

...但是它包括所有日期以及我自己的名字和收件人的名字。 我可以添加什么使其忽略某些單詞? (我敢肯定有一個非常簡單的解決方案,但我對python還是很陌生。)謝謝!

編輯:

我現在所理解的問題並沒有很好地解釋。 我意識到我不太具體,因為我主要只是復制代碼示例並嘗試有效的方法,而不是分析代碼本身。

我試圖在.txt文件中找到最常見的詞,該文件是一個已存檔的whatsapp聊天,這是一個無聊的示例:

“ [06/12/2017,18:09:10] Name1姓氏1:現在就在管子上

[06/12/2017,18:09:29] Name1 Surname1:帶我走了25分鍾,所以我很想把它剪下來

[06/12/2017,18:36:16] Name2 Surname2:我只是在11號平台旁等候

[16/12/2017,00:06:34] Name2 Surname2:我的郵件未發送

[16/12/2017,00:10:55] Name1姓氏1:

[16/12/2017,00:11:14] Name1姓氏1:由於某種原因,這些只是通過“

在使用以上代碼對這篇文章進行的第一次編輯中,結果如下:

[('2018', 8552), ('name1', 6753), ('surname1', 6625), ('02', 4520), ('03', 3810), ('i', 3322), ('you', 2275), ('name2', 2016), ('01', 1995), ('surname2', 1991)]

所以它包括日期和名稱,我想排除。

但是此代碼:

from collections import Counter

with open('_chat.txt') as fin:
counter = Counter(fin.read().strip().split())

print(counter.most_common(10))

不包括數字。 但是,它仍然包含一些不需要的單詞(例如名稱)和“無意義的”單詞(例如“ the”和“ and”):

[('Name1', 6686), ('Surname1:', 6615), ('I', 2277), ('Name2', 2000), ('Surname2:', 1990), ('you', 1714), ('to', 1488), ('and', 1084), ('a', 885), ('the', 881)]

我可以添加些什么來刪除這類單詞?

我了解這類似於如何在不調用RuntimeError的情況下使用循環刪除Counter對象中的條目? 但是當我嘗試類似地格式化我的代碼時,它並沒有成功,並且對它的工作方式也有些困惑。 (很抱歉,當我說我對python很陌生時,我的意思是非常新。)

查看您的輸入內容,建議您先清潔它,然后再將其放入Counter

如果您的文件帶有如下所示的行:

[06/12/2017, 18:09:10] Name1 Surname1: just on the tube now

然后,您可以通過查找[第一個結束]來清除日期,然后在其后進行分割,然后通過對:做類似的操作來清除名稱。 可以使用file.readlines()讀取文件中的行,然后對每個行進行處理,例如

with open('chat.txt') as f:
    lines = f.readlines()
def clean_line(line):
    """
       Find the first ], assume it's followed by a space and
         slice off everything after that
       Split the line on the first : and take the second part
         of the resulting list
    """
    return line[line.find(']')+2:].split(':', 1)[1]
words = []
for line in lines:
    words += clean_line(line).lower().split()

counted_words = Counter(words)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM