Traitement du langage 100 coups 2015 ["Chapitre 4: Analyse morphologique"](http: //www.cl.ecei.tohoku) Il s'agit d'un enregistrement de 36e "fréquence d'apparition des mots" de .ac.jp / nlp100 / # ch4). Cette fois, c'est super facile car les pandas sont bons pour compter le nombre d'apparitions et trier.
Lien | Remarques |
---|---|
036.Fréquence d'occurrence des mots.ipynb | Lien GitHub du programme de réponse |
100 coups de traitement du langage amateur:36 | 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 |
---|---|
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, 39, utilisez matplotlib ou Gnuplot.
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.
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()
df['surface'].value_counts()[:30]
#Exclure les mots auxiliaires et les verbes auxiliaires
df[~df['pos'].str.startswith('Aider')]['surface'].value_counts()[:30]
[Knock 19th "Calculez la fréquence d'apparition de la chaîne de caractères dans la première colonne de chaque ligne et organisez-la par ordre décroissant de fréquence d'apparition"](https://qiita.com/FukuharaYohei/items/87f0413b87c6109e8ca4#019%E5%90%84% E8% A1% 8C% E3% 81% AE1% E3% 82% B3% E3% 83% A9% E3% 83% A0% E7% 9B% AE% E3% 81% AE% E6% 96% 87% E5% AD% 97% E5% 88% 97% E3% 81% AE% E5% 87% BA% E7% 8F% BE% E9% A0% BB% E5% BA% A6% E3% 82% 92% E6% B1% 82% E3% 82% 81% E5% 87% BA% E7% 8F% BE% E9% A0% BB% E5% BA% A6% E3% 81% AE% E9% AB% 98% E3% 81% 84% E9% A0% 86% E3% 81% AB% E4% B8% A6% E3% 81% B9% E3% 82% 8Bipynb) Utilisez value_counts
pour supprimer et trier les doublons. Il est pratique de trier par ordre décroissant par défaut.
python
df['surface'].value_counts()[:30]
L'exclusion des verbes auxiliaires et auxiliaires n'ajoute qu'une condition. J'en ai fait une condition négative pour str.startswith
parce que les seules parties qui commencent par" assistant "sont probablement des assistants et des verbes auxiliaires.
python
#Exclure les mots auxiliaires et les verbes auxiliaires
df[~df['pos'].str.startswith('Aider')]['surface'].value_counts()[:30]
Lorsque le programme est exécuté, les résultats suivants sont affichés. Le top 30 pour toutes les cibles. Naturellement, il est impossible de déduire le contenu avec seulement des mots auxiliaires et des verbes auxiliaires.
Résultat de sortie(Toutes les cibles)
9109
6697
Est 6384
Au 6147
6068
Et 5476
Est 5259
3916
Au 3774
Aussi 2433
2272
2264
Pas 2254
À partir de 2001
1705
1579
Ou 1446
Hum 1416
1249
Chose 1177
À 1033
986
974
Choses 971
Vous 955
Dites 937
Maître 928
U 922
Yo 687
673
Name: surface, dtype: int64
Les mots auxiliaires et les verbes auxiliaires ont été exclus de la sortie. Il est beaucoup plus facile de déduire que «je suis un chat» que de tout cibler.
Résultat de sortie(Exclure les mots auxiliaires et les verbes auxiliaires)
2201
1597
1249
Chose 1177
986
Choses 971
Vous 955
Dites 937
Maître 928
Il y a 723
Pas 708
Yo 687
Hum 667
Ce 635
Aller 598
Que 560
Quoi 518
I 477
Personne 449
Oui 448
443
Devenir 410
403
Ce 397
Il 370
À venir 367
Voir 349
Labyrinthe 343
Re 327
Heure 316
Name: surface, dtype: int64