[Python] Ersetzen Sie den von MeCab ausgegebenen Text durch die wichtigen Wörter, die von MeCab + Term Extract extrahiert wurden.

zunaechst

Ich habe den folgenden Artikel über Begriffsextrakt gelesen. Verwenden Sie termextract, um technische Begriffe aus gespeicherten Daten zu extrahieren und ein Benutzerwörterbuch für mecab --Qiita zu erstellen

Wenn Sie eine morphologische Analyse durchführen, ist es einfach, ein Fachwörterbuch zu erstellen, das branchenübliche Wörter so zusammenfasst, dass es bei der Aufteilung in einer guten Form vorliegt. Erstellen Sie daher ein Benutzerwörterbuch für Mecab mit termextract. Ich habe es gemacht.

Ich wollte nur das aktuelle Extraktionsergebnis widerspiegeln und es überprüfen, daher reicht es nicht aus, ein Wörterbuch auszugeben ... Aus diesem Grund habe ich eine Klasse erstellt, die einen String im selben Format wie die Ausgabe von MeCab ausspucken kann.

Umgebung

Python 3.7.5 mecab-python 0.996.3 termextract 0.12b0

Wie benutzt man

Erstellt ein Objekt, während das Ergebnis von `MeCab.parse () empfangen wird, und gibt eine Zeichenfolge im gleichen Format wie get zurück.

main


import MeCab
text = "Solange Rashomon auf Suzaku Oji ist, gibt es neben diesem Mann wahrscheinlich noch ein paar Leute wie Ichimekasa und Koukara Hat, die im Regen sind."

mecab = MeCab.Tagger()
mecab_text = mecab.parse(text)
    
#Übergeben Sie das Ergebnis von MeCab
TX = TermExtract(mecab_text)
extracted = TX.get_extracted_words()  #Extrahieren Sie wichtige Wörter
modified_text = TX.get_modified_mecab_text()  #Text, der Wörter basierend auf wichtigen Wörtern verkettet

print(modified_text)

Ausführungsergebnis


Rashomon Substantiv,Eigenname,Allgemeines,*,*,*,Rashomon,Rashomon,La Chaumont
Ist ein Assistent,Fallassistent,Allgemeines,*,*,*,Aber,Ga,Ga
, Symbol,Lesepunkt,*,*,*,*,、,、,、
Suzaku Oji Substantiv,Allgemeines,*,*,*,*,Suzaku Oji,Suzaku Oji,Suzakuoji
Hilfs,Fallassistent,Allgemeines,*,*,*,Zu,D.,D.
Ein Verb,Unabhängigkeit,*,*,Fünf Schritte, La Linie,Grundform,Gibt es,Al,Al
Nomenklatur,Nicht unabhängig,Anwalt möglich,*,*,*,das ist alles,Ijo,Ijo
Ist ein Assistent,Hilfe,*,*,*,*,Ist,C.,Beeindruckend
, Symbol,Lesepunkt,*,*,*,*,、,、,、
...

Suzaku Oji wird in MeCab in Suzaku und Oji unterteilt, aber sie werden verkettet, weil sie durch Term-Extrakt als aufeinanderfolgende Wörter extrahiert werden.

Quellcode

Das Ganze ist auf github veröffentlicht. Ich werde darüber schreiben, was ich nach meinem Geschmack codiert habe.

Über die Verbindung von morphologischen Elementen

Bei der Verkettung mehrerer morphologischer Elemente wird nur \ [Oberflächensystem, Originalform, Lesen, Aussprache ] als Zeichenfolge verkettet. Der Grund dafür, dass die anderen nicht mit Zeichenfolgen kombiniert werden, besteht darin, zu vermeiden, dass neue Teile wie die "Nomenklatur" erstellt werden. Wenn keine Zeichenfolge verkettet ist, wird der Wert des zuletzt zu verkettenden Wortes übernommen.

my_termextract.py


def concat_morph(morphs):
    '''
Kombinieren Sie mehrere morphologische Elemente.
Kombinieren[Oberflächensystem,Prototyp,lesen,Aussprache]nur.
Andere stimmen mit dem letzten Element der Liste überein.
    
    Input:Liste der Morphologie
    Output:Kombinierte Morphologie
    '''
    import copy
    new_morph = list(copy.deepcopy(morphs[-1]))
    
    #Oberflächensystem
    new_morph[0] = "".join(x[0] for x in morphs)
    #Prototyp
    new_morph[7] = "".join(x[7] for x in morphs if x[7]!="*")
    #lesen
    new_morph[8] = "".join(x[8] for x in morphs if x[8]!="*")
    #Aussprache
    new_morph[9] = "".join(x[9] for x in morphs if x[9]!="*")
    return tuple(new_morph)

Beispiel

Suzaku Substantiv,Eigenname,Bereich,Allgemeines,*,*,Suzaku,Suzaku,Suzaku
Oji Nomen,Allgemeines,*,*,*,*,Oji,Oji,Oji

Suzaku Oji Substantiv,Allgemeines,*,*,*,*,Suzaku Oji,Suzaku Oji,Suzakuoji

Informationen zur Auswahl der zu verbindenden Wörter

"Wörter, die aus zwei oder mehr Wörtern bestehen", die in "extrahierten Wörtern" enthalten sind, werden als Ziel ausgewählt. Grundsätzlich wird das Ergebnis von termextract gespeichert, aber wenn es andere Wörter gibt, die Sie verketten möchten oder die Sie nicht verketten möchten, können Sie es behandeln, indem Sie "extrahierte_Wörter" überschreiben.

my_termextract.py


for cmp_noun in self.extracted_words:
    #Erwerb eines Oberflächenschichtsystems
    surfaces, *_ = zip(*self.morphs)

    #Mit einem Leerzeichen trennen
    cmp_list = cmp_noun.split(" ")
    len_cmp = len(cmp_list)
    #Fahren Sie fort, wenn kein verkettetes Wort vorhanden ist
    if len_cmp < 2:
        continue
            
    #Index mit verketteten Wörtern abgeglichen
    match_indeces = [i for i in range(len(surfaces)-len_cmp+1) if surfaces[i:i+len_cmp]==tuple(cmp_list)]

Informationen zu Term-Extrakt-Parametern

Ich beziehe mich auf den Artikel am Anfang. Verwenden Sie termextract, um technische Begriffe aus gespeicherten Daten zu extrahieren und ein Benutzerwörterbuch für mecab --Qiita zu erstellen

my_termextract.py


#Extrahieren Sie zusammengesetzte Wörter und berechnen Sie die Wichtigkeit
frequency = termextract.mecab.cmp_noun_dict(self.mecab_text)
LR = termextract.core.score_lr(frequency,
    ignore_words=termextract.mecab.IGNORE_WORDS,
    lr_mode=1, average_rate=1
    )
term_imp = termextract.core.term_importance(frequency, LR)

Schließlich

Ich habe es erstellt, weil ich dachte, es wäre praktisch, wenn ich es verwenden könnte, indem ich es einstecke, wenn ich das Ergebnis von MeCab erhalte und die nachfolgende Verarbeitung implementiere. Ich denke, es kann vorerst zur Bestätigung verwendet werden.

Referenzierte Seite

Verwenden Sie termextract, um technische Begriffe aus gespeicherten Daten zu extrahieren und ein Benutzerwörterbuch für mecab --Qiita zu erstellen

Recommended Posts

[Python] Ersetzen Sie den von MeCab ausgegebenen Text durch die wichtigen Wörter, die von MeCab + Term Extract extrahiert wurden.
Extrahieren Sie die xz-Datei mit Python
Extrahieren Sie mit Python Zeilen, die den Bedingungen entsprechen, aus einer Textdatei
[Automatisierung] Extrahieren Sie die Tabelle als PDF mit Python
So löschen Sie die von Python ausgegebenen Zeichen
Extrahieren Sie die Tabelle der Bilddateien mit OneDrive & Python
Ich habe eine Klasse erstellt, um das Analyseergebnis von MeCab in ndarray mit Python zu erhalten
Verwenden Sie Mecab mit Python 3
Speichern Sie die Ausgabe von GAN nacheinander ~ Mit der Implementierung von GAN durch PyTorch ~
Warum kann ich das Modul durch Importieren mit Python verwenden?
[Python] Zerlegen Sie die erfasste Twitter-Timeline mit MeCab in Morphologie
Rufen Sie die URL des Linkziels ab, indem Sie den Textsatz mit Python Scraping (Beautiful Soup) + XPath angeben