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()
如果没有,是否有其他包可能会这样做?
答案 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])