在nltk中使用FreqDist匹配多个单词

时间:2015-09-30 01:35:35

标签: python regex python-3.x nltk

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()

如果没有,是否有其他包可能会这样做?

2 个答案:

答案 0 :(得分:0)

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

要使用regexp这样的东西,你需要以艰难的方式去做:迭代所有条目并添加匹配单词的计数。当然,这需要扫描整个列表,如果列表很大,它会很慢,你需要做很多。

如果您只是在通过前缀匹配之后,请使用名为"前缀树的数据结构"或"trie"。你可能猜到它的作用。一个简单的解决方法是在FreqDist中为您看到的每个单词的每个前缀记录计数(因此不仅仅是完整的单词)。

答案 1 :(得分:0)

利用Ch 3.4这就是我最终做的事情

import re

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