使用条件变量和nltk的一致性模块

时间:2012-03-19 21:01:07

标签: python conditional nltk

我刚开始使用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 个答案:

答案 0 :(得分:1)

我认为问题在于,当它只接受一个字符串时,你试图为NLTK的concordance()函数提供一个单词列表。请尝试以下方法:

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的长度。如果这是一个问题,这可能会提高速度。

请注意this question也可能对您感兴趣。它详细介绍了concordance()