簡體   English   中英

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

[英]How to save NLTK concordance results in a list?

我正在使用NLTK在文本中查找單詞。 我需要將一致性函數的結果保存到列表中。 這個問題已在這里提出但我看不出變化。 我試圖通過以下方式找到函數的returnde值的類型:

type(text.concordance('myword'))

結果是:

<class 'NoneType'>

通過檢查ConcordanceIndex的源代碼,我們可以看到結果打印到stdout。 如果不能將stdout重定向到文件 ,則必須重新實現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'>

要使用文本一致性,您需要實例化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

Text類現在有一個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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM