Требуется практическое решение Python NLTK Inaugural Text Corpora

Я делаю курс в NLTK Python, который имеет практическую проблему (на Katacoda) на "Text Corpora", и он не принимает мое решение, упомянутое ниже. Застрял в этой проблеме с давних пор. Необходимо завершить этот практический курс, чтобы продолжить предисловие в курсе.

Определение проблемы:

Импорт первого корпуса Для каждого из вступительных текстов адреса, доступных в корпусе, выполните следующее. Преобразуйте все слова в нижний регистр. Затем определите количество слов, начинающихся с америки или гражданина.

Подсказка: вычислите условное распределение частоты, где условием является год, в котором был представлен вступительный адрес, а событием является либо Америка, либо гражданин. Сохраните условное распределение частоты в переменной 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 не принимает это решение, и я не могу продолжить работу в этом курсе, поскольку прохождение практического курса является обязательным. Пожалуйста помоги

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 
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], но вы поступали наоборот, поэтому его не приняли.

Другие вопросы по тегам