[PYTHON] 100 traitement du langage knock-35 (utilisant des pandas): concaténation de nomenclature

Traitement du langage 100 coups 2015 ["Chapitre 4: Analyse morphologique"](http: //www.cl.ecei.tohoku) Il s'agit de l'enregistrement de 35e "Concaténation de nomenclature" de .ac.jp / nlp100 / # ch4). Comme la dernière fois, c'est un contenu qui ne peut pas être facilement traité par les pandas. Cependant, la partie «concaténation de nomenclature» n'est pas difficile à traiter d'environ 10 lignes.

Lien de référence

Lien Remarques
035.Concaténation de nomenclature.ipynb Lien GitHub du programme de réponse
100 coups de traitement du langage amateur:35 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.

35. Concaténation de nomenclature

Extraire la concaténation de la nomenclature (noms qui apparaissent consécutivement) avec la correspondance la plus longue.

Supplément de problème (à propos de "")

Répondre

Programme de réponse [035. Nomenclature.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/04.%E5%BD%A2%E6%85%8B%E7%B4%A0%E8 % A7% A3% E6% 9E% 90 / 035.% E5% 90% 8D% E8% A9% 9E% E3% 81% AE% E9% 80% A3% E6% 8E% A5.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'] == 'nom']

df = read_text()

nouns = []
for index in df['surface'].index:
    nouns.append(df['surface'][index])
    
    #Concaténation de fin de nez s'il n'y a pas d'index devant
    if (index + 1) not in df.index:
        
        #Plusieurs(Enchaînement)dans le cas de
        if len(nouns) > 1:
            print(len(nouns), '\t', index, '\t', ''.join(nouns))
        nouns = []
    
    #Limité car il y en a beaucoup
    if index > 2000:
        break

Répondre au commentaire

Lire le fichier

Cette fois, seule la nomenclature est requise, de sorte que les entrées sont réduites à la seule nomenclature immédiatement après la lecture du fichier.

python


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'] == 'nom']

Extraction de concaténation nasale

Le reste est en cours de traitement en boucle. Le jugement de fin de concaténation est effectué en fonction du fait que l'indice de l'entrée suivante est +1. Affiche la nomenclature uniquement lorsque la longueur de la liste de concaténation est égale ou supérieure à 1 à la fin de la concaténation.

python


nouns = []
for index in df['surface'].index:
    nouns.append(df['surface'][index])
    
    #Concaténation de fin de nez s'il n'y a pas d'index devant
    if (index + 1) not in df.index:
        
        #Plusieurs(Enchaînement)dans le cas de
        if len(nouns) > 1:
            print(len(nouns), '\t', index, '\t', ''.join(nouns))
        nouns = []

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

Lorsque le programme est exécuté, les résultats suivants sont affichés.

Résultat de sortie


2 28
2 66 Humain
2 69 Le pire
2 172
2190 Un cheveu
2209 Puis chat
2222 fois
2688 Maison
2860 autres que les étudiants
3 1001
2 1028 L'autre jour
2 1031 Mima
2 1106 Cuisine
2 1150 tel quel
2 1235 Etude d'une journée
2 1255 Étudiant
2 1266 Étudiant
2 1288 Diligent
3 1392 Page 23
2 1515 Autre que le capitaine
2 1581 Pour autant que je suis
2 1599 Maître du matin
2 1690 Très attentif
2 1733 Un étage
2 1781 Dernier dur
3 1829 Faiblesse neurogastrique
2 1913 Séjour linguistique
2 1961
3 1965 Famille totale

Recommended Posts

100 traitement du langage knock-35 (utilisant des pandas): concaténation de nomenclature
100 Language Processing Knock-33 (en utilisant des pandas): nom sahen
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-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
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 traitement du langage knock-36 (en utilisant des pandas): fréquence d'occurrence des mots
100 Language Processing Knock: Chapitre 2 Principes de base des commandes UNIX (à l'aide de pandas)
100 Language Processing Knock-83 (en utilisant des pandas): Mesure de la fréquence des mots / contextes
100 Language Processing Knock-30 (en utilisant des pandas): lecture des résultats de l'analyse morphologique
100 traitement du langage knock-76 (en utilisant scicit-learn): étiquetage
100 traitement du langage knock-73 (en utilisant scikit-learn): apprentissage
100 traitement du langage knock-74 (en utilisant scicit-learn): prédiction
100 coups de traitement linguistique (2020): 28
100 coups de traitement linguistique (2020): 38
100 traitement de la langue frapper 00 ~ 02
100 Language Processing Knock-84 (en utilisant des pandas): Création d'une matrice de contexte de mots
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 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 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
100 traitement du langage knock-75 (en utilisant scicit-learn): poids de l'identité
100 traitement du langage knock-72 (en utilisant Stanford NLP): Extraction d'identité
100 traitement du langage knock-93 (en utilisant des pandas): calcul du taux de précision de la tâche d'analogie
100 coups de traitement du langage avec Python 2015
100 langage traitement knock-92 (utilisant Gensim): application aux données d'analogie
100 traitement du langage Knock-51: découpage de mots
100 Language Processing Knock-57: Analyse des dépendances
100 traitement linguistique knock-50: coupure de phrase
100 Language Processing Knock Chapitre 1 (Python)
100 Language Processing Knock Chapitre 2 (Python)
100 Language Processing Knock-25: Extraction de modèles
Traitement du langage 100 Knock-87: similitude des mots
100 traitement de langage knock-94 (en utilisant Gensim): calcul de similarité avec WordSimilarity-353
J'ai essayé 100 traitements linguistiques Knock 2020
100 Language Processing Knock-56: analyse de co-référence
Résolution de 100 traitements linguistiques Knock 2020 (01. "Patatokukashi")
100 traitements linguistiques knock-37 (utilisant des pandas): Top 10 des mots les plus fréquents
100 coups de traitement du langage amateur: Résumé
100 traitements linguistiques knock-77 (en utilisant scicit-learn): mesure du taux de réponse
100 langage de traitement knock-70 (en utilisant Stanford NLP): Obtention et formatage des données
100 Language Processing Knock 2020 Chapitre 2: Commandes UNIX