Я хотел бы узнать, какой текст появляется после экземпляра, возвращаемого конкордацей. Например, если вы посмотрите на пример, который они приводят в разделе "Поиск текста" , они получают соответствие слова "чудовищный". Как вы получите слова, которые появляются сразу после случая чудовищного?
Вызов согласования NLTK - как получить текст до/после слова, которое было использовано?
Ответ 1
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]
.