Я пытаюсь взять предложение и извлечь связь между человеком (PER) и местом (GPE).
Предложение: «Джон из Огайо, Майкл из Флориды, а Ребекка из Нэшвилла, штат Теннесси».
Для последнего человека у нее есть и город, и штат, которые могут быть извлечены в качестве ее места. До сих пор я пытался использовать nltk для этого, но смог извлечь только ее город, а не ее штат.
Что я пробовал:
import re
from nltk import ne_chunk, pos_tag, word_tokenize
from nltk.sem.relextract import extract_rels, rtuple
sentence = "John is from Ohio, Michael is from Florida and Rebecca is from Nashville which is in Tennessee."
chunked = ne_chunk(pos_tag(word_tokenize(sentence)))
ISFROM = re.compile(r'.*\bfrom\b.*')
rels = extract_rels('PER', 'GPE', chunked, corpus = 'ace', pattern = ISFROM)
for rel in rels:
print(rtuple(rel))
Мой вывод:
[PER: 'John/NNP'] 'is/VBZ from/IN' [GPE: 'Ohio/NNP']
[PER: 'Michael/NNP'] 'is/VBZ from/IN' [GPE: 'Florida/NNP']
[PER: 'Rebecca/NNP'] 'is/VBZ from/IN' [GPE: 'Nashville/NNP']
Проблема в Ребекке. Как я могу извлечь, что и Нэшвилл, и Теннесси являются частью ее местонахождения? Или хотя бы только один Теннесси?