我试图判断并提取人(PER)和地方(GPE)之间的关系。
句子:" John来自俄亥俄州,Michael来自佛罗里达州,Rebecca来自田纳西州的纳什维尔。"
对于最后一个人来说,她既有一个城市,也有一个可以被提取出来的州。到目前为止,我已尝试使用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']
问题是丽贝卡。我怎样才能提到纳什维尔和田纳西都是她所在地的一部分?或者甚至只是田纳西州?
答案 0 :(得分:0)
在我看来,你必须首先提取位置内关系(田纳西州的纳什维尔)。然后确保您将所有地点过渡到Rebecca(如果Rebecca在纳什维尔,Nashville在田纳西州,那么Rebecca在纳什维尔,Rebecca在田纳西州。)
这将是另一种关系类型和上述推理的一些逻辑(事情很快变得复杂但很难避免)。