[PYTHON] Abhängigkeitsanalyse mit CaboCha

Ich habe einen Code erstellt, um die japanische Abhängigkeit mit Cabocha zu überprüfen. Vorerst habe ich versucht, die Beziehung zwischen Nomenklatur und Adjektiven zu extrahieren.

Verweise

Informationen zur Installation von CaboCha in der Windows-Umgebung finden Sie im Blog von mima_ita. Setzen Sie Cabocha in Windows ein und analysieren Sie die Abhängigkeit mit Python

Lassen Sie uns die Reihenfolge der Teile und Wörter kurz zusammenfassen

Ich habe die natürliche Sprache nicht professionell studiert und sie nicht in Artikeln usw. recherchiert, aber ich werde im Folgenden die Ideen nur von Amateuren beschreiben.

Wenn Sie sich auf Nomenklatur, Verben und Adjektive konzentrieren und einfach die Beziehung zum Teil des vorherigen Wortes betrachten, können Sie diese in die folgenden Muster unterteilen.

Auf dieser Grundlage habe ich einen Code erstellt, um die Beziehung zwischen Nomenklatur und Adjektiven zu ermitteln. Unten ist der Code.

Referenzcode

python


# coding: utf-8

import CaboCha
import xml.etree.ElementTree as ET
from collections import defaultdict

def get_reputation(ET_tree):
    flag = None
    reputation = defaultdict(str)

    for el in ET_tree.findall(".//chunk"):        
        tok = el.find("tok")
        feature = tok.attrib["feature"].strip().split(',')
        part = feature[0]
        typ = feature[1]

        if part=='Substantiv' and \
            (typ=='Allgemeines' or typ=='Proprietäre Nomenklatur'): 
                reputation["object"]=tok.text
        if part=='Adjektiv': reputation['adjective']=feature[6]
        link = el.attrib["link"]
        if link=='-1': break
        while 1:
            res = get_next_chunk(link,part)
            if res==None: break
            part, typ, word, link = res

            if part=='Substantiv' and \
                (typ=='Allgemeines' or typ=='Proprietäre Nomenklatur'): 
                reputation["object"]=word
            if part=='Adjektiv':
                reputation['adjective'] = word
                if reputation["object"]!=None:
                    flag=1
                    break
        if flag==1: break
        
    print reputation["object"]
    print reputation["adjective"]

def get_next_chunk(linkid, ex_part):
    if linkid=='-1': return None
    this_chunk =  ET_tree.find(".//chunk[@id='%s']" % linkid)
    #print this_chunk.attrib
    link = this_chunk.attrib["link"]
        
    tok = this_chunk.find('tok')
    feature = tok.attrib["feature"].strip().split(',')
    if ex_part=='Substantiv':
        if feature[0]=='Substantiv':
            return feature[0], feature[1], tok.text, link
        elif feature[0]=='Verb' or feature[0]=='Adjektiv':
            return feature[0], feature[1],  feature[6], link
    elif ex_part=='Verb':
        if feature[0]=='Substantiv':
            return feature[0], feature[1],  tok.text, link
    elif ex_part=='Adjektiv':
        if feature[0]=='Substantiv':
            return feature[0], feature[1],  tok.text, link
        
if __name__=='__main__':
    c = CaboCha.Parser('--charset=UTF8')
    
    sentence = "Der interessanteste Artikel in der Juni-Ausgabe von Courier, "Einführung in die" freien Künste ", um Spaß zu lernen", war ein Artikel von Hidehiro Ikegami. "Wie man ein Gemälde sieht" ist extrem wichtig, nicht wahr?"
    
    tree =  c.parse(sentence)
    #print tree.toString(CaboCha.FORMAT_TREE)
    #print tree.toString(CaboCha.FORMAT_LATTICE)
    print tree.toString(CaboCha.FORMAT_XML)
    ET_tree = ET.fromstring(tree.toString(CaboCha.FORMAT_XML))
    
    get_reputation(ET_tree)

Ich bekomme nur den ersten Token für jeden Chunk, denn wenn ich ihn gut in Chunks aufteilen kann, sollte der erste Token ein aussagekräftiges Wort haben.

Ausgabeergebnis

Der interessanteste Artikel in der Juni-Ausgabe von Courier, "Einführung in die" freien Künste ", um Spaß zu lernen", war ein Artikel von Hidehiro Ikegami. "Wie man ein Gemälde sieht" ist extrem wichtig, nicht wahr? 』\

Ich habe versucht, den Satz mit CaboCha zu analysieren. Das Folgende ist die XML-Ausgabe des Analyseergebnisses von CaboCha.

<sentence>
 <chunk id="0" link="1" rel="D" score="0.328005" head="0" func="1">
  <tok id="0" feature="Substantiv,Allgemeines,*,*,*,*,*,*,*,Wikipedia">Kurier</tok>
  <tok id="1" feature="Partikel,Union,*,*,*,*,von,Nein,Nein">von</tok>
 </chunk>
 <chunk id="1" link="4" rel="D" score="0.018011" head="3" func="3">
  <tok id="2" feature="Substantiv,Anwalt möglich,*,*,*,*,Juni,Rokugatsu,Rokugatsu">Juni</tok>
  <tok id="3" feature="Substantiv,Suffix,Allgemeines,*,*,*,Problem,Gehen,Gehen">Problem</tok>
 </chunk>
 <chunk id="2" link="3" rel="D" score="1.140087" head="5" func="5">
  <tok id="4" feature="Symbol,Klammern öffnen,*,*,*,*,「,「,「">「</tok>
  <tok id="5" feature="Adjektiv,Unabhängigkeit,*,*,Adjektiv・イ段,Kontinuierliche Verbindung,angenehm,Tanoshiku,Tanoshiku">Glücklich</tok>
 </chunk>
 <chunk id="3" link="4" rel="D" score="2.891449" head="6" func="6">
  <tok id="6" feature="Verb,Unabhängigkeit,*,*,Fünf Schritte / Ba-Linie,Grundform,lernen,Manab,Manab">lernen</tok>
 </chunk>
 <chunk id="4" link="6" rel="D" score="1.654218" head="10" func="12">
  <tok id="7" feature="Symbol,Klammern öffnen,*,*,*,*,『,『,『">『</tok>
  <tok id="8" feature="Substantiv,Allgemeines,*,*,*,*,Geisteswissenschaften,Kyoyo,Kyoyo">Geisteswissenschaften</tok>
  <tok id="9" feature="Symbol,In Klammern geschlossen,*,*,*,*,』,』,』">』</tok>
  <tok id="10" feature="Substantiv,Verbindung ändern,*,*,*,*,beginnen,Newmon,Newmon">beginnen</tok>
  <tok id="11" feature="Symbol,In Klammern geschlossen,*,*,*,*,」,」,」">」</tok>
  <tok id="12" feature="Partikel,格Partikel,Allgemeines,*,*,*,damit,De,De">damit</tok>
 </chunk>
 <chunk id="5" link="6" rel="D" score="2.796273" head="13" func="13">
  <tok id="13" feature="Substantiv,Anwalt möglich,*,*,*,*,Ichiban,Ichiban,Ichiban">Ichiban</tok>
 </chunk>
 <chunk id="6" link="8" rel="D" score="1.346988" head="16" func="17">
  <tok id="14" feature="Adjektiv,Unabhängigkeit,*,*,Adjektiv・アウオ段,Kontinuierliche Verbindung,Interessant,Komisch,Komisch">Interessant</tok>
  <tok id="15" feature="Hilfsverb,*,*,*,Besondere,Grundform,Ta,Ta,Ta">Ta</tok>
  <tok id="16" feature="Substantiv,Nicht unabhängig,Allgemeines,*,*,*,von,Nein,Nein">von</tok>
  <tok id="17" feature="Partikel,係Partikel,*,*,*,*,Ist,C.,Beeindruckend">Ist</tok>
  <tok id="18" feature="Symbol,Lesepunkt,*,*,*,*,、,、,、">、</tok>
 </chunk>
 <chunk id="7" link="8" rel="D" score="3.189624" head="21" func="22">
  <tok id="19" feature="Substantiv,固有Substantiv,Name der Person,Nachname,*,*,Ikegami,Ikegami,Ikegami">Ikegami</tok>
  <tok id="20" feature="Substantiv,固有Substantiv,Name der Person,Name,*,*,Britisch und westlich,Hidehiro,Hidehiro">Britisch und westlich</tok>
  <tok id="21" feature="Substantiv,Suffix,Name der Person,*,*,*,Herr.,Sonne,Sonne">Herr.</tok>
  <tok id="22" feature="Partikel,Union,*,*,*,*,von,Nein,Nein">von</tok>
 </chunk>
 <chunk id="8" link="11" rel="D" score="-0.885691" head="23" func="23">
  <tok id="23" feature="Substantiv,Allgemeines,*,*,*,*,Artikel,Fasan,Fasan">Artikel</tok>
  <tok id="24" feature="Symbol,Phrase,*,*,*,*,。,。,。">。</tok>
 </chunk>
 <chunk id="9" link="10" rel="D" score="4.381583" head="26" func="27">
  <tok id="25" feature="Symbol,Klammern öffnen,*,*,*,*,「,「,「">「</tok>
  <tok id="26" feature="Substantiv,Allgemeines,*,*,*,*,Malerei,Kaiga,Kaiga">Malerei</tok>
  <tok id="27" feature="Partikel,Union,*,*,*,*,von,Nein,Nein">von</tok>
 </chunk>
 <chunk id="10" link="11" rel="D" score="-0.885691" head="29" func="31">
  <tok id="28" feature="Verb,Unabhängigkeit,*,*,Ein Schritt,Kontinuierlicher Typ,sehen,Mi.,Mi.">Sie sehen</tok>
  <tok id="29" feature="Substantiv,Suffix,Allgemeines,*,*,*,Wie,Kata,Kata">Wie</tok>
  <tok id="30" feature="Symbol,In Klammern geschlossen,*,*,*,*,」,」,」">」</tok>
  <tok id="31" feature="Partikel,格Partikel,Gemeinsame Sprache,*,*,*,Was,Itte,Itte">Was</tok>
 </chunk>
 <chunk id="11" link="-1" rel="D" score="0.000000" head="33" func="36">
  <tok id="32" feature="Substantiv,Verbindung ändern,*,*,*,*,Transzendenz,Chozetsu,Chozetsu">Transzendenz</tok>
  <tok id="33" feature="Substantiv,Adjektiv Verbstamm,*,*,*,*,Wichtig,Daiji,Daiji">Wichtig</tok>
  <tok id="34" feature="Hilfsverb,*,*,*,Besondere,Grundform,Ist,Da,Da">Ist</tok>
  <tok id="35" feature="Partikel,終Partikel,*,*,*,*,Yo,Yo,Yo">Yo</tok>
  <tok id="36" feature="Partikel,終Partikel,*,*,*,*,Hallo,Ne,Ne">Hallo</tok>
  <tok id="37" feature="Symbol,Phrase,*,*,*,*,。,。,。">。</tok>
 </chunk>
</sentence>

Der in jedem Block enthaltene Link zeigt die Zuordnung zur folgenden Block-ID.

Versuchsergebnis

Ich konnte die Beziehung von "Kurier" <- "interessant" erwerben. Mit dem obigen Code können Sie jedoch nur eine Beziehung erhalten. Wenn Sie also mehr als eine haben, müssen Sie mehr entwickeln. ..

Wir entschuldigen uns für die Unannehmlichkeiten, aber wenn Sie einen Fehler machen, würden wir uns freuen, wenn Sie darauf hinweisen könnten.

Recommended Posts

Abhängigkeitsanalyse mit CaboCha
Tweet-Analyse mit Python, Mecab und CaboCha
Datenanalyse mit Python 2
Sprachanalyse mit Python
[Umgebungskonstruktion] Abhängigkeitsanalyse mit CaboCha mit Python 2.7
Sprachanalyse mit Python
Dynamische Analyse von Valgrind
Führen Sie eine Regressionsanalyse mit NumPy durch
Datenanalyse mit Python
[Analyse des gemeinsamen Auftretens] Einfache Analyse des gemeinsamen Auftretens mit Python! [Python]
100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse
Emotionsanalyse von Python (word2vec)
Mit Pyradiomics erlernte Texturanalyse
Planare Skelettanalyse mit Python
Japanische morphologische Analyse mit Python
Muskel-Ruck-Analyse mit Python
[PowerShell] Morphologische Analyse mit SudachiPy
Text Emotionsanalyse mit ML-Ask
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
Dreidimensionale Skelettstrukturanalyse mit Python
Impedanzanalyse (EIS) mit Python [impedance.py]
[Sprachverarbeitung 100 Schläge 2020] Kapitel 5: Abhängigkeitsanalyse
Text Mining mit Python ① Morphologische Analyse
Hauptkomponentenanalyse mit Spark ML
100 Sprachverarbeitung Knock 2020 Kapitel 5: Abhängigkeitsanalyse
Bequeme Analyse mit Pandas + Jupyter Notebook
Ich habe mit Mecab gespielt (morphologische Analyse)!
Datenanalyse beginnend mit Python (Datenvisualisierung 1)
Logistische Regressionsanalyse Selbst erstellt mit Python
Datenanalyse beginnend mit Python (Datenvisualisierung 2)
Setzen Sie Cabocha 0.68 in Windows ein und versuchen Sie, die Abhängigkeit mit Python zu analysieren
Ich habe eine multiple Regressionsanalyse mit Polypoly-Regression versucht
Die grundlegendste Clusteranalyse mit Scikit-Learn
Hauptkomponentenanalyse mit Livedoor News Corpus --Practice--
[In-Database Python Analysis Tutorial mit SQL Server 2017]
Zweidimensionale Analyse des gesättigten und ungesättigten Permeationsflusses mit Python
Maschinelles Lernen mit Python (2) Einfache Regressionsanalyse
2D FEM Stressanalyseprogramm von Python
Ich habe versucht, Faktoren mit Titanic-Daten zu analysieren!
[Sprachanalyse] Finden Sie Kreuzähnlichkeit mit Librosa
Line Talk Analyse mit Janome (OSS veröffentlicht)
Emotionale Analyse von Tweets mit Deep Learning
Lassen Sie uns 2ch Thread mit WordCloud-morphologische Analyse / WordCloud Edition- visualisieren
Datenanalyse beginnend mit Python (Datenvorverarbeitung - maschinelles Lernen)
Zweidimensionale instationäre Wärmeleitungsanalyse mit Python
Netzwerkanalyse mit NetworkX --- Community-Erkennungsvolumen
Python: Vereinfachte morphologische Analyse mit regulären Ausdrücken
Wie wäre es mit einer Polaritätsanalyse mit hinzugefügtem "Auftrag"?