我试图找到导出到.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]姓名1姓氏1:刚好在管子上
[06/12/2017,18:09:29]姓名1姓氏:我需要25分钟,所以我要把它剪得很好
[06/12/2017,18:36:16]姓名2姓氏2:我只是在11号平台等候
[16/12/2017,00:06:34]姓名2姓:我的留言没有发送
[16/12/2017,00:10:55]姓名1姓氏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))
不包含数字。然而,它仍然包括一些不需要的词,如名称和"无意义"像''和'和':
[('Name1', 6686), ('Surname1:', 6615), ('I', 2277), ('Name2', 2000), ('Surname2:', 1990), ('you', 1714), ('to', 1488), ('and', 1084), ('a', 885), ('the', 881)]
我可以添加什么来删除这些词?
我理解这类似于How do I remove entries within a Counter object with a loop without invoking a RuntimeError? 但是当我尝试使用类似的方式格式化我的代码时,它还没有成功,并且对它的工作原理感到有点困惑。 (对不起,因为我说我对python很新,我的意思是非常新的。)
答案 0 :(得分:0)
查看您的输入我建议您在将其输入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)