NTLK nltk.ConditionalFreqDist-绘制ngrams

问题描述 投票:0回答:1

这里有两个示例,一个有效且源自https://www.nltk.org/book/ch02.html另一个没有。第一个示例绘制了单个单词的频率,此处为['america', 'citizen']。第二个是修改后的版本(显然是错误地),它试图绘制二元组['america citizen']的频率。我想绘制ngram频率,例如['america citizen']之类的双字母。

Plot Example 1Plot Example 2 - failed

import nltk
from nltk.book import *
import matplotlib.pyplot as plt
from nltk.corpus import inaugural
inaugural.fileids()
plt.ion() # turns interactive mode on
[fileid[:4] for fileid in inaugural.fileids()]



############- this works ####
cfd = nltk.ConditionalFreqDist(
     (target, fileid[:4])
     for fileid in inaugural.fileids()
     for w in inaugural.words(fileid)
     for target in ['america', 'citizen']
     if w.lower().startswith(target)) 
ax = plt.axes()
cfd.plot()

############- this does not work ####

cfd = nltk.ConditionalFreqDist(
     (target, fileid[:4])
     for fileid in inaugural.fileids()
     for w in inaugural.words(fileid)
     for target in ['american citizen']
     if w.lower().startswith(target)) 
ax = plt.axes()
cfd.plot()

这里有两个示例,一个有效,并且源自https://www.nltk.org/book/ch02.html,另一个无效。第一个示例绘制单个单词的频率,此处['america','...

python plot nltk
1个回答
0
投票

在我看来,您试图找到'american citizen',这是一个由2个单词组成的搭配,其中每个单词都位于其中。这注定会失败。您将需要检查成对的连续单词中是否存在这样的双字母,并且需要压缩单词列表,将第二个单词移动1个单词。

© www.soinside.com 2019 - 2024. All rights reserved.