Siehe Erster Beitrag
9/24 hinzugefügt
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.
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.
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.
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. .. ..
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.
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.
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.
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