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