[Python] Fordere 100 Schläge heraus! (030-034)

Über die bisherige Geschichte

Siehe Erster Beitrag

Klopfstatus

9/24 hinzugefügt

Kapitel 4: Morphologische Analyse

Verwenden Sie MeCab, um den Text (neko.txt) von Natsume Sosekis Roman "Ich bin eine Katze" morphologisch zu analysieren und das Ergebnis in einer Datei namens neko.txt.mecab zu speichern. Verwenden Sie diese Datei, um ein Programm zu implementieren, das die folgenden Fragen beantwortet. Verwenden Sie für die Probleme 37, 38, 39 matplotlib oder Gnuplot.

30. Lesen der Ergebnisse der morphologischen Analyse

Implementieren Sie ein Programm, das die Ergebnisse der morphologischen Analyse liest (neko.txt.mecab). Jedes morphologische Element hat jedoch den Schlüssel der Oberflächenform (Oberfläche), der Grundform (Basis), eines Teils des Wortes (pos) und eines Teils der Wortunterklassifikation 1 (pos1). In einem Mapping-Typ speichern und einen Satz als Liste morphologischer Elemente ausdrücken (Mapping-Typ). Verwenden Sie für die restlichen Probleme in Kapitel 4 das hier erstellte Programm.

Vorbereitung: Erstellen von neko.txt.mecab

file_analyze_mecab_030.py


from natto import MeCab
import codecs

def file_analyze_mecab(input_filename,output_filename):

    with codecs.open(input_filename,'r','utf-8') as f:
        text = f.read()

    m = MeCab.Tagger("mecabrc")
    wt = m.parse(text)

    with codecs.open(output_filename,'w','utf-8') as wf:
        wf.write(wt)

if __name__=="__main__":
    file_analyze_mecab('neko.txt','neko.txt.mecab')

result


Ein Substantiv,Nummer,*,*,*,*,einer,Ichi,Ichi
Symbol,Leer,*,*,*,*, , , 
Mein Substantiv,Gleichbedeutend,Allgemeines,*,*,*,ich,Wagahai,Wagahai
Ist ein Assistent,Hilfe,*,*,*,*,Ist,C.,Beeindruckend
(Weggelassen, weil es lang ist)

Eindruck: Ich habe zum ersten Mal von morphologischen Analysen gehört und von dort aus nachgeforscht. Für die Parameter von Mecab verwies ich auf MeCab: Noch ein Teil der Sprache und morphologischer Analysator. Die Benennung von Modulen etc. ist wunderbar.

030. Lesen

mecab_030.py


#-*-coding:utf-8-*-

import codecs

if __name__ == "__main__":
    with codecs.open("neko.txt.mecab",'r','utf-8') as f:
        data = f.readlines()

    mecab_list=[]
    temp_dict ={}
    for temp_word in data:
        temp_word = temp_word.replace('\t', ',')
        temp_word = temp_word.replace('\n', '')
        if(temp_word.count(',')==9 or temp_word.count(',')==7):
            temp_list = temp_word.split(',')
            temp_dict={'surface':temp_list[0],'base':temp_list[7],'pos':temp_list[1],'pos1':temp_list[2]}
            mecab_list.append(temp_dict)
        else:
            continue
    print(mecab_list)

    with codecs.open('neko.txt.mecab.analyze','w','utf-8') as wf:
        for line in mecab_list:
            wf.write(str(line)+'\n')

result


{'surface': 'Sachen', 'base': 'Sachen', 'pos': 'Substantiv', 'pos1': 'Allgemeines'}
(Weggelassen, weil es lang ist)

Impressionen: Die Ausgabedatei wurde zur einfachen Anzeige durch eine einfache Zeichenfolge anstelle eines Listentyps ersetzt. Ich war sehr süchtig danach zu bemerken, dass die Anzahl von ',' in der Spalte mit den Ergebnissen der morphologischen Analyse 7 oder 9 betrug. .. ..

031. verb

Extrahieren Sie alle Oberflächenformen des Verbs.

vurb_031.py


#-*-coding:utf-8-*-

import codecs
import re
import ast

if __name__ == "__main__":
    with codecs.open("neko.txt.mecab.analyze",'r','utf-8') as f:
        temp_lines = f.readlines()

    pattern = re.compile(r".*Verb.*")
    data = {}
    for temp_line in temp_lines:
        if pattern.match(temp_line):
            data = ast.literal_eval(temp_line)
            print(data['surface'])
        else:
            continue

result


damit
Gibt es
Geboren
Ta
Tsuka
(Weggelassen, weil es lang ist)

Impression: Die Analyseergebnisdatei wird gelesen, die Spalte mit dem Schlüsselwort Verb wird mit einem regulären Ausdruck extrahiert, in einen Wörterbuchtyp konvertiert und nur die Oberfläche ausgegeben.

032. Prototyp des Verbs

Extrahieren Sie alle Originalformen des Verbs.

base_vurb_032.py


# -*-coding:utf-8-*-

import codecs
import re
import ast

if __name__ == "__main__":
    with codecs.open("neko.txt.mecab.analyze", 'r', 'utf-8') as f:
        temp_lines = f.readlines()

    pattern = re.compile(r".*Verb.*")
    data = {}
    for temp_line in temp_lines:
        if pattern.match(temp_line):
            data = ast.literal_eval(temp_line)
            print(data['base'])
        else:
            continue

result


Ist
Gibt es
Geboren
Ta
Tsukuri

Impressionen: Die Vorgehensweise ist die gleiche wie bei 031. Die Ausgabe wird auf Basis geändert.

033. Sahen Nomen

Extrahieren Sie die gesamte Nomenklatur der Verbindung.

sahen_noun_033.py


# -*-coding:utf-8-*-

import codecs
import re
import ast

if __name__ == "__main__":
    with codecs.open("neko.txt.mecab.analyze", 'r', 'utf-8') as f:
        temp_lines = f.readlines()

    pattern = re.compile(r".*Verbindung ändern.*")
    data = {}
    for temp_line in temp_lines:
        if pattern.match(temp_line):
            data = ast.literal_eval(temp_line)
            print(data['surface'])
        else:
            continue

result


Registrieren
Erinnerung
Geschichte
Dekoration
Vorsprung
(Weggelassen, weil es lang ist)

Impressionen: Die Vorgehensweise ist die gleiche wie bei 032. Ich habe gerade die Extraktionsbedingung in eine Änderungsverbindung geändert.

034. "B von A"

Extrahieren Sie die Nomenklatur, in der zwei Nomenklaturen durch "Nein" verbunden sind.

no_noun_034.py


#-*-coding:utf-8-*-

import codecs
import ast

if __name__ == "__main__":

    with codecs.open('neko.txt.mecab.analyze','r','utf-8') as f:
        temp_lines = f.readlines()

    flag = 0
    temp_list = []
    for temp_line in temp_lines:
        temp_dict = ast.literal_eval(temp_line)
        if (temp_dict['pos'] == 'Substantiv' and flag == 0):
            temp_word = temp_dict['surface']
            flag = 1
            continue

        elif(temp_dict['surface']=='von' and temp_dict['pos']=='Partikel' and flag == 1):
            temp_word += temp_dict['surface']
            flag = 2
            continue

        elif(temp_dict['pos']=='Substantiv' and flag == 2):
            temp_word += temp_dict['surface']
            temp_list.append(temp_word)
            temp_word = ''
            flag = 0
            continue

        else:
            temp_word=''
            flag =0
            continue

    no_noun_list = set(temp_list)


    for temp in no_noun_list:
        print(temp)

result


Kind von
Mein Jahr
Zu viel
Linke Ecke
Fähigkeit des Gegners
Auf der Stirn
Für diejenigen
(Weggelassen, weil es lang ist)

Impression: Zuerst wird eine Ngram-Analyse der Pos-Informationen mit N = 3 durchgeführt, um die Indexnummern aufzulisten, in denen die Nomenklatur, Nomenklatur und Nomen angeordnet sind, und dann werden die Oberflächeninformationen der übereinstimmenden Indexnummer extrahiert und der Anfang der extrahierten Zeichenfolge. Ich habe diejenigen extrahiert, die am Ende des Wortes kein "Nein" hatten, aber ich habe das Thema nicht richtig aussehen lassen. Und auf den aktuellen Code korrigiert. Sie müssen das Thema richtig bestätigen. Betrachtung.

Recommended Posts

[Python] Fordere 100 Schläge heraus! (015 ~ 019)
[Python] Fordere 100 Schläge heraus! (030-034)
[Python] Fordere 100 Schläge heraus! (006-009)
[Python] Fordere 100 Schläge heraus! (000-005)
[Python] Fordere 100 Schläge heraus! (010-014)
[Python] Fordere 100 Schläge heraus! (025-029)
[Python] Fordere 100 Schläge heraus! (020-024)
Python-Challenge-Tagebuch ①
Fordern Sie 100 Data Science-Schläge heraus
Python
Spartacamp Python 2019 Day2 Challenge
100 Pandas klopfen für Python-Anfänger
Fordern Sie Python3 und Selenium Webdriver heraus
Fordern Sie LOTO 6 mit Python ohne Disziplin heraus
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
# 2 Python-Anfänger fordern AtCoder heraus! ABC085C --Otoshidama
100 Bildverarbeitung mit Python Knock # 2 Graustufen
Kafka Python
Python-Grundlagen ⑤
Python-Zusammenfassung
Eingebaute Python
Python-Einschlussnotation
Python-Technik
Python 2.7 Countdown
Python-Memorandum
Python FlowFishMaster
Python-Dienst
Python-Tipps
Python-Funktion ①
Python-Grundlagen
Python-Memo
Ufo-> Python (3)
Python-Einschlussnotation
Installieren Sie Python
Python Singleton
Python-Grundlagen ④
Python-Memorandum 2
Python-Memo
Python Jinja2
100 Bildverarbeitung mit Python Knock # 8 Max Pooling
Python-Inkrement
atCoder 173 Python
[Python] -Funktion
Python-Installation
Python installieren 3.4.3.
Versuchen Sie Python
Python-Memo
Python iterativ
Python-Algorithmus
Python2 + word2vec
[Python] -Variablen
Python-Funktionen
Python sys.intern ()
Python-Tutorial
Python-Fraktion
Python Underbar Das ist was
Python-Zusammenfassung
Starten Sie Python
[Python] Sortieren