用n中的FreqDist匹配多个单词

2024-09-30 14:31:17 发布

您现在位置:Python中文网/ 问答频道 /正文

import nltk
from nltk.tokenize import word_tokenize

txt = "finding a common place isn't commonly available among commoners place"

fd = nltk.FreqDist()

for w in word_tokenize(a.lower()):
    fd[w] += 1

我有上面的脚本,工作得很好。如果我fd['place']我得到2,如果我输入fd['common']我得到1。在

是否可以键入类似于fd['common*'](这不起作用)来获得3,并可能获得这些匹配项的列表?三个匹配将是(common, commonly, commoners)

我假设它与regex有关,但不确定如何用FreqDist()实现

如果没有,是否有其他软件包可以做到这一点?在


Tags: fromimporttxtplacecommoncommonlywordavailable
2条回答

利用Ch 3.4这就是我最后要做的

import re

for w in fd:
    if re.search('common', w):
        print(w,fd[w])

FreqDist只是一种字典,字典键只能通过完全匹配来工作。在

要使用regexp进行类似的操作,您需要使用一种非常困难的方法:迭代所有条目并将匹配的单词的计数相加。当然,这需要扫描整个列表,所以如果列表很大,它会很慢,而且你需要做很多事情。在

如果只通过前缀进行匹配,请使用名为“前缀树”或"trie"的数据结构。你大概能猜到它是干什么的。一个简单的解决方法是在FreqDist中记录你看到的每个单词的每个前缀的计数(因此不仅仅是整个单词)。在

相关问题 更多 >