Traitement du langage 100 coups 2015 ["Chapitre 4: Analyse morphologique"](http: //www.cl.ecei.tohoku) Il s'agit d'un enregistrement de la 39e "loi de Zipf" de .ac.jp / nlp100 / # ch4). «La loi de Zipf» est [Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%B8%E3%83%83%E3%83%97%E3%81%AE%E6%B3 Selon% 95% E5% 89% 87), il est écrit dans l'explication suivante, et pour le dire clairement, la règle que ** plus il apparaît fréquemment, plus la proportion du tout est grande **.
La loi de Zipf (loi de Zipf) ou loi de Zipf est une règle empirique selon laquelle la proportion du kème élément le plus fréquent dans l'ensemble est proportionnelle à $ \ frac {1} {k} $.
Lien | Remarques |
---|---|
039.Loi de Zipf.ipynb | Lien GitHub du programme de réponse |
100 coups de traitement du langage amateur:39 | Copiez et collez la source de nombreuses pièces source |
Officiel MeCab | Page MeCab à regarder en premier |
type | version | Contenu |
---|---|---|
OS | Ubuntu18.04.01 LTS | Il fonctionne virtuellement |
pyenv | 1.2.16 | J'utilise pyenv car j'utilise parfois plusieurs environnements Python |
Python | 3.8.1 | python3 sur pyenv.8.J'utilise 1 Les packages sont gérés à l'aide de venv |
Mecab | 0.996-5 | apt-Installer avec get |
Dans l'environnement ci-dessus, j'utilise les packages Python supplémentaires suivants. Installez simplement avec pip ordinaire.
type | version |
---|---|
matplotlib | 3.1.3 |
pandas | 1.0.1 |
Appliquer l'analyseur morphologique MeCab au roman «Je suis un chat» de Natsume Soseki et obtenir les statistiques des mots du roman.
Analyse morphologique, MeCab, paroles de partie, fréquence d'occurrence, loi de Zipf, matplotlib, Gnuplot
Utilisation de MeCab pour le texte (neko.txt) du roman de Natsume Soseki "Je suis un chat" Effectuez une analyse morphologique 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 et 39, utilisez matplotlib ou Gnuplot.
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.
import matplotlib.pyplot as plt
import pandas as pd
def read_text():
# 0:Type de surface(surface)
# 1:Partie(pos)
# 2:Sous-classification des paroles des parties 1(pos1)
# 7:Forme basique(base)
df = pd.read_table('./neko.txt.mecab', sep='\t|,', header=None,
usecols=[0, 1, 2, 7], names=['surface', 'pos', 'pos1', 'base'],
skiprows=4, skipfooter=1 ,engine='python')
return df[(df['pos'] != 'Vide') & (df['surface'] != 'EOS') & (df['pos'] != 'symbole')]
df = read_text()
frequency = df['surface'].value_counts().values.tolist()
plt.xscale('log')
plt.yscale('log')
plt.xlim(1, len(frequency)+1)
plt.ylim(1, frequency[0])
plt.xlabel('Rang')
plt.ylabel('Fréquence d'apparition')
plt.scatter(x=range(1, len(frequency)+1), y=df['surface'].value_counts().values.tolist())
La fonction value_counts
compte les fréquences uniques et la fonction tolist
les répertorie.
python
frequency = df['surface'].value_counts().values.tolist()
Cette fois, l'énoncé du problème est "les deux graphes logarithmiques", donc j'utilise l'échelle logarithmique.
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.
python
plt.xscale('log')
plt.yscale('log')
L'axe des x maximise la longueur de la liste + 1 (puisque Python commence à 0) et l'axe des y maximise la valeur 0, qui est la plus courante dans les tris décroissants.
python
plt.xlim(1, len(frequency)+1)
plt.ylim(1, frequency[0])
Lorsque le programme est exécuté, les résultats suivants sont affichés. C'est brillamment en descente.
Recommended Posts