Python 3.x 如何排除或删除Python中的特定部分
我想分析一下下面的聊天日志,找出最常用的单词。因此,我只需要[time]之后的部分,比如[01:25]。我将如何改变Python 3.x 如何排除或删除Python中的特定部分,python-3.x,Python 3.x,我想分析一下下面的聊天日志,找出最常用的单词。因此,我只需要[time]之后的部分,比如[01:25]。我将如何改变 +++ 约翰,麦克斯,戴着超级帽子的特蕾西 保存日期:2019-11-22 19:29:46 ---------------2019年7月9日,星期二--------------- [约翰][00:27]你好 [Max][01:25]否 有人有香蕉吗? [Max][04:39]没有 我的天啊 ---------------2019年7月10日星期三---------------
+++
约翰,麦克斯,戴着超级帽子的特蕾西
保存日期:2019-11-22 19:29:46
---------------2019年7月9日,星期二---------------
[约翰][00:27]你好
[Max][01:25]否
有人有香蕉吗?
[Max][04:39]没有
我的天啊
---------------2019年7月10日星期三---------------
有人有杯子吗?
[Max][14:45]没有
[约翰][14:45]哦,我的佛陀
+++
从集合导入计数器
进口稀土
wordDict=计数器()
将open(r'C:chatlog.txt,'r',encoding='utf-8')作为f:
chatline=f.readlines()
chatline=[x.strip()表示chatline中的x]
聊天线=[x代表聊天线中的x,如果是x]
对于范围内的计数(len(聊天热线)):
如果计数小于2:
持续
聊天热线中的elif'--------------':
持续
关于split(r“\[\d{2}[:]\d{2}\]”,聊天热线中x代表x)#可能需要修改此部分
打印(‘单词’、‘频率’)
对于word,最常见的单词频率(50):
打印({0:10s}:{1:3d})。格式(word,freq))
尝试像这样使用拆分
lines = ["[Tracey] [02:31] Anybody has some bananas?","[John] [20:58] Oh my goodness"]
for i in lines:
print(i.split(' ')[2:])
您可以使用模式
/^.*?\[\d\d:\d\d\]\s*(.+)$/
来匹配相关行后的文本(我会逐行处理,而不是使用f.readlines()
来读取文件,这对内存不友好)。因为时间戳是非常唯一的,所以不需要专门处理其他任何事情,但是如果您愿意,可以对行开头用户名周围的括号进行测试
import re
from collections import Counter
words = []
with open("chatlog.txt", "r", encoding="utf-8") as f:
for line in f:
m = re.search(r"^.*?\[\d\d:\d\d\]\s*(.+)$", line)
if m:
words.extend(re.split(r"\s+", m.group(1)))
for word, freq in Counter(words).most_common(50):
print("{0:10s} : {1:3d}".format(word, freq))
输出:
No:3
任何人:2
民政事务总署:2
哦:2
我的:2
嗨:1
部分:1
香蕉1.
天哪:1
a:1
杯子?:1.
佛陀:1
可以看出,剥离标点符号也值得一做。你可以用像这样的东西
# ...
if m:
no_punc = re.split(r"\W+", m.group(1))
words.extend([x for x in no_punc if x])
# ...
如果我处理频繁的用户名,我将如何更改Regex?没问题。您可以使用类似于
^\[.+?\]\s+\[\d\d:\d\d\]\s*(.+)$
的内容,强制执行[foo]
出现在[timestamp]
部分之前。
# ...
if m:
no_punc = re.split(r"\W+", m.group(1))
words.extend([x for x in no_punc if x])
# ...