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