-1

我正在学习 NLTK Python 课程,该课程在“Text Corpora”上有一个动手问题(在 Katacoda 上),它不接受我下面提到的解决方案。长期以来一直被困在这个问题上。需要完成此动手操作才能在课程中进行前言。

问题定义:

导入就职语料库 对于语料库中可用的每个就职地址文本,执行以下操作。将所有单词转换为小写。然后确定以美国或公民开头的单词数。

提示:计算条件频率分布,其中条件是就职演说发表的年份,事件是美国或公民。将条件频率分布存储在变量 ac_cfd 中。

打印 ['america', 'citizen'] 在年份 [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 不接受这个解决方案,我无法在课程中继续前进,因为必须完成动手操作。请帮忙

4

2 回答 2

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 
于 2020-03-31T20:18:10.410 回答
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'] 的频率,但你在哪里做相反的事情,因此它没有被接受。

于 2018-08-02T11:02:56.157 回答