我正在学习NLTK Python课程,该课程在"Text Corpora"上有一个实际操作问题(在Katacoda上(,它不接受我下面提到的解决方案。我在这个问题上纠缠了很久。需要在课程中完成这个动手进行的前言。
问题定义:
导入就职演说语料库每个就职演说文本在语料库中可用,执行以下操作。将所有单词转换为小写。然后确定以"美国"开头的单词数或公民。
提示:计算条件频率分布,其中条件是发表就职演说的年份,事件是要么是美国人,要么是公民。存储条件频率变量ac_cfd中的分布
打印单词【美国】、【公民】在年份【1841,1993年]。
提示:使用与条件频率分布相关的制表方法
为此,我写了以下解决方案:
ac_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))
ac_cfd.tabulate(conditions=['america', 'citizen'], samples=['1841', '1993'])
输出:
1841 1993
american 7 14
citizen 38 2
我在不同的论坛上都能找到同样的问题,尽管我确实发现了一个类似的问题,想要绘制条件频率分布,他们的解决方案和我的一样,只是有一个不同,而不是将他们绘制的线制表。(https://www.nltk.org/book/ch02.html)但Katacoda不接受这个解决方案,我无法在课程中继续前进,因为完成实践是强制性的。请帮助
使用以下代码。它在Katacoda上对我有效。有问题的是,它要求单词以美国和公民开头,因此我将单词切成7个字符。
import nltk
from nltk.corpus import inaugural
ac_cfd = nltk.ConditionalFreqDist([(fileid[:4],word.lower()[:7])
for fileid in inaugural.fileids()
for word in inaugural.words(fileid)
])
print(ac_cfd.tabulate(conditions =['1841', '1993'], samples=['america', 'citizen'] ))
america citizen
1841 7 38
1993 33 2
ac_cfd = nltk.ConditionalFreqDist(
[(fileid[:4], target) for fileid in inaugural.fileids() for w in inaugural.words(fileid) for target in
['america', 'citizen'] if w.lower().startswith(target)])
ac_cfd.tabulate(conditions=['1841', '1993'], samples=['america', 'citizen'])
问题是在18411993年印刷单词["america","citizen"]的频率,但你在哪里做相反的事情,因此它不被接受。