调用NLTK的一致性 - 如何在使用的单词之前/之后获取文本?

dev*_*per 11 python nltk

我想知道在concordace返回的实例之后会出现什么文本.例如,如果你看一下他们在"搜索文本"部分中给出的一个例子,他们会得到"怪异"这个词的一致性.你会怎么得到一个怪异事件之后的话?

unu*_*tbu 20

import nltk
import nltk.book as book
text1 = book.text1
c = nltk.ConcordanceIndex(text1.tokens, key = lambda s: s.lower())
print([text1.tokens[offset+1] for offset in c.offsets('monstrous')])
Run Code Online (Sandbox Code Playgroud)

产量

['size', 'bulk', 'clubs', 'cannibal', 'and', 'fable', 'Pictures', 'pictures', 'stories', 'cabinet', 'size']
Run Code Online (Sandbox Code Playgroud)

我通过查找concordance方法的定义来找到它.

这个节目text1.concordance定义/usr/lib/python2.7/dist-packages/nltk/text.py如下:

In [107]: text1.concordance?
Type:       instancemethod
Base Class: <type 'instancemethod'>
String Form:    <bound method Text.concordance of <Text: Moby Dick by Herman Melville 1851>>
Namespace:  Interactive
File:       /usr/lib/python2.7/dist-packages/nltk/text.py
Run Code Online (Sandbox Code Playgroud)

在那个文件中你会找到

def concordance(self, word, width=79, lines=25):
    ... 
        self._concordance_index = ConcordanceIndex(self.tokens,
                                                   key=lambda s:s.lower())
    ...            
    self._concordance_index.print_concordance(word, width, lines)
Run Code Online (Sandbox Code Playgroud)

这显示了如何实例化ConcordanceIndex对象.

在同一个文件中,您还会发现:

class ConcordanceIndex(object):
    def __init__(self, tokens, key=lambda x:x):
        ...
    def print_concordance(self, word, width=75, lines=25):
        ...
        offsets = self.offsets(word)
        ...
        right = ' '.join(self._tokens[i+1:i+context])
Run Code Online (Sandbox Code Playgroud)

通过在IPython解释器中进行一些实验,这个节目self.offsets('monstrous')给出了一个monstrous可以找到单词的数字列表(偏移量).您可以访问实际的单词,与之self._tokens[offset]相同text1.tokens[offset].

所以下一个词monstrous是由text1.tokens[offset+1].给出的.