Sprachverarbeitung 100 Klopfen 2015 ["Kapitel 6: Englische Textverarbeitung"](http: //www.cl.ecei) Dies ist der 57. "Abhängigkeitsanalyse" Datensatz von .tohoku.ac.jp / nlp100 / # ch6). "Knock 100-Sprachverarbeitung-44: Visualisierung des abhängigen Baums" Dies ist die Stanford Core NLP-Version. Ich leite viel Code um.
Verknüpfung | Bemerkungen |
---|---|
057.Abhängigkeitsanalyse.ipynb | Antwortprogramm GitHub Link |
100 Klicks Amateur-Sprachverarbeitung:57 | 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 |
In der obigen Umgebung verwende ich die folgenden zusätzlichen Python-Pakete. Einfach mit normalem Pip installieren.
Art | Ausführung |
---|---|
pydot | 1.4.1 |
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).
Visualisieren Sie die reduzierten Abhängigkeiten des Stanford Core NLP als gerichteten Graphen. Konvertieren Sie zur Visualisierung den Abhängigkeitsbaum in DOT-Sprache und [Graphviz](http: / /www.graphviz.org/) sollte verwendet werden. Verwenden Sie pydot, um gerichtete Diagramme direkt aus Python zu visualisieren.
Abhängigkeiten werden in Stanford Core NLP als "Abhängigkeiten" bezeichnet, und der Mechanismus von Stanford Core NLP finden Sie in Stanford Dependencies.
Es scheint, dass es zwei Typen gibt, und dieses Mal ist das Ziel "kollabierte Abhängigkeiten".
Danach bemerkte ich, dass es einfacher zu verstehen war, wenn ich die Beziehung zwischen Kanten (prep_on usw.) in das gerichtete Diagramm einfügte.
import xml.etree.ElementTree as ET
import pydot
for i, sentence in enumerate(ET.parse('./nlp.txt.xml').iterfind('./document/sentences/sentence')):
edges = []
for dependency in sentence.iterfind('./dependencies[@type="collapsed-dependencies"]/dep'):
#Interpunktionsausschluss
if dependency.get('type') != 'punct':
governor = dependency.find('./governor')
dependent = dependency.find('./dependent')
edges.append(((governor.get('idx'), governor.text),
(dependent.get('idx'), dependent.text)))
if len(edges) > 0:
graph = pydot.graph_from_edges(edges, directed=True)
graph.write_jpeg('057.graph_{}.jpeg'.format(i))
if i > 5:
break
Dies ist die Zuordnung des Pfads der folgenden XML-Datei sowie der Zielquelle und des Ziels. Das Tag "Abhängigkeiten" in der 5. Ebene zielt auf das Attribut "Typ" von "reduzierten Abhängigkeiten" ab.
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>
<dep type="amod">
<governor idx="3">processing</governor>
<dependent idx="1">Natural</dependent>
</dep>
<dep type="compound">
<governor idx="3">processing</governor>
<dependent idx="2">language</dependent>
</dep>
Unten ist der Codeteil. Was ich tue, ist dasselbe wie "Knock 100-Sprachverarbeitung-44: Visualisierung des abhängigen Baums", daher werde ich es nicht erklären. Fügen Sie jedoch die Beziehung zwischen Kanten mithilfe von Graphviz und networkx hinzu. Ich bedauere, dass ich es hätte tun sollen. Artikel "Schreiben Sie ein Multi-Diagramm oder ein schönes Diagramm mit networkx [Python]" und Artikel "Verwenden von Graphviz unter Python" Zeichne ein schönes Diagramm " Ich denke, ich kann es schreiben, indem ich darauf verweise. Erstens wurde pydot seit Dezember 2018 nicht aktualisiert, daher mache ich mir Sorgen, dass es in Zukunft fortgesetzt wird.
python
for i, sentence in enumerate(ET.parse('./nlp.txt.xml').iterfind('./document/sentences/sentence')):
edges = []
for dependency in sentence.iterfind('./dependencies[@type="collapsed-dependencies"]/dep'):
#Interpunktionsausschluss
if dependency.get('type') != 'punct':
governor = dependency.find('./governor')
dependent = dependency.find('./dependent')
edges.append(((governor.get('idx'), governor.text),
(dependent.get('idx'), dependent.text)))
if len(edges) > 0:
graph = pydot.graph_from_edges(edges, directed=True)
graph.write_jpeg('057.graph_{}.jpeg'.format(i))
Wenn das Programm ausgeführt wird, wird das folgende Ergebnis ausgegeben (nur die ersten 3 Sätze).
Recommended Posts