[英]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.