如何在列表中保存NLTK索引结果?

时间:2017-12-05 09:20:46

标签: python nlp nltk corpus

我使用NLTK在文本中查找单词。我需要将一致性函数的结果保存到列表中。问题已经被问到here 但我看不出变化。我试图通过以下方式找到函数的returnde值的类型:

type(text.concordance('myword'))

结果是:

<class 'NoneType'>

3 个答案:

答案 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对象,因此您的变量textNone

答案 2 :(得分:0)

文本类now hasconcordance_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")