Sprachverarbeitung 100 Klopfen 2015 ["Kapitel 6: Englische Textverarbeitung"](http: //www.cl.ecei) Dies ist die Aufzeichnung von 58. "Tupple-Extraktion" von .tohoku.ac.jp / nlp100 / # ch6). Beim letzten Klopfen wurde die gesamte Abhängigkeit visualisiert. Diesmal handelt es sich jedoch um eine Ausgabe durch Extrahieren einer bestimmten Abhängigkeit. Etwa 80% entsprechen dem, was wir tun.
Verknüpfung | Bemerkungen |
---|---|
058.Extraktion von Taples.ipynb | Antwortprogramm GitHub Link |
100 Klicks Amateur-Sprachverarbeitung:58 | Kopieren Sie die Quelle vieler Quellteile und fügen Sie sie ein |
Stanford Core NLP Beamter | Schauen Sie sich zuerst die Stanford Core NLP-Seite an |
Art | Ausführung | Inhalt |
---|---|---|
OS | Ubuntu18.04.01 LTS | Es läuft virtuell |
pyenv | 1.2.16 | Ich benutze pyenv, weil ich manchmal mehrere Python-Umgebungen benutze |
Python | 3.8.1 | python3 auf pyenv.8.Ich benutze 1 Pakete werden mit venv verwaltet |
Stanford CoreNLP | 3.9.2 | Ich habe es vor einem Jahr installiert und erinnere mich nicht im Detail ... Es war das Neueste auch nach einem Jahr, also habe ich es so benutzt, wie es war |
openJDK | 1.8.0_242 | Ich habe das JDK, das installiert wurde, für andere Zwecke verwendet |
Ein Überblick über verschiedene grundlegende Technologien für die Verarbeitung natürlicher Sprache durch englische Textverarbeitung mit Stanford Core NLP.
Stanford Core NLP, Stemming, Teilwort-Tagging, Extraktion eindeutiger Ausdrücke, Co-Referenzanalyse, Abhängigkeitsanalyse, Klauselstrukturanalyse, S-Ausdruck
Führen Sie die folgende Verarbeitung für den englischen Text durch (nlp.txt).
Geben Sie die Menge des "Subjekt-Prädikat-Objekts" in einem durch Tabulatoren getrennten Format aus, basierend auf dem Ergebnis der Abhängigkeitsanalyse (kollabierte Abhängigkeiten) von Stanford Core NLP. Im Folgenden finden Sie jedoch die Definitionen des Subjekts, Prädikats und Objekts.
--Predicate: Ein Wort, das Kinder (abhängige Personen) von nsubj- und dobj-Beziehungen hat
- Subjekt: Kind (abhängig), das eine nsubj-Beziehung zum Prädikat hat
- Ziel: Abhängiges Kind mit Dobj-Beziehung vom Prädikat
Als ich "Taple" hörte, dachte ich an Pythons Tupel, aber diesmal scheint es anders zu sein. Zunächst wird in Wikipedia "Taple" wie folgt geschrieben. ** Ein "Satz mehrerer Komponenten" **.
Tupel oder Tupel (Englisch: Tupel) ist ein allgemeines Konzept, das sich zusammen auf eine Menge bezieht, die aus mehreren Komponenten besteht.
Stanford CoreNLP erwähnt Tuple in Stanford Open Information Extraction.
Open information extraction (open IE) refers to the extraction of relation tuples, typically binary relations, from plain text, such as (Mark Zuckerberg; founded; Facebook).
Die folgende Abbildung auf derselben Seite ist leicht über "Taple" zu verstehen.
import xml.etree.ElementTree as ET
texts = []
#Satzaufzählung, wobei jeweils ein Satz verarbeitet wird
for sentence in ET.parse('./nlp.txt.xml').iterfind('./document/sentences/sentence'):
output = {}
#Aufzählung von Abhängigkeiten
for dep in sentence.iterfind('./dependencies[@type="collapsed-dependencies"]/dep'):
#Beziehungsprüfung
dep_type = dep.get('type')
if dep_type == 'nsubj' or dep_type == 'dobj':
#Zum Prädikatwörterbuch hinzufügen
governor = dep.find('./governor')
index = governor.get('idx')
if index in output:
texts = output[index]
else:
texts = [governor.text, '', '']
#Zum Subjekt oder Objekt hinzufügen(Wenn das gleiche Prädikat, gewinnen Sie später)
if dep_type == 'nsubj':
texts[1] = dep.find('./dependent').text
else:
texts[2] = dep.find('./dependent').text
output[index] = texts
for key, texts in output.items():
if texts[1] != '' and texts[2] != '':
print(sentence.get('id'), '\t', '\t'.join(texts))
Es ist eine Zuordnung des Pfads der folgenden XML-Datei sowie der Zielquelle und des Ziels. Das Tag "Abhängigkeiten" der 5. Ebene zielt auf das Attribut "Typ" von "reduzierten Abhängigkeiten" ab. Das Attribut "Typ" der 6. Schicht ist auch das mit "nsubj" oder "dobj".
Ausgabe | 1. Ebene | Zweites Level | Drittes Level | 4. Stufe | 5. Stufe | 6. Stufe | 7. Stufe |
---|---|---|---|---|---|---|---|
Verantwortliche Person | root | document | sentences | sentence | dependencies | dep | governor |
Kontakt | root | document | sentences | sentence | dependencies | dep | dependent |
Die XML-Datei lautet [GitHub](https://github.com/YoheiFukuhara/nlp100/blob/master/06.%E8%8B%B1%E8%AA%9E%E3%83%86%E3%82%AD% E3% 82% B9% E3% 83% 88% E3% 81% AE% E5% 87% A6% E7% 90% 86 / nlp.txt.xml).
xml:nlp.txt.xml(Auszug)
<root>
<document>
<docId>nlp.txt</docId>
<sentences>
<sentence id="1">
--Unterlassung--
<dependencies type="collapsed-dependencies">
<dep type="root">
<governor idx="0">ROOT</governor>
<dependent idx="18">field</dependent>
</dep>
--Unterlassung--
<dep type="nsubj">
<governor idx="18">field</governor>
<dependent idx="12">processing</dependent>
</dep>
--Unterlassung--
<dep type="dobj">
<governor idx="13">enabling</governor>
<dependent idx="14">computers</dependent>
</dep>
Dies ist der Ort, an dem für jeden Satz die Wörterbuchtypvariable output
für die Ausgabe erstellt wird. Der Index des Prädikats ("Governor") wird als Schlüssel des Wörterbuchs verwendet, der Wert des Wörterbuchs ist ein Listentyp und der Inhalt ist "Prädikatentext", "Betrefftext" und "Objekttext". Wenn Sie mehrere Themen und Ziele beibehalten möchten, wird die Win-Win-Methode verwendet.
python
#Aufzählung von Abhängigkeiten
for dep in sentence.iterfind('./dependencies[@type="collapsed-dependencies"]/dep'):
#Beziehungsprüfung
dep_type = dep.get('type')
if dep_type == 'nsubj' or dep_type == 'dobj':
#Zum Prädikatwörterbuch hinzufügen
governor = dep.find('./governor')
index = governor.get('idx')
if index in output:
texts = output[index]
else:
texts = [governor.text, '', '']
#Zum Subjekt oder Objekt hinzufügen(Wenn das gleiche Prädikat, gewinnen Sie später)
if dep_type == 'nsubj':
texts[1] = dep.find('./dependent').text
else:
texts[2] = dep.find('./dependent').text
output[index] = texts
Wenn es ein Subjekt oder Objekt gibt, wird es ausgegeben.
python
for key, texts in output.items():
if texts[1] != '' and texts[2] != '':
print(sentence.get('id'), '\t', '\t'.join(texts))
Wenn das Programm ausgeführt wird, werden die folgenden Ergebnisse ausgegeben.
Ausgabeergebnis
3 involve understanding generation
5 published Turing article
6 involved experiment translation
11 provided ELIZA interaction
12 exceeded patient base
12 provide ELIZA response
14 structured which information
19 discouraged underpinnings sort
19 underlies that approach
20 produced Some systems
21 make which decisions
23 contains that errors
34 involved implementations coding
38 take algorithms set
39 produced Some systems
40 make which decisions
41 have models advantage
41 express they certainty
42 have Systems advantages
43 make procedures use
44 make that decisions
Recommended Posts