[Python] Défiez 100 coups! (030-034)

À propos de l'histoire jusqu'à présent

Voir First Post

État de Knock

9/24 ajouté

Chapitre 4: Analyse morphologique

Utilisez MeCab pour analyser morphologiquement le texte (neko.txt) du roman de Natsume Soseki "Je suis un chat" 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.

30. Lecture des résultats de l'analyse morphologique

Implémentez un programme qui lit les résultats de l'analyse morphologique (neko.txt.mecab). Cependant, chaque élément morphologique a la clé de la forme de surface (surface), de la forme de base (base), d'une partie du mot (pos) et d'une partie de la sous-classification de mot 1 (pos1). Stocker dans un type de mappage et exprimer une phrase sous forme de liste d'éléments morphologiques (type de mappage). Pour le reste des problèmes du chapitre 4, utilisez le programme créé ici.

Préparation: création de neko.txt.mecab

file_analyze_mecab_030.py


from natto import MeCab
import codecs

def file_analyze_mecab(input_filename,output_filename):

    with codecs.open(input_filename,'r','utf-8') as f:
        text = f.read()

    m = MeCab.Tagger("mecabrc")
    wt = m.parse(text)

    with codecs.open(output_filename,'w','utf-8') as wf:
        wf.write(wt)

if __name__=="__main__":
    file_analyze_mecab('neko.txt','neko.txt.mecab')

result


Un nom,nombre,*,*,*,*,un,Ichi,Ichi
symbole,Vide,*,*,*,*, , , 
Mon nom,Synonyme,Général,*,*,*,je,Wagahai,Wagahai
Est un assistant,Assistance,*,*,*,*,Est,C,sensationnel
(Omis parce que c'est long)

Impression: J'ai entendu parler de l'analyse morphologique pour la première fois, alors j'ai enquêté à partir de là. Pour les paramètres de mecab, je me suis référé à MeCab: Yet Another Part-of-Speech and Morphological Analyzer. Le nom des modules, etc. est merveilleux.

030. Lire

mecab_030.py


#-*-coding:utf-8-*-

import codecs

if __name__ == "__main__":
    with codecs.open("neko.txt.mecab",'r','utf-8') as f:
        data = f.readlines()

    mecab_list=[]
    temp_dict ={}
    for temp_word in data:
        temp_word = temp_word.replace('\t', ',')
        temp_word = temp_word.replace('\n', '')
        if(temp_word.count(',')==9 or temp_word.count(',')==7):
            temp_list = temp_word.split(',')
            temp_dict={'surface':temp_list[0],'base':temp_list[7],'pos':temp_list[1],'pos1':temp_list[2]}
            mecab_list.append(temp_dict)
        else:
            continue
    print(mecab_list)

    with codecs.open('neko.txt.mecab.analyze','w','utf-8') as wf:
        for line in mecab_list:
            wf.write(str(line)+'\n')

result


{'surface': 'objet', 'base': 'objet', 'pos': 'nom', 'pos1': 'Général'}
(Omis parce que c'est long)

Impressions: Le fichier de sortie a été remplacé par une simple chaîne de caractères au lieu d'un type de liste pour une visualisation facile. J'étais très accro à remarquer que le nombre de «,» dans la colonne des résultats de l'analyse morphologique était de 7 ou 9. .. ..

031. verbe

Extrayez toutes les formes de surface du verbe.

vurb_031.py


#-*-coding:utf-8-*-

import codecs
import re
import ast

if __name__ == "__main__":
    with codecs.open("neko.txt.mecab.analyze",'r','utf-8') as f:
        temp_lines = f.readlines()

    pattern = re.compile(r".*verbe.*")
    data = {}
    for temp_line in temp_lines:
        if pattern.match(temp_line):
            data = ast.literal_eval(temp_line)
            print(data['surface'])
        else:
            continue

result


alors
y a-t-il
Née
Ta
Tsuka
(Omis car il est long)

Impression: le fichier de résultat de l'analyse est lu, la colonne contenant le mot-clé verbe est extraite avec une expression régulière, convertie en un type de dictionnaire et seule la surface est sortie.

032. Prototype du verbe

Extrayez toutes les formes originales du verbe.

base_vurb_032.py


# -*-coding:utf-8-*-

import codecs
import re
import ast

if __name__ == "__main__":
    with codecs.open("neko.txt.mecab.analyze", 'r', 'utf-8') as f:
        temp_lines = f.readlines()

    pattern = re.compile(r".*verbe.*")
    data = {}
    for temp_line in temp_lines:
        if pattern.match(temp_line):
            data = ast.literal_eval(temp_line)
            print(data['base'])
        else:
            continue

result


Est
y a-t-il
Être né
Ta
Tsukuri

Impressions: La procédure est la même que 031. La sortie est changée en base.

033. Sahen substantif

Extrayez toute la nomenclature de la connexion.

sahen_noun_033.py


# -*-coding:utf-8-*-

import codecs
import re
import ast

if __name__ == "__main__":
    with codecs.open("neko.txt.mecab.analyze", 'r', 'utf-8') as f:
        temp_lines = f.readlines()

    pattern = re.compile(r".*Changer de connexion.*")
    data = {}
    for temp_line in temp_lines:
        if pattern.match(temp_line):
            data = ast.literal_eval(temp_line)
            print(data['surface'])
        else:
            continue

result


S'inscrire
Mémoire
Parler
Décoration
Saillie
(Omis parce que c'est long)

Impressions: La procédure est la même que 032. Je viens de changer la condition d'extraction en une connexion de changement.

034. "B de A"

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

no_noun_034.py


#-*-coding:utf-8-*-

import codecs
import ast

if __name__ == "__main__":

    with codecs.open('neko.txt.mecab.analyze','r','utf-8') as f:
        temp_lines = f.readlines()

    flag = 0
    temp_list = []
    for temp_line in temp_lines:
        temp_dict = ast.literal_eval(temp_line)
        if (temp_dict['pos'] == 'nom' and flag == 0):
            temp_word = temp_dict['surface']
            flag = 1
            continue

        elif(temp_dict['surface']=='de' and temp_dict['pos']=='Particule' and flag == 1):
            temp_word += temp_dict['surface']
            flag = 2
            continue

        elif(temp_dict['pos']=='nom' and flag == 2):
            temp_word += temp_dict['surface']
            temp_list.append(temp_word)
            temp_word = ''
            flag = 0
            continue

        else:
            temp_word=''
            flag =0
            continue

    no_noun_list = set(temp_list)


    for temp in no_noun_list:
        print(temp)

result


Enfant de
Mon annee
Trop
Coin gauche
Capacité de l'adversaire
Sur le front
Pour ceux
(Omis parce que c'est long)

Impression: Tout d'abord, une analyse ngram des informations de position avec N = 3 est effectuée pour lister les numéros d'index dans lesquels la nomenclature, la nomenclature et le nomen sont arrangés, puis les informations de surface du numéro d'index correspondant sont extraites et le début de la chaîne de caractères extraite. J'ai extrait ceux qui n'avaient pas «non» à la fin du mot, mais je n'ai pas rendu le sujet correct. Et corrigé au code actuel. Vous devez confirmer correctement le sujet. Réflexion.

Recommended Posts

[Python] Défiez 100 coups! (015 ~ 019)
[Python] Défiez 100 coups! (030-034)
[Python] Défiez 100 coups! (006-009)
[Python] Défiez 100 coups! (000-005)
[Python] Défiez 100 coups! (010-014)
[Python] Défiez 100 coups! (025-029)
[Python] Défiez 100 coups! (020-024)
journal des défis python ①
Défiez 100 coups de science des données
Python
Défi Spartacamp Python 2019 Day2
Pandas 100 coups pour les débutants en Python
Défiez Python3 et Selenium Webdriver
Défiez LOTO 6 avec Python sans discipline
Traitement d'image avec la binarisation Python 100 knocks # 3
# 2 Les débutants en Python défient AtCoder! ABC085C --Otoshidama
100 traitement d'image par Python Knock # 2 Échelle de gris
python kafka
Les bases de Python ⑤
Résumé Python
Python intégré
Notation d'inclusion Python
Technique Python
Compte à rebours Python 2.7
Mémorandum Python
Python FlowFishMaster
Service Python
astuces python
fonction python ①
Les bases de Python
Mémo Python
ufo-> python (3)
Notation d'inclusion Python
Installer python
Python Singleton
Les bases de Python ④
Mémorandum Python 2
mémo python
Python Jinja2
100 traitement d'image avec Python Knock # 8 Max Pooling
Incrément Python
atCoder 173 Python
[Python] fonction
Installation de Python
Installer Python 3.4.3.
Essayez Python
Mémo Python
Itératif Python
Algorithme Python
Python2 + mot2vec
[Python] Variables
Fonctions Python
Python sys.intern ()
Tutoriel Python
Fraction Python
underbar python C'est ce que
Résumé Python
Démarrer python
[Python] Trier