我使用NLTK在文本中查找单词。我需要将一致性函数的结果保存到列表中。问题已经被问到here 但我看不出变化。我试图通过以下方式找到函数的returnde值的类型:
type(text.concordance('myword'))
结果是:
<class 'NoneType'>
答案 0 :(得分:3)
通过检查ConcordanceIndex
的来源,我们可以看到结果打印到stdout。如果redirecting stdout to a file不是一个选项,则必须重新实现ConcordanceIndex.print_concordance
,以便返回结果而不是将其打印到stdout。
<强>代码:强>
def concordance(ci, word, width=75, lines=25):
"""
Rewrite of nltk.text.ConcordanceIndex.print_concordance that returns results
instead of printing them.
See:
http://www.nltk.org/api/nltk.html#nltk.text.ConcordanceIndex.print_concordance
"""
half_width = (width - len(word) - 2) // 2
context = width // 4 # approx number of words of context
results = []
offsets = ci.offsets(word)
if offsets:
lines = min(lines, len(offsets))
for i in offsets:
if lines <= 0:
break
left = (' ' * half_width +
' '.join(ci._tokens[i-context:i]))
right = ' '.join(ci._tokens[i+1:i+context])
left = left[-half_width:]
right = right[:half_width]
results.append('%s %s %s' % (left, ci._tokens[i], right))
lines -= 1
return results
<强>用法:强>
from nltk.book import text1
from nltk.text import ConcordanceIndex
ci = ConcordanceIndex(text1.tokens)
results = concordance(ci, 'circumstances')
print(type(results))
<class 'list'>
答案 1 :(得分:0)
要使用文本一致性,您需要实例化一个NLTK Text()
对象,然后在该对象上使用concordance()
方法:
import nltk.corpus
from nltk.text import Text
moby = Text(nltk.corpus.gutenberg.words('melville-moby_dick.txt'))
这里我们在文本文件melville-moby_dick.txt
上实例化一个Text对象,然后我们就可以使用这个方法:
moby.concordance("monster")
如果您在此处使用NonType,则会因为您没有创建任何Text
对象,因此您的变量text
为None
。
答案 2 :(得分:0)
文本类now has和concordance_list
函数。例如:
from nltk.corpus import gutenberg
from nltk.text import Text
corpus = gutenberg.words('melville-moby_dick.txt')
text = Text(corpus)
con_list = text.concordance_list("monstrous")