[PYTHON] 100 Sprachverarbeitung Knock-58: Extraktion von Taple

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.

Referenzlink

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

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

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

Klopfe an den Inhalt

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

58. Extraktion von Taples

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

Problemergänzung (über "Taple")

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

Antworten

Antwortprogramm [058. Tapple extract.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 / 058.% E3% 82% BF% E3% 83% 97% E3% 83% AB% E3% 81% AE% E6% 8A% BD% E5% 87% BA.ipynb)

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

Kommentar beantworten

XML-Dateipfad

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>

Erstellen Sie ein Wörterbuch für die Ausgabe

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

Ausgabeabschnitt

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

Ausgabeergebnis (Ausführungsergebnis)

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

100 Sprachverarbeitung Knock-58: Extraktion von Taple
100 Sprachverarbeitung Knock-25: Vorlagenextraktion
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
100 Sprachverarbeitung Knock-55: Extraktion eindeutiger Ausdrücke
100 Sprachverarbeitung Knock-82 (Kontextwort): Kontextextraktion
100 Sprachverarbeitung klopfen 2020 [00 ~ 39 Antwort]
100 Sprachverarbeitung klopfen 2020 [00-79 Antwort]
100 Sprachverarbeitung klopfen 2020 [00 ~ 69 Antwort]
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 17
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 Schläge-45: Extraktion von Verbfallmustern
100 Sprachverarbeitung Knock-72 (unter Verwendung von Stanford NLP): Identitätsextraktion
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitung Knock-51: Wortausschnitt
100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock-50: Satzumbruch
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
Sprachverarbeitung 100 Knock-87: Wortähnlichkeit
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020
100 Sprachverarbeitung Knock-56: Co-Referenz-Analyse
Lösen von 100 Sprachverarbeitungsklopfen 2020 (01. "Patatokukashi")
100 Amateur-Sprachverarbeitungsklopfen: Zusammenfassung
Sprachverarbeitung 100 Schläge-49: Extraktion von Abhängigkeitspfaden zwischen Nomenklatur
100 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitung Knock Kapitel 1 in Python
100 Sprachverarbeitung Knock 2020 Kapitel 4: Morphologische Analyse
100 Sprachverarbeitung Knock 2020 Kapitel 9: RNN, CNN
100 Sprachverarbeitung Knock-76 (mit Scicit-Learn): Beschriftung
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 3
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
100 Sprachverarbeitungsklopfen: Kapitel 1 Vorbereitungsbewegung
100 Sprachverarbeitung Knock 2020 Kapitel 6: Maschinelles Lernen
100 Sprachverarbeitung Knock Kapitel 4: Morphologische Analyse
Sprachverarbeitung 100 knock-86: Wortvektoranzeige
100 Sprachverarbeitung Knock 2020 Kapitel 10: Maschinelle Übersetzung (90-98)
100 Sprachverarbeitung Knock 2020 Kapitel 5: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock-28: Entfernen des MediaWiki-Markups
100 Sprachverarbeitung Knock 2020 Kapitel 7: Word Vector
100 Sprachverarbeitung Knock 2020 Kapitel 8: Neuronales Netz
100 Sprachverarbeitung Knock-59: Analyse der S-Formel
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (05 ~ 09)
Sprachverarbeitung 100 Knocks-31 (mit Pandas): Verben
100 Sprachverarbeitung klopfen 2020 "für Google Colaboratory"
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 1
100 Sprachverarbeitung Knock 2020 Kapitel 1: Vorbereitende Bewegung