[PYTHON] 100 traitements linguistiques knock-37 (utilisant des pandas): Top 10 des mots les plus fréquents

Traitement du langage 100 coups 2015 ["Chapitre 4: Analyse morphologique"](http: //www.cl.ecei.tohoku) .ac.jp / nlp100 / # ch4) 37e "Top 10 des mots les plus fréquents" record. Cette fois, nous utiliserons matplotlib pour l'affichage des graphiques. Il semble que tout le monde tombera dans matplotlib " Tofu problem " (japonais Correspond au phénomène selon lequel les caractères de type tofu affichés sont affichés sur le graphique).

Lien de référence

Lien Remarques
037.Top 10 des mots les plus fréquents.ipynb Lien GitHub du programme de réponse
100 coups de traitement du langage amateur:37 Copiez et collez la source de nombreuses pièces source
Officiel MeCab Page MeCab à regarder en premier

environnement

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

Chapitre 4: Analyse morphologique

contenu de l'étude

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

Contenu frappé

Utilisation de MeCab pour le texte (neko.txt) du roman de Natsume Soseki "Je suis un chat" Analysez la morphologie 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.

37. Top 10 des mots les plus fréquents

Affichez les 10 mots les plus fréquents et leur fréquence d'apparition dans un graphique (par exemple, un graphique à barres).

Répondre

Programme de réponse [037. Top 10 des mots les plus fréquemment utilisés.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/04.%E5%BD%A2%E6%85%8B%E7%B4%A0% E8% A7% A3% E6% 9E% 90 / 037.% 20% E9% A0% BB% E5% BA% A6% E4% B8% 8A% E4% BD% 8D10% E8% AA% 9E.ipynb)

import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'IPAexGothic'

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()[:10].plot.bar()

#Exclure les mots auxiliaires et les verbes auxiliaires
df[~df['pos'].str.startswith('Aider')]['surface'].value_counts()[:10].plot.bar()

Répondre au commentaire

Compatible avec le tofu (correspondant aux caractères graphiques déformés)

Reportez-vous à l'article suivant pour prendre en charge le tofu (correspondant aux caractères graphiques déformés). Veuillez noter que la méthode de support dépend fortement de l'environnement OS et Python (comme l'utilisation de pyenv).

1. Installation des polices

Installer les polices avec ʻapt-get`

apt-get install fonts-ipaexfont

2. Supprimer le cache

Supprimez physiquement les fichiers suivants qui sont le cache de polices de matplotlib. Je ne connais pas la différence entre les deux, mais je l'ai supprimé avec le sentiment que "le cache peut être effacé".

3. Spécifiez la police en Python

Spécifiez la police pour générer le graphique avec les paramètres suivants sur Python. Ceci complète le support "tofu".

python


plt.rcParams['font.family'] = 'IPAexGothic'

Sortie graphique

pandas est très pratique car il peut être affiché comme il utilise plot.

python


df['surface'].value_counts()[:10].plot.bar()

#Exclure les mots auxiliaires et les verbes auxiliaires
df[~df['pos'].str.startswith('Aider')]['surface'].value_counts()[:10].plot.bar()

Résultat de sortie (résultat de l'exécution)

Lorsque le programme est exécuté, les résultats suivants sont affichés. Après tout, il est plus facile de comprendre si vous le graphez plutôt que de simplement regarder les chiffres.

Tous les mots

image.png

Mots à l'exclusion des mots auxiliaires et des verbes auxiliaires

image.png

Recommended Posts

100 traitements linguistiques knock-37 (utilisant des pandas): Top 10 des mots les plus fréquents
100 traitement du langage knock-31 (en utilisant des pandas): verbe
100 traitement du langage knock-38 (en utilisant des pandas): histogramme
100 coups de traitement linguistique (2020): 40
100 coups de traitement linguistique (2020): 32
100 coups de traitement linguistique (2020): 35
100 Language Processing Knock-33 (en utilisant des pandas): nom sahen
100 coups de traitement linguistique (2020): 47
100 coups de traitement linguistique (2020): 39
100 coups de traitement linguistique (2020): 22
100 coups de traitement linguistique (2020): 26
100 coups de traitement linguistique (2020): 34
100 coups de traitement linguistique (2020): 42
100 coups de traitement linguistique (2020): 29
100 coups de traitement linguistique (2020): 49
Le traitement de 100 langues frappe 06 ~ 09
100 coups de traitement linguistique (2020): 43
100 coups de traitement linguistique (2020): 24
100 coups de traitement linguistique (2020): 45
100 coups de traitement linguistique (2020): 10-19
100 traitement du langage knock-35 (utilisant des pandas): concaténation de nomenclature
100 coups de traitement linguistique (2020): 00-09
100 coups de traitement linguistique (2020): 31
100 coups de traitement linguistique (2020): 48
100 coups de traitement linguistique (2020): 44
100 coups de traitement linguistique (2020): 41
100 coups de traitement linguistique (2020): 37
100 Language Processing Knock-39 (en utilisant des pandas): la loi de Zipf
100 coups de traitement linguistique (2020): 25
100 coups de traitement linguistique (2020): 23
100 coups de traitement linguistique (2020): 33
100 coups de traitement linguistique (2020): 20
100 coups de traitement linguistique (2020): 27
100 coups de traitement linguistique (2020): 46
100 coups de traitement linguistique (2020): 21
100 traitement de langage knock-34 (utilisant des pandas): "B of A"
100 coups de traitement linguistique (2020): 36
100 langage de traitement knock-20 (à l'aide de pandas): lecture de données JSON
100 Language Processing Knock-32 (utilisant des pandas): Prototype de verbe
Traitement de 100 langues knock-98 (en utilisant des pandas): Clustering par méthode Ward
100 traitement du langage knock-99 (à l'aide de pandas): visualisation par t-SNE
100 traitement du langage knock-95 (en utilisant des pandas): Note avec WordSimilarity-353
100 coups de traitement du langage amateur: 41
100 coups de traitement du langage amateur: 71
100 coups de traitement du langage amateur: 56
100 coups de traitement du langage amateur: 24
100 coups de traitement du langage amateur: 50
100 coups de traitement du langage amateur: 59
100 coups de traitement du langage amateur: 62
100 coups de traitement du langage amateur: 60
100 coups de traitement du langage amateur: 92
100 coups de langue amateur: 30
100 coups de langue amateur: 06
100 coups de traitement du langage amateur: 84
100 coups de traitement du langage amateur: 81
100 coups de langue amateur: 33
100 coups de traitement du langage amateur: 46
100 coups de traitement du langage amateur: 88
100 coups de traitement du langage amateur: 89
100 coups de traitement du langage amateur: 40
100 coups de traitement du langage amateur: 45