[PYTHON] 100 traitement du langage knock-36 (en utilisant des pandas): fréquence d'occurrence des mots

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 de référence

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

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
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" 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.

36. Fréquence d'occurrence des mots

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.

Répondre

Programme de réponse [036. Frequency of word occurrence.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/04.%E5%BD%A2%E6%85%8B%E7%B4%A0% E8% A7% A3% E6% 9E% 90 / 036.% E5% 8D% 98% E8% AA% 9E% E3% 81% AE% E5% 87% BA% E7% 8F% BE% E9% A0% BB % E5% BA% A6.ipynb)

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]

Répondre au commentaire

Comptage et tri de la fréquence d'occurrence

[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]

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

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

Recommended Posts

100 traitement du langage knock-36 (en utilisant des pandas): fréquence d'occurrence des mots
100 Language Processing Knock-83 (en utilisant des pandas): Mesure de la fréquence des mots / contextes
100 Language Processing Knock-32 (utilisant des pandas): Prototype de verbe
100 traitement du langage knock-31 (en utilisant des pandas): verbe
100 traitement du langage knock-38 (en utilisant des pandas): histogramme
100 Language Processing Knock-84 (en utilisant des pandas): Création d'une matrice de contexte de mots
100 Language Processing Knock-33 (en utilisant des pandas): nom sahen
100 traitement du langage knock-35 (utilisant des pandas): concaténation de nomenclature
100 Language Processing Knock-39 (en utilisant des pandas): la loi de Zipf
100 traitement de langage knock-34 (utilisant des pandas): "B of A"
100 langage de traitement knock-20 (à l'aide de pandas): lecture de données JSON
Traitement de 100 langues knock-98 (en utilisant des pandas): Clustering par méthode Ward
100 traitement du langage knock-75 (en utilisant scicit-learn): poids de l'identité
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 traitement du langage Knock-51: découpage de mots
Traitement du langage 100 Knock-87: similitude des mots
100 Language Processing Knock: Chapitre 2 Principes de base des commandes UNIX (à l'aide de pandas)
100 Language Processing Knock-30 (en utilisant des pandas): lecture des résultats de l'analyse morphologique
100 Language Processing Knock-82 (mot de contexte): Extraction de contexte
Traitement du langage 100 knock-86: affichage vectoriel Word
100 Traitement du langage Knock 2020 Chapitre 7: Vecteur de mots
100 traitement du langage knock-59: analyse de la formule S
100 traitement du langage knock-73 (en utilisant scikit-learn): apprentissage
100 traitement du langage knock-74 (en utilisant scicit-learn): prédiction
100 traitements linguistiques knock-77 (en utilisant scicit-learn): mesure du taux de réponse
100 traitement du langage knock-97 (en utilisant scicit-learn): clustering k-means
100 traitement du langage knock-91: Préparation des données d'analogie
100 coups de traitement linguistique (2020): 28
100 Language Processing Knock-26: suppression du balisage accentué
100 Language Processing Knock-71 (en utilisant Stanford NLP): Stopword
100 traitement de la langue knock-96 (en utilisant Gensim): Extraction du vecteur lié au nom du pays
100 coups de traitement linguistique (2020): 38
100 traitement de la langue frapper 00 ~ 02
100 traitement du langage knock-90 (en utilisant Gensim): apprendre avec word2vec
100 langage de traitement knock-79 (en utilisant scikit-learn): dessin de graphe avec rappel de précision
[Pandas] Principes de base du traitement des données de date à l'aide de dt
Traitement du langage 100 knocks-45: Extraction de modèles de cas verbaux
100 traitement du langage knock-72 (en utilisant Stanford NLP): Extraction d'identité
100 traitements linguistiques Knock 2020 [00 ~ 39 réponse]
100 langues de traitement knock 2020 [00-79 réponse]
100 traitements linguistiques Knock 2020 [00 ~ 69 réponse]
100 Language Processing Knock 2020 Chapitre 1
100 coups de traitement du langage amateur: 17
100 traitements linguistiques Knock 2020 [00 ~ 49 réponse]
100 Traitement du langage Knock-52: Stemming
100 Traitement du langage Knock Chapitre 1
100 coups de langue amateur: 07
100 Language Processing Knock 2020 Chapitre 3
100 Language Processing Knock 2020 Chapitre 2
100 coups de traitement du langage amateur: 09
100 coups en traitement du langage amateur: 47
Traitement 100 langues knock-53: Tokenisation
100 coups de traitement du langage amateur: 97
100 traitements linguistiques Knock 2020 [00 ~ 59 réponse]
100 coups de traitement du langage amateur: 67
100 langage traitement knock-92 (utilisant Gensim): application aux données d'analogie
Traitement du langage 100 knocks-49: Extraction de chemins de dépendances entre nomenclature
100 traitement de langage knock-94 (en utilisant Gensim): calcul de similarité avec WordSimilarity-353
100 traitements linguistiques knock-37 (utilisant des pandas): Top 10 des mots les plus fréquents
Apprenez facilement 100 traitements linguistiques Knock 2020 avec "Google Colaboratory"