Использование условных переменных с модулем согласования nltk - PullRequest
1 голос
/ 20 марта 2012

Я только начал работать с nltk, и у меня возникли проблемы с настройкой модуля согласования для работы с условными переменными.Я хотел бы вернуть согласие для любого данного слова в латинском тексте, но так как язык изменен, я хочу иметь возможность указать основание, идентифицировать любое слово в корпусе, который содержит основание, и вернуть согласие для этого,Код, который я использую:

book1 = open('Book1.txt', 'rU').read()
token1 = nltk.word_tokenize(book1)
text1 = nltk.Text(token1)

word = raw_input("What stem do you want to search?\n > ")

text1.concordance([w for w in text1 if w.startswith(word)])

, который возвращает ошибку:

    Traceback (most recent call last):
  File "C:\Users\admin\Desktop\start_nltk_horace.py", line 68, in <module>
    concordance()
  File "C:\Users\admin\Desktop\start_nltk_horace.py", line 49, in concordance
    text1.concordance([w for w in text1 if w.startswith(word)])
  File "C:\Python27\lib\site-packages\nltk\text.py", line 314, in concordance
    self._concordance_index.print_concordance(word, width, lines)
  File "C:\Python27\lib\site-packages\nltk\text.py", line 177, in print_concordance
    offsets = self.offsets(word)
  File "C:\Python27\lib\site-packages\nltk\text.py", line 156, in offsets
    word = self._key(word)
  File "C:\Python27\lib\site-packages\nltk\text.py", line 312, in <lambda>
    key=lambda s:s.lower())
AttributeError: 'list' object has no attribute 'lower'

Простое указание text1.concordance(word) возвращает то, что я ищу, без каких-либо проблем (при условии ввода данныхполностью отклоненное слово), но мне пришлось бы повторять эту функцию шесть раз, чтобы получить согласованность для всех различных склонений слова.

1 Ответ

1 голос
/ 20 марта 2012

Я думаю, что проблема в том, что вы пытаетесь снабдить функцию concordance() NLTK списком слов, когда она принимает только строку.Вместо этого попробуйте следующее:

my_concordances = []
my_inputs = [elem for elem in text1 if elem.startswith(word)]
for input in my_inputs:
    my_concordances.append(text1.concordance(input))

Затем my_concordances должен закончиться списком, где каждая запись является соответствием для другого слова, которое начинается с необработанной входной строки.Вы также можете рассмотреть возможность предварительного выделения пространства для my_concordances в зависимости от того, какой конкретный тип данных возвращается функцией concordance(), поскольку вы можете просто проверить длину my_inputs.Это может улучшить скорость, если это проблема.

Обратите внимание, что этот вопрос также может представлять интерес для вас.Более подробно о concordance().

...