如何将 NLTK 索引结果保存在列表中?
How to save NLTK concordance results in a list?
我正在使用 NLTK 在文本中查找单词。我需要将索引函数的结果保存到列表中。该问题已被问到 here
但我看不到变化。我尝试通过 :
找到函数返回值的类型
type(text.concordance('myword'))
结果是:
<class 'NoneType'>
要使用文本索引,您需要实例化一个 NLTK Text()
对象,然后对该对象使用 concordance()
方法:
import nltk.corpus
from nltk.text import Text
moby = Text(nltk.corpus.gutenberg.words('melville-moby_dick.txt'))
这里我们在文本文件上实例化一个 Text 对象 melville-moby_dick.txt
然后我们就可以使用方法 :
moby.concordance("monster")
如果你在这里有一个 NonType,这似乎是因为你没有创建任何 Text
对象,所以你的变量 text
是 None
。
通过检查 ConcordanceIndex
, we can see that results are printed to stdout. If redirecting stdout to a file 的来源不是一个选项,您必须重新实现 ConcordanceIndex.print_concordance
以使其 returns 结果而不是将其打印到标准输出。
代码:
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'>
文本 class 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")
我正在使用 NLTK 在文本中查找单词。我需要将索引函数的结果保存到列表中。该问题已被问到 here 但我看不到变化。我尝试通过 :
找到函数返回值的类型type(text.concordance('myword'))
结果是:
<class 'NoneType'>
要使用文本索引,您需要实例化一个 NLTK Text()
对象,然后对该对象使用 concordance()
方法:
import nltk.corpus
from nltk.text import Text
moby = Text(nltk.corpus.gutenberg.words('melville-moby_dick.txt'))
这里我们在文本文件上实例化一个 Text 对象 melville-moby_dick.txt
然后我们就可以使用方法 :
moby.concordance("monster")
如果你在这里有一个 NonType,这似乎是因为你没有创建任何 Text
对象,所以你的变量 text
是 None
。
通过检查 ConcordanceIndex
, we can see that results are printed to stdout. If redirecting stdout to a file 的来源不是一个选项,您必须重新实现 ConcordanceIndex.print_concordance
以使其 returns 结果而不是将其打印到标准输出。
代码:
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'>
文本 class 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")