Eine Aufzeichnung zur Lösung der Probleme in der ersten Hälfte von Kapitel 4. Die Zieldatei ist neko.txt, wie auf der Webseite gezeigt.
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 wird jedoch in einem Zuordnungstyp mit der Oberfläche, der Grundform (Basis), einem Teil des Wortes (pos) und einem Teil der Wortunterklassifizierung 1 (pos1) als Schlüssel gespeichert, und ein Satz wird als Liste morphologischer Elemente (Zuordnungstyp) ausgedrückt. Machen wir das. Verwenden Sie für die restlichen Probleme in Kapitel 4 das hier erstellte Programm.
# -*- coding: utf-8 -
__author__ = 'todoroki'
def mecab_reader(mecabfile):
sentences = []
sentence = []
for line in mecabfile:
if line == "EOS\n":
if len(sentence) > 0:
sentences.append(sentence)
sentence = []
else:
surface, features = line.split("\t")
features = features.split(",")
dic = {
'surface': surface,
'base': features[6],
'pos': features[0],
'pos1': features[1]
}
sentence.append(dic)
return sentences
if __name__ == '__main__':
inputfile = 'neko.txt.mecab'
outputfile = 'neko.mecab_dic.txt'
f = open(inputfile, 'r')
g = open(outputfile, 'w')
sentences = mecab_reader(f)
for s in sentences:
# print str(s).decode("string-escape")
g.write(str(s).decode("string-escape") + "\n")
f.close()
g.close()
Wenn der Wörterbuchtyp "s" einschließlich Japanisch einfach "print s" ist, kann Japanisch nicht so angezeigt werden, wie es ist. Daher entspricht es, Japanisch als "str (s) .decode (" string-Escape ")" anzeigen zu können.
Extrahieren Sie alle Oberflächenformen des Verbs.
# -*- coding: utf-8 -
__author__ = 'todoroki'
import problem30
def extract_verb(sentences):
res = []
for sentence in sentences:
for morpheme in sentence:
if morpheme['pos'] == 'Verb':
res.append(morpheme['surface'])
return res
if __name__ == "__main__":
inputfile = 'neko.txt.mecab'
outputfile = 'neko.mecab_verb.txt'
f = open(inputfile, "r")
g = open(outputfile, "w")
sentences = problem30.mecab_reader(f)
verbs = extract_verb(sentences)
for verb in verbs:
# print verb
g.write(verb + '\n')
f.close()
g.close()
Extrahieren Sie alle Originalformen des Verbs.
# -*- coding: utf-8 -
__author__ = 'todoroki'
import problem30
def extract_verb_base(sentences):
res = []
for sentence in sentences:
for morpheme in sentence:
if morpheme['pos'] == 'Verb':
res.append(morpheme['base'])
return res
if __name__ == "__main__":
inputfile = 'neko.txt.mecab'
outputfile = 'neko.mecab_verb_base.txt'
f = open(inputfile, "r")
g = open(outputfile, "w")
sentences = problem30.mecab_reader(f)
verb_bases = extract_verb_base(sentences)
for verb in verb_bases:
# print verb
g.write(verb + '\n')
f.close()
g.close()
Extrahieren Sie die gesamte Nomenklatur der Verbindung.
# -*- coding: utf-8 -
__author__ = 'todoroki'
import problem30
def extract_sahen(sentences):
res = []
for sentence in sentences:
for morpheme in sentence:
if morpheme['pos1'] == 'Verbindung ändern':
res.append(morpheme['surface'])
return res
if __name__ == "__main__":
inputfile = 'neko.txt.mecab'
outputfile = 'neko.mecab_sahen.txt'
f = open(inputfile, "r")
g = open(outputfile, "w")
sentences = problem30.mecab_reader(f)
sahens = extract_sahen(sentences)
for sahen in sahens:
# print sahen
g.write(sahen + '\n')
f.close()
g.close()
Extrahieren Sie die Nomenklatur, in der zwei Nomenklaturen durch "Nein" verbunden sind.
# -*- coding: utf-8 -
__author__ = 'todoroki'
import problem30
def extract_AofB(sentences):
res = []
for sentence in sentences:
for k in xrange(len(sentence)-3):
triple = sentence[k:k+3]
b1 = triple[0]['pos'] == 'Substantiv'
b2 = triple[1]['surface'] == 'von'
b3 = triple[2]['pos'] == 'Substantiv'
if b1 and b2 and b3:
res.append(t['surface'] for t in triple)
return res
if __name__ == "__main__":
inputfile = 'neko.txt.mecab'
outputfile = 'neko.mecab_AofB.txt'
f = open(inputfile, "r")
g = open(outputfile, "w")
sentences = problem30.mecab_reader(f)
res = extract_AofB(sentences)
for r in res:
# print "".join(r)
g.write("".join(r) + '\n')
f.close()
g.close()
Recommended Posts