调用NLTK的语料库-如何获取某个词前后的文本?

11 投票
1 回答
6604 浏览
提问于 2025-04-17 10:27

我想知道在concordance返回的实例后面跟着什么文本。举个例子,如果你查看他们在‘搜索文本’部分中给出的例子,他们得到了单词‘monstrous’的共现。那么,怎么才能得到‘monstrous’后面紧接着的单词呢?

1 个回答

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')])

产生

['size', 'bulk', 'clubs', 'cannibal', 'and', 'fable', 'Pictures', 'pictures', 'stories', 'cabinet', 'size']

我通过查找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

在那个文件里你会找到

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)

这展示了如何创建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])

通过在IPython解释器中进行一些实验,这显示self.offsets('monstrous')会给出一个数字列表(偏移量),这些数字表示单词monstrous出现的位置。你可以用self._tokens[offset]来访问实际的单词,这和text1.tokens[offset]是一样的。

所以在monstrous之后的下一个单词可以通过text1.tokens[offset+1]来获取。

撰写回答