2016-07-06 15 views
0

Ich habe gelernt, dass es eine eingebaute Funktion in NLTK die Beziehungen von NER-markierten Sätze nach folgendem extrahieren könnte:NLTK Relation Extraction - custom Korpus in relextract.extract_rels

import re 

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

    for fileid in ieer.fileids(): 
     for doc in ieer.parsed_docs(fileid): 
      for rel in relextract.extract_rels('ORG', 'LOC', doc, corpus='ieer', pattern = IN): 
       print(relextract.rtuple(rel)) 

Es scheint mir sehr viel versprechend für allgemeine Zwecke, aber ich habe verstanden, dass relextract.extract_rels nur 'ieer' oder 'conll2002' für den Parameter corpus akzeptiert. Aber in diesem Fall ist seine Verwendung nur auf diese beiden Korpora beschränkt, oder? Wie könnte man es für sein eigenes Korpus verwenden (vorausgesetzt natürlich, dass es NER-markiert ist).

Antwort

0

Dies sollte eher ein Kommentar sein, aber ich habe nicht genug Ruf.

Sie können Ihr benutzerdefiniertes Korpus als doc-Argument übergeben, nachdem es pos-getaggt und in eine Liste von Chunked-Bäumen konvertiert wurde. Für ein benutzerdefiniertes Korpus sollten Sie die corpus='ace' verwenden.

Zum Beispiel in this answer, verwenden sie extract_rels, um einen benutzerdefinierten Korpus zu markieren.

+0

Vielen Dank. Ich bin ein wenig verwirrt darüber, warum genau hier "doc" und "corpus" notwendig sind? Man benötigt hier nur eine Texteingabe, nämlich den Chunked Text, der extrahiert werden soll. Was fügt der Korpus hier dem Prozess hinzu? – Hendrik

+0

Betrachtet man die Quelle [hier] (http://www.nltk.org/_modules/nltk/sem/relextract.html) definiert "corpus" die NE (name-entity) -Klassen, die verschiedenen möglichen corpus-Argumenten zugeordnet sind. Sieh dir das Wörterbuch 'NE_CLASSES' an. –

0

Was steht der r'.*\bin\b(?!\b.+ing\b)' reguläre Ausdruck hier genau? Ich kann nicht entchiperen.