Eine Aufzeichnung zur Lösung der Probleme in der zweiten 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.
Extrahieren Sie die Verkettung der Nomenklatur (Substantive, die nacheinander erscheinen) mit der längsten Übereinstimmung.
# -*- coding: utf-8 -
__author__ = 'todoroki'
import problem30
def extract_seqs(sentences):
seqs = []
seq = []
for sentence in sentences:
for morpheme in sentence:
if morpheme['pos'] == "Substantiv":
seq.append(morpheme['surface'])
else:
if len(seq) > 1:
seqs.append(seq)
seq = []
return seqs
if __name__ == "__main__":
inputfile = 'neko.txt.mecab'
outputfile = 'neko.mecab_sequences.txt'
f = open(inputfile, "r")
g = open(outputfile, "w")
sentences = problem30.mecab_reader(f)
sequences = extract_seqs(sentences)
for sequence in sequences:
# print "".join(sequence)
g.write("".join(sequence) + '\n')
f.close()
g.close()
Finden Sie die Wörter, die im Satz erscheinen, und ihre Häufigkeit des Auftretens, und ordnen Sie sie in absteigender Reihenfolge der Häufigkeit des Auftretens an.
# -*- coding: utf-8 -
__author__ = 'todoroki'
import problem30
from collections import Counter
def count_words(sentences):
words = []
for sentence in sentences:
for morpheme in sentence:
words.append(morpheme['surface'])
return Counter(words)
if __name__ == "__main__":
inputfile = "neko.txt.mecab"
outputfile = "neko.mecab_words.txt"
f = open(inputfile, 'r')
g = open(outputfile, 'w')
sentences = problem30.mecab_reader(f)
counter = count_words(sentences)
for word, count in counter.most_common():
# print word, count
g.write("%s %s\n" % (word, count))
f.close()
g.close()
Zeigen Sie die 10 am häufigsten vorkommenden Wörter und ihre Häufigkeit des Auftretens in einem Diagramm an (z. B. einem Balkendiagramm).
# -*- coding: utf-8 -
__author__ = 'todoroki'
import problem30
import problem36
import matplotlib.pyplot as plt
def plot_words(words, counts, file):
from matplotlib.font_manager import FontProperties
fp = FontProperties(fname='/usr/local/Cellar/ricty/3.2.4/share/fonts/Ricty-Regular.ttf')
plt.bar(range(10), counts, align='center')
plt.xticks(range(0, 10), words, fontproperties=fp)
plt.savefig(file)
if __name__ == '__main__':
inputfile = 'neko.txt.mecab'
outputfile = 'neko.mecab_words.png'
f = open(inputfile, 'r')
words = []
counts = []
sentences = problem30.mecab_reader(f)
counter = problem36.count_words(sentences)
for word, count in counter.most_common(10):
# print word, count
words.append(word.decode('utf8'))
counts.append(count)
plot_words(words, counts, outputfile)
f.close()
Zeichnen Sie ein Histogramm der Häufigkeit des Auftretens von Wörtern (die horizontale Achse repräsentiert die Häufigkeit des Auftretens und die vertikale Achse repräsentiert die Anzahl der Arten von Wörtern, die die Häufigkeit des Auftretens als Balkendiagramm verwenden).
# -*- coding: utf-8 -
__author__ = 'todoroki'
import problem30
import problem36
import pandas as pd
def plot_words_hist(freq, file):
plot = freq.hist()
fig = plot.get_figure()
fig.savefig(file)
if __name__ == '__main__':
inputfile = 'neko.txt.mecab'
outputfile = 'neko.mecab_words_hist.png'
f = open(inputfile, 'r')
words = []
counts = []
sentences = problem30.mecab_reader(f)
counter = problem36.count_words(sentences)
freq = pd.Series(list(counter.values()), index=list(counter.keys()))
plot_words_hist(freq, outputfile)
Zeichnen Sie beide logarithmischen Diagramme mit der Häufigkeit des Auftretens von Wörtern auf der horizontalen Achse und der Häufigkeit des Auftretens auf der vertikalen Achse.
# -*- coding: utf-8 -
__author__ = 'todoroki'
import problem30
import problem36
import matplotlib.pyplot as plt
def plot_words_hist_log(counter, file):
from matplotlib.font_manager import FontProperties
fp = FontProperties(fname='/usr/local/Cellar/ricty/3.2.4/share/fonts/Ricty-Regular.ttf')
plt.figure()
plt.xscale('log')
plt.yscale('log')
plt.plot(sorted(list(counter.values()), reverse=True), range(1, len(list(counter))+1))
plt.savefig(file)
if __name__ == '__main__':
inputfile = 'neko.txt.mecab'
outputfile = 'neko.mecab_words_hist_log.png'
f = open(inputfile, 'r')
words = []
counts = []
sentences = problem30.mecab_reader(f)
counter = problem36.count_words(sentences)
plot_words_hist_log(counter, outputfile)
f.close()
Recommended Posts