Вызов согласия NLTK - как получить текст до / после слова, которое было использовано? - PullRequest
10 голосов
/ 17 января 2012

Я хотел бы узнать, какой текст появляется после экземпляра, который возвращает concordace. Так, например, если вы посмотрите на пример, который они приводят в разделе «Поиск текста» , они получат соответствие слова «чудовищный». Как бы вы получили слова, которые приходят сразу после чудовищного случая?

1 Ответ

20 голосов
/ 17 января 2012
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].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...