Sprachverarbeitung 100 Schläge 2015 ["Kapitel 5: Abhängigkeitsanalyse"](http: //www.cl.ecei. tohoku.ac.jp/nlp100/#ch5) [43. "Extrahieren von Klauseln mit Nomenklatur in Bezug auf Klauseln mit Verben"](http://www.cl.ecei.tohoku.ac.jp/nlp100 / # sec43) Dies ist ein Datensatz. Im Vergleich zum vorherigen Klopfen gibt es keinen großen Unterschied, wenn nur der Ausgabequelle und dem Ausgabeziel Bedingungen hinzugefügt werden.
Verknüpfung | Bemerkungen |
---|---|
043.Extrahieren Sie Klauseln mit Nomenklaturen in Bezug auf Klauseln mit Verben.ipynb | Antwortprogramm GitHub Link |
100 Klicks Amateur-Sprachverarbeitung:43 | Kopieren Sie die Quelle vieler Quellteile und fügen Sie sie ein |
CaboCha Beamter | CaboCha Seite zuerst anzuschauen |
Ich habe CRF ++ und CaboCha vor zu langer Zeit installiert und vergessen, wie man sie installiert. Da es sich um ein Paket handelt, das überhaupt nicht aktualisiert wurde, haben wir die Umgebung nicht neu erstellt. Ich erinnere mich nur, dass ich frustriert war, als ich mich für CaboCha unter Windows entschied. Ich glaube, ich konnte es unter 64-Bit-Windows nicht verwenden (ich habe einen vagen Speicher und möglicherweise liegt ein Problem mit meinen technischen Fähigkeiten vor).
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 |
Mecab | 0.996-5 | apt-Installieren Sie mit get |
CRF++ | 0.58 | Es ist zu alt und ich habe vergessen, wie man es installiert(Vielleichtmake install ) |
CaboCha | 0.69 | Es ist zu alt und ich habe vergessen, wie man es installiert(Vielleichtmake install ) |
Wenden Sie den Abhängigkeitsanalysator CaboCha auf "Ich bin eine Katze" an und erleben Sie die Funktionsweise des Abhängigkeitsbaums und der syntaktischen Analyse.
Klasse, Abhängigkeitsanalyse, CaboCha, Klausel, Abhängigkeit, Groß- / Kleinschreibung, funktionale Verbsyntax, Abhängigkeitspfad, [Graphviz](http: / /www.graphviz.org/)
Verwenden von CaboCha für den Text (neko.txt) von Natsume Sosekis Roman "Ich bin eine Katze" Analysieren Sie die Abhängigkeit und speichern Sie das Ergebnis in einer Datei namens neko.txt.cabocha. Verwenden Sie diese Datei, um ein Programm zu implementieren, das die folgenden Fragen beantwortet.
Wenn sich Klauseln mit Nomenklatur auf Klauseln mit Verben beziehen, extrahieren Sie sie in tabulatorgetrennten Formaten. Geben Sie jedoch keine Symbole wie Satzzeichen aus.
import re
#Trennzeichen
separator = re.compile('\t|,')
#Abhängigkeit
dependancy = re.compile(r'''(?:\*\s\d+\s) #Nicht erfassbar
(-?\d+) #Zahlen(Kontakt)
''', re.VERBOSE)
class Morph:
def __init__(self, line):
#Durch Tabulator und Komma geteilt
cols = separator.split(line)
self.surface = cols[0] #Oberflächentyp(surface)
self.base = cols[7] #Grundform(base)
self.pos = cols[1] #Teil(pos)
self.pos1 = cols[2] #Teiltexte Unterklassifizierung 1(pos1)
class Chunk:
def __init__(self, morphs, dst):
self.morphs = morphs
self.srcs = [] #Liste der ursprünglichen Klauselindexnummern
self.dst = dst #Indexnummer der Kontaktklausel
self.verb = False
self.noun = False
self.phrase = ''
for morph in morphs:
#Für Nicht-Symbole
if morph.pos != 'Symbol':
self.phrase += morph.surface
if morph.pos == 'Verb':
self.verb = True
if morph.pos == 'Substantiv':
self.noun = True
#Ersetzen Sie den Ursprung und fügen Sie die Chunk-Liste zur Anweisungsliste hinzu
def append_sentence(chunks, sentences):
#Ersetzen Sie den Unternehmer
for i, chunk in enumerate(chunks):
if chunk.dst != -1:
chunks[chunk.dst].srcs.append(i)
sentences.append(chunks)
return sentences, []
morphs = []
chunks = []
sentences = []
with open('./neko.txt.cabocha') as f:
for line in f:
dependancies = dependancy.match(line)
#Wenn es sich nicht um ein EOS- oder Abhängigkeitsanalyseergebnis handelt
if not (line == 'EOS\n' or dependancies):
morphs.append(Morph(line))
#Wenn es ein morphologisches Analyseergebnis im EOS- oder Abhängigkeitsanalyseergebnis gibt
elif len(morphs) > 0:
chunks.append(Chunk(morphs, dst))
morphs = []
#Im Falle eines Abhängigkeitsergebnisses
if dependancies:
dst = int(dependancies.group(1))
#Wenn es eine Abhängigkeit gibt, führt dies zu EOS
if line == 'EOS\n' and len(chunks) > 0:
sentences, chunks = append_sentence(chunks, sentences)
for i, sentence in enumerate(sentences):
for chunk in sentence:
if chunk.dst != -1 and \
chunk.noun and \
sentence[chunk.dst].verb:
print('{}\t{}'.format(chunk.phrase, sentence[chunk.dst].phrase))
#Begrenzt, weil es viele gibt
if i > 50:
break
Ich habe die Chunk-Klasse gegenüber dem vorherigen Klopfen geändert und in der Klassenvariablen definiert, ob die Klausel Nomenklatur und Verben enthält. Da wir in einer for
-Schleife arbeiten, haben wir die Erstellung der Phrasenzeichenfolge in der Listeneinschlussnotation gestoppt.
python
class Chunk:
def __init__(self, morphs, dst):
self.morphs = morphs
self.srcs = [] #Liste der ursprünglichen Klauselindexnummern
self.dst = dst #Indexnummer der Kontaktklausel
self.verb = False
self.noun = False
self.phrase = ''
for morph in morphs:
#Für Nicht-Symbole
if morph.pos != 'Symbol':
self.phrase += morph.surface
if morph.pos == 'Verb':
self.verb = True
if morph.pos == 'Substantiv':
self.noun = True
Alles, was Sie tun müssen, ist, das Ausgabeziel mit dem bedingten Zweig "if" einzugrenzen.
python
for i, sentence in enumerate(sentences):
for chunk in sentence:
if chunk.dst != -1 and \
chunk.noun and \
sentence[chunk.dst].verb:
print('{}\t{}'.format(chunk.phrase, sentence[chunk.dst].phrase))
Wenn das Programm ausgeführt wird, werden die folgenden Ergebnisse ausgegeben. Da es viele gibt, wird nur ein Teil ausgegeben.
Ausgabeergebnis
Wo wurde geboren
Ich verstehe es nicht
Ich habe keine Ahnung
Weinen, wo du es getan hast
Ich erinnere mich nur an das, was ich war
ich sah
Zum ersten Mal hier
ich habe etwas gesehen
Ich werde dich später fragen
Fang uns
Auf die Handfläche gelegt
Sue wurde gehoben
Wenn flauschig
Ich habe mich einfach gefühlt
Beruhige dich
Ich habe mein Gesicht gesehen
Wäre der Anfang der Dinge
ich dachte es wäre
Das Gefühl bleibt
Es bleibt immer noch
Sollte mit den ersten Haaren dekoriert werden
Das Gesicht ist rutschig
Ich habe mich danach getroffen
Ich habe auch eine Katze getroffen
Ich habe mich einmal getroffen
Das Zentrum ragt heraus
Von innen blasen
Rauch blasen
Ich war wund und schwach
Menschliches Trinken
Ich wusste, dass
Ich wusste davon
Setz dich zurück
Setz dich in dein Herz
Ich fing an, mit hoher Geschwindigkeit zu fahren
Bewegt sich der Schüler?
Wird es sich bewegen oder wird es sich bewegen?
Werde nur ich umziehen
Ich weiß nicht, ob es funktioniert
Wende deine Augen
Mir ist schlecht
Es ist ein Geräusch zu hören
Aus dem Auge
Das Feuer kam heraus
Ich erinnere mich bis dahin
Ich erinnere mich, aber ich weiß es nicht
Ich kenne den Rest nicht
Ich weiß es nicht
Beachten
Es gibt keinen Studenten
Viele
Ich kann meinen Bruder nicht sehen
Ich kann nicht einmal einen sehen
Ich habe sogar meine Mutter versteckt
Ich habe mich versteckt
Im Gegensatz zu dem Ort
Ich kann meine Augen nicht öffnen
Ich wurde verlassen
Es wurde von oben verlassen
Es wurde plötzlich aufgegeben
Es wurde innen verlassen
Wenn du mit deinen Gedanken herauskriechst
Wenn du aus Sasahara kriechst
Auf der anderen Seite
Es gibt einen Teich
ich sah
Setz dich nach vorne
Es macht keinen Sinn
Ich frage mich, ob der Student wiederkommen wird
Kommst du mir entgegen?
Mach es mit Miau
Niemand kommt
Überqueren Sie den Teich
Der Wind kreuzt
Dauert einen Tag
Es ist dunkel
Ich bin hungrig
Es hat sehr abgenommen
Mit Essen
Es gibt bis zu
Triff eine Entscheidung
Begann um den Teich herumzugehen
Begann nach links abzubiegen
Ertrage das
Wenn Sie es ertragen und kriechen
Wenn Sie gewaltsam kriechen
Es kam durch das Ding heraus
Ich ging zu dem Ort
Wenn Sie hier kriechen
Takegaki brach zusammen
Ich schlich mich durch das Loch
Ich schlich mich ins Haus
Ich könnte mit etwas verhungert sein.
Wenn Takegaki nicht zerrissen wäre
Ich könnte verhungert sein
Ich bin vielleicht am Straßenrand verhungert.
Was war der Schatten?
Da ist ein Loch
Bis heute
ich werde besuchen
Besuchen Sie Mitsuge
Es ist eine Passage
Obwohl ich mich in die Villa geschlichen habe
In meinem Haus wird es dunkel
Ich bin hungrig
Es wird regnen
Ich konnte es nach dem Aufräumen nicht tun
Ich kann nicht mehr gnaden
Auf etwas zugehen
Auf etwas zugehen
Von nun an nachdenken
Die Zeit ist vergangen
Kriechen Sie hinein
Ich bin hier darauf gestoßen
Ich begegnete
Sollte Menschen sehen
Ich habe eine Gelegenheit gefunden
Das erste was ich getroffen habe
Dies wird herausgedrückt
Vom Schüler aus gesehen
Wenn du es dir ansiehst
Wenn ich mich sehe
Schnapp es dir plötzlich
Nimm den Halsmuskel
Ich drückte mich zum Tisch
Recommended Posts