Un enregistrement de la résolution des problèmes dans la seconde moitié du chapitre 4. Le fichier cible est neko.txt comme indiqué sur la page Web.
Utilisez MeCab pour analyser morphologiquement le texte (neko.txt) du roman de Natsume Soseki "Je suis un chat" et enregistrez le résultat dans un fichier appelé neko.txt.mecab. Utilisez ce fichier pour implémenter un programme qui répond aux questions suivantes. Pour les problèmes 37, 38, 39, utilisez matplotlib ou Gnuplot.
Extraire la concaténation de la nomenclature (noms qui apparaissent consécutivement) avec la correspondance la plus longue.
# -*- coding: utf-8 -
__author__ = 'todoroki'
import problem30
def extract_seqs(sentences):
seqs = []
seq = []
for sentence in sentences:
for morpheme in sentence:
if morpheme['pos'] == "nom":
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()
Trouvez les mots qui apparaissent dans la phrase et leur fréquence d'apparition et classez-les par ordre décroissant de fréquence d'apparition.
# -*- 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()
Affichez les 10 mots les plus courants et leur fréquence d'apparition dans un graphique (par exemple, un graphique à barres).
# -*- 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()
Tracez un histogramme de la fréquence d'occurrence des mots (l'axe horizontal représente la fréquence d'occurrence et l'axe vertical représente le nombre de types de mots qui prennent la fréquence d'occurrence sous forme de graphique à barres).
# -*- 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)
Tracez les deux graphiques logarithmiques avec la fréquence d'occurrence des mots sur l'axe horizontal et la fréquence d'occurrence sur l'axe vertical.
# -*- 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()