我正在NLTK Python中学习一门课程,该课程在“文本语料库”上存在动手问题(在Katacoda上),并且不接受下面提到的我的解决方案。长期以来一直困扰于此问题。需要完成此动手操作才能继续进行序言。
问题定义:
导入就职语料库对于每个就职地址文本 在语料库中可用,请执行以下操作。将所有单词转换成 小写。然后确定以美国开头的单词数 或公民。
提示:计算条件频率分布,其中条件是就职地址交付的年份,事件是 美国或公民。存储条件频率 分布在变量ac_cfd中。
在[1841年]中打印单词['america','citizen']的频率, 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不接受此解决方案,并且由于必须完成动手操作,因此我无法在课程中继续前进。 请帮助
答案 0 :(得分:1)
使用以下代码。它在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
答案 1 :(得分:0)
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'])
问题是在[1841,1993]年打印['america','citizen']单词的出现频率,但是您却做相反的事情,因此它没有被接受。