[PYTHON] 100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse

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.

Referenzlink

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

Umgebung

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

Kapitel 6: Verarbeiten von englischem Text

Inhalt des Studiums

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

Inhalt anklopfen

Führen Sie die folgende Verarbeitung für den englischen Text durch (nlp.txt).

57. Abhängigkeitsanalyse

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.

Problemergänzung (über "Abhängigkeit")

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". image.png

Danach bemerkte ich, dass es einfacher zu verstehen war, wenn ich die Beziehung zwischen Kanten (prep_on usw.) in das gerichtete Diagramm einfügte.

Antworten

Antwortprogramm [057. Abhängigkeitsanalyse.ipynb](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 / 057.% E4% BF% 82% E3% 82% 8A% E5% 8F% 97% E3% 81% 91% E8% A7% A3% E6% 9E% 90.ipynb)

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

Kommentar beantworten

XML-Dateipfad

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>

Gerichtete Grafikanzeige mit Pydot

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))

Ausgabeergebnis (Ausführungsergebnis)

Wenn das Programm ausgeführt wird, wird das folgende Ergebnis ausgegeben (nur die ersten 3 Sätze).

image.png

image.png

image.png

Recommended Posts

100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
100 Sprachverarbeitung Knock 2020 Kapitel 5: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock-56: Co-Referenz-Analyse
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
100 Sprachverarbeitung Knock 2020 Kapitel 4: Morphologische Analyse
[Sprachverarbeitung 100 Schläge 2020] Kapitel 5: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock Kapitel 4: Morphologische Analyse
100 Sprachverarbeitung Knock-59: Analyse der S-Formel
100 Language Processing Knock 2015 Kapitel 4 Morphologische Analyse (30-39)
100 Sprachverarbeitung klopfen 2020 [00 ~ 69 Antwort]
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Sprachverarbeitung klopfen 2020 [00 ~ 49 Antwort]
100 Sprachverarbeitung Knock-52: Stemming
100 Sprachverarbeitung Knock Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 07
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock 2020 Kapitel 2
100 Amateur-Sprachverarbeitungsklopfen: 09
100 Amateur-Sprachverarbeitungsklopfen: 47
100 Sprachverarbeitung Knock-53: Tokenisierung
100 Amateur-Sprachverarbeitungsklopfen: 97
100 Sprachverarbeitung klopfen 2020 [00 ~ 59 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 67
Sprachverarbeitung 100 Knocks-40: Lesen der Ergebnisse der Abhängigkeitsanalyse (Morphologie)
100 Sprachverarbeitung Knock-41: Lesen des Abhängigkeitsanalyseergebnisses (Phrase / Abhängigkeit)
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitung Knock-51: Wortausschnitt
100 Sprachverarbeitung Knock-58: Extraktion von Taple
100 Sprachverarbeitung Knock-50: Satzumbruch
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
Verarbeitung natürlicher Sprache 1 Morphologische Analyse
100 Sprachverarbeitung Knock-25: Vorlagenextraktion
Sprachverarbeitung 100 Knock-87: Wortähnlichkeit
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020
Lösen von 100 Sprachverarbeitungsklopfen 2020 (01. "Patatokukashi")
100 Amateur-Sprachverarbeitungsklopfen: Zusammenfassung
100 Sprachverarbeitung Knock-30 (unter Verwendung von Pandas): Lesen der Ergebnisse der morphologischen Analyse
Sprachverarbeitung 100 Schläge-49: Extraktion von Abhängigkeitspfaden zwischen Nomenklatur
100 natürliche Sprachverarbeitung klopft Kapitel 5 Abhängigkeitsanalyse (zweite Hälfte)
100 natürliche Sprachverarbeitung klopft Kapitel 5 Abhängigkeitsanalyse (erste Hälfte)
100 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitung Knock Kapitel 1 in Python
100 Sprachverarbeitungsklopfen 2020: Kapitel 4 (morphologische Analyse)
100 Sprachverarbeitung Knock 2020 Kapitel 9: RNN, CNN
100 Sprachverarbeitung Knock-76 (mit Scicit-Learn): Beschriftung
100 Sprachverarbeitung Knock-55: Extraktion eindeutiger Ausdrücke
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 3
100 Sprachverarbeitung Knock-82 (Kontextwort): Kontextextraktion
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
100 Sprachverarbeitungsklopfen: Kapitel 1 Vorbereitungsbewegung
100 Sprachverarbeitung Knock 2020 Kapitel 6: Maschinelles Lernen
Sprachverarbeitung 100 knock-86: Wortvektoranzeige
100 Sprachverarbeitung Knock 2020 Kapitel 10: Maschinelle Übersetzung (90-98)
100 Sprachverarbeitung Knock-28: Entfernen des MediaWiki-Markups
100 Sprachverarbeitung Knock 2020 Kapitel 7: Word Vector
100 Sprachverarbeitung Knock 2020 Kapitel 8: Neuronales Netz