2016-10-06 3 views
3

Я экспериментирую с NLTK, чтобы помочь мне разобрать текст. До сих пор использование функции sent_tokenize было очень полезно при организации текста. В качестве примера у меня есть:Извлечение между токенами с помощью NLTK

1 Robins Drive owned by Gregg S. Smith was sold to TeStER, LLC of 494 Bridge Avenue, Suite 101-308, Sheltville AZ 02997 for $27,000.00. 

с помощью:

words =pos_tag(word_tokenize(sentence)) 

я получаю:

[('1', 'CD'), ('Robins', 'NNP'), ('Drive', 'NNP'), ('owned', 'VBN'), ('by', 'IN'), ('Gregg', 'NNP'), ('S.', 'NNP'), ('Smith', 'NNP'), ('was', 'VBD'), ('sold', 'VBN'), ('to', 'TO'), ('TeStER', 'NNP'), (',', ','), ('LLC', 'NNP'), ('of', 'IN'), ('494', 'CD'), ('Bridge', 'NNP'), ('Avenue', 'NNP'), (',', ','), ('Suite', 'NNP'), ('101-308', 'CD'), (',', ','), ('Sheltville', 'NNP'), ('AZ', 'NNP'), ('02997', 'CD'), ('for', 'IN'), ('$', '$'), ('27,000.00', 'CD'), ('.', '.')] 

Я смотрел на различные учебные пособия и книги http://www.nltk.org/book/, но я не уверен, наилучшего подхода к извлечению из двух токенов. Например, я хочу выбрать маркеры между «принадлежащими» и «был продан», чтобы получить имя владельца. как я могу лучше всего использовать функции NLTK и python для этого?

+1

Wonder, если есть, не регулярное выражение решения с использованием, скажем, коллокаций или ngrams .. – alecxe

+0

Взгляните на 'дистанционное наблюдение': http://web.stanford.edu/~jurafsky/mintz.pdf – alvas

ответ

4

Это одно решение, чтобы выбрать маркеры между словами, которые вы писали:

import re 
from nltk.tokenize import RegexpTokenizer 

tokenizer = RegexpTokenizer(r'owned by(.*?)was sold to') 

string = '1 Robins Drive owned by Gregg S. Smith was sold to TeStER, LLC of 494 Bridge Avenue, Suite 101-308, Sheltville AZ 02997 for $27,000.00.' 
s = tokenizer.tokenize(string) 

возвращается:

[' Gregg S. Smith '] 
+1

Спасибо, хотя это эффективно в этом случае, я задавался вопросом о решении, использующем теги POS как Что ж. – user61629