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()
实现
如果没有,是否有其他软件包可以做到这一点?在
利用Ch 3.4这就是我最后要做的
FreqDist
只是一种字典,字典键只能通过完全匹配来工作。在要使用regexp进行类似的操作,您需要使用一种非常困难的方法:迭代所有条目并将匹配的单词的计数相加。当然,这需要扫描整个列表,所以如果列表很大,它会很慢,而且你需要做很多事情。在
如果只通过前缀进行匹配,请使用名为“前缀树”或"trie"的数据结构。你大概能猜到它是干什么的。一个简单的解决方法是在
FreqDist
中记录你看到的每个单词的每个前缀的计数(因此不仅仅是整个单词)。在相关问题 更多 >
编程相关推荐