2017-03-13 1 views
3

Ich verwende NLTK, um die Beziehung zwischen einem PERSON und einer ORGANISATION zu extrahieren.Extrahiere Beziehungen aus einem Satz in NLTK

Auch ich möchte die Beziehung zwischen ORGANISATION und Standort extrahieren. Die NLTK-Version ist 3.2.1.

Ich habe Gebrauch von Wort-zu-Wort-Kennzeichnung und genannter Entity Recognition (NER) gemacht. Auch der Parse Tree wird für die NER-Ergebnisse gezeichnet.
Aber ich bin nicht in der Lage, die erwähnten Beziehungen aus diesem Satz zu extrahieren. Hier

ist der Code:

import nltk, re 
from nltk import word_tokenize 

sentence = "Mark works at JPMC in London every day" 
pos_tags = nltk.pos_tag(word_tokenize(sentence))   # POS tagging of the sentence 
ne = nltk.ne_chunk(pos_tags)        # Named Entity Recognition 
ne.draw()             # Draw the Parse Tree 

IN = re.compile(r'.*\bin\b(?!\b.+ing)') 
for rel1 in nltk.sem.extract_rels('PER', 'ORG', pos_tags, pattern = IN): 
    print(nltk.sem.rtuple(rel1)) 
for rel2 in nltk.sem.extract_rels('ORG', 'LOC', pos_tags, pattern = IN): 
    print(nltk.sem.rtuple(rel2)) 


Wie 'Person - Organisation' extrahieren Beziehung und 'Organization - Location' Beziehung?

Antwort

2

Ich denke, Docs ist nicht markiert pos, sollte es NE sein.

Arbeits Code

senten = "Mark works in JPMC in London every day" 
pos_tags = nltk.pos_tag(word_tokenize(senten)) # POS tagging of the sentence 
ne = nltk.ne_chunk(pos_tags) # Named Entity Recognition 

chunked = nltk.ne_chunk_sents(pos_tags, binary=True) 
# ne.draw() # Draw the Parse Tree 


print(pos_tags) 

IN = re.compile(r'.*\bin\b(?!\b.+ing)') 

for rel in nltk.sem.extract_rels('PERSON', 'ORGANIZATION', ne, corpus='ace', pattern=IN): 
    print(nltk.sem.rtuple(rel)) 

Ausgabe

[PER: 'Mark/NNP'] 'Werke/VBZ in/IN' [ORG: 'JPMC/NNP']

Verwandte Themen