繁体   English   中英

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

[英]Matching multiple words with FreqDist in 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()

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

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

要将正则表达式用于类似这样的事情,您需要用困难的方式做到:遍历所有条目并累加匹配单词的计数。 当然,这需要扫描整个列表,因此如果列表很大,扫描速度会很慢,您需要做很多事情。

如果仅在通过前缀匹配之后,请使用称为“前缀树”或“ trie”的数据结构。 您可能会猜到它在做什么。 一个简单的解决方法是在FreqDist记录您看到的每个单词的每个前缀的计数(因此,不仅限于完整的单词)。

利用第3.4章,这是我最终要做的

import re

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM