需要Python NLTK就职文本语料库动手解决方案

时间:2018-07-19 05:21:47

标签: python nltk nltk-book

我正在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不接受此解决方案,并且由于必须完成动手操作,因此我无法在课程中继续前进。 请帮助

2 个答案:

答案 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']单词的出现频率,但是您却做相反的事情,因此它没有被接受。