[PYTHON] 100 traitement de langage knock-34 (utilisant des pandas): "B of A"

Traitement du langage 100 coups 2015 ["Chapitre 4: Analyse morphologique"](http: //www.cl.ecei.tohoku) .ac.jp / nlp100 / # ch4) 34ème "A B" enregistrement. Cette fois, c'est un défi pour combiner les informations de ligne, donc ce n'est pas aussi facile qu'auparavant. Je ne suis pas doué pour les pandas et SQL. Cependant, ce n'est pas difficile car il ne s'agit que d'un processus en boucle.

Lien de référence

Lien Remarques
034."B de A".ipynb Lien GitHub du programme de réponse
100 coups de traitement du langage amateur:34 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 et 39, utilisez matplotlib ou Gnuplot.

34. "B of A"

Extraire la nomenclature dans laquelle deux nomenclatures sont reliées par "non".

Répondre

Programme de réponse [034. "A's B" .ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/04.%E5%BD%A2%E6%85%8B%E7%B4%A0 % E8% A7% A3% E6% 9E% 90 / 034.% E3% 80% 8CA% E3% 81% AEB% E3% 80% 8D.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')
    # EOS,symbole,Laisser un blanc
    return df

df = read_text()

POS_TARGET = 'nom'

for index in df['surface'].index:
    
    #Pas de logique particulière sur les première et dernière lignes
    if df['surface'][index] == 'de' \
     and df['pos'][index-1] == POS_TARGET \
     and df['pos'][index+1] == POS_TARGET:
        print(index, '\t', df['surface'][index-1] + 'de' + df['surface'][index+1])
    
    #Limité car il y en a beaucoup
    if index > 2000:
        break

Répondre au commentaire

Lire le fichier

Contrairement à la frappe précédente, les EOS, les symboles et les lignes vides ne sont pas supprimés. C'est parce que je voulais en faire une condition que «B de A» soit continu, y compris la clarté à la fin des phrases et des symboles.

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')
    # EOS,symbole,Laisser un blanc
    return df

Jugement "A à B"

Boucle sur l'indice de la série Pandas. Et il juge si les lignes avant et après sont de la nomenclature.

python


for index in df['surface'].index:
    
    #Pas de logique particulière sur les première et dernière lignes
    if df['surface'][index] == 'de' \
     and df['pos'][index-1] == POS_TARGET \
     and df['pos'][index+1] == POS_TARGET:
        print(index, '\t', df['surface'][index-1] + 'de' + df['surface'][index+1])

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

Lorsque le programme est exécuté, les résultats suivants sont affichés. Comme il y en a tellement, je ne vois que 2000 lignes.

Résultat de sortie


118 sa paume
144 sur la paume
151 Visage d'étudiant
197 visage qui devrait être
235 au milieu du visage
248 Dans le trou
292 La paume de l'étudiant
294 Derrière la paume
382 quoi
421 mère essentielle
478 sur la paille
484 À l'intérieur de Sasahara
498 Enfin des pensées
516 Devant l'étang
658 Enfin chose
729 Merci à Kazuki
742 Trou de clôture
752 Les trois cheveux du voisin
Passage à 758 heures
806 Grâce momentanée
842 À l'intérieur de la maison
858 Son élève
Humains autres que 861
892 Étudiant précédent
958 Votre chance
1029 Sansan no San
1046 Démangeaisons thoraciques
1068 Femme de ménage
1089 Maître
1121 sous le nez
1130 Mon visage
1192 Ma maison
1208 Mon mari
1249 Trucs pour la maison
1281 dont
1300 son étude
Sur 1326 livres
1341 Couleur de peau
Sur 1402
1411 son tous les soirs
Autre que 1516
1588 à côté de mon mari
1608 son genou
1610 sur le genou
1659 Expérience
1665 Sur le bol de riz
1671 Sur le 炬 燵
1700 d'ici
1702 Notre petit compagnon
1704 Petit lit
1747 au milieu d'eux
1773 Un des petits compagnons
1826 cas de nerf
1830 Maître sexuel
1839 Pièce suivante
1919 Égoïste
1953 I
2000 Entre les planches de la cuisine

Recommended Posts

100 traitement de langage knock-34 (utilisant des pandas): "B of A"
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-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 Language Processing Knock-84 (en utilisant des pandas): Création d'une matrice de contexte de mots
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 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-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 traitement du langage knock-97 (en utilisant scicit-learn): clustering k-means
100 Language Processing Knock-71 (en utilisant Stanford NLP): Stopword
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 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 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-58: Extraction de Taple
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
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 Language Processing Knock 2020 Chapitre 2: Commandes UNIX
100 Language Processing Knock 2015 Chapitre 5 Analyse des dépendances (40-49)
100 traitements de langage avec Python
100 Language Processing Knock Chapitre 1 en Python