我想***改进循环性能***,它计算文本中单词的出现次数,但现在它运行***大约5分钟,记录5条记录***
Dataframe
No Text
1 I love you forever...*500 other words
2 No , i know that you know xxx *100 words
我的单词列表
wordlist =['i','love','David','Mary',......]
我的字数代码
for i in wordlist :
df[i] = df['Text].str.count(i)
结果:
No Text I love other_words
1 I love you ... 1 1 4
2 No, i know ... 1 0 5
2条答案
按热度按时间waxmsbnn1#
尝试此算法
https://en.wikipedia.org/wiki/Aho–Corasick_algorithm升
你也可以搜索现成的实现,比如
https://github.com/Guangyi-Z/py-aho-corasick
qgzx9mmu2#
您可以通过从每个
Text
值中的单词生成一个Counter
,然后将其转换为列(使用pd.Series
),将wordlist
中不存在的列相加为other_words
并删除这些列:输出(针对问题中的示例数据):
注:
I
和i
。re.findall
而不是更明显的split()
,因此forever...
被计算为单词forever
(而不是forever...
)