J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python

0. Comment utiliser MeCab avec python

  1. Faites de votre mieux pour installer MeCab. ** Si vous utilisez la version 64 bits de python (3.7 ou supérieure) à partir de Windows, ne vous laissez pas berner par les anciennes informations **. L'installation de MeCab à l'aide de mecab-python-windows ne fonctionne pas. Au lieu de cela, pip install me cab fonctionnait très bien.
  2. «Importez-moi Cab». Notez que ce n'est pas ʻimport Mecab`
  3. Faites-lui ressembler à `print (MeCab.Tagger ('-Owakati').

Ce que vous obtenez de ceci est "une longue chaîne", pas une liste ou un taple. Un peu gênant.

1. Ce que j'ai fait

J'ai fait une classe avec python. En faisant MeCab.Tagger ('-Odump') dans le constructeur, toutes les informations récupérées par MeCab sont stockées dans le champ, et chaque méthode récupère uniquement les informations nécessaires de ce champ dans l'expression normale et les produit.

Le code est comme suit.

MeCab_handler.py


import re, MeCab
import numpy as np
import jaconv
from pykakasi import kakasi

class MeCab_handler:
    """
    MeCab.Tagger('-Odump').parse((Arguments du constructeur))Et
Obtenez le résultat sous forme de ndarray unidimensionnel dans chaque méthode
    
    """
    def __init__(self, sentence):
        self.parse_result = MeCab.Tagger('-Odump').parse(sentence)

    def get_separated(self):
        """
Partage
        """
        tmp = np.array(re.findall('\n[0-9]+ ([^ ]*)', self.parse_result))
        return tmp[0:np.size(tmp)-1] #Couper EOS

    def get_words_basic(self):
        """
Forme basique
        """
        tmp = np.array(re.findall('\n[0-9]+ [^ ]* (?:[^,]*,){6,6}([^,]*)', self.parse_result))
        return tmp[0:np.size(tmp)-1]

    def get_POS(self, need_detail=False):
        """
Partie
Argument facultatif nécessaire_Si le détail est vrai
Sous-classe(Jusqu'à 3 étapes)Obtenez-le s'il y a
        """
        if need_detail:
            tmp = np.array(re.findall('\n[0-9]+ [^ ]* ([^,]*(?:,[^*,]+(?:,[^*,]+(?:,[^*,])?)?)?)', self.parse_result))
        else:
            tmp = np.array(re.findall('\n[0-9]+ [^ ]* ([^,]*)', self.parse_result))
            
        return tmp[0:np.size(tmp)-1] #Couper EOS

    def get_conjugation_type(self):
        """
Type d'utilisation
        """
        tmp = np.array(re.findall('\n[0-9]+ [^ ]* (?:[^,]*,){4,4}([^,]*)', self.parse_result), dtype='object')
        tmp = np.where(tmp=='*', None, tmp)
        return tmp[0:np.size(tmp)-1]

    def get_conjugation_form(self):
        """
Type d'utilisation
        """
        tmp = np.array(re.findall('\n[0-9]+ [^ ]* (?:[^,]*,){5,5}([^,]*)', self.parse_result))
        return tmp[0:np.size(tmp)-1]

    def get_katakana(self):
        """
Katakana
        """
        tmp = np.array(re.findall('\n[0-9]+ [^ ]* (?:[^,]*,){7,7}([^,]*)', self.parse_result))
        return tmp[0:np.size(tmp)-1]

    def get_hiragana(self):
        """
Hiragana
        """
        katakanas = self.get_katakana()
        hiraganas = np.zeros(0, dtype=katakanas.dtype)
        for katakana in katakanas:
            hiraganas = np.append(hiraganas, jaconv.kata2hira(katakana))
        return hiraganas
            
        
    def get_how_to_speak(self):
        """
Comment prononcer. avoir_hiragana et obtenez_Cela peut être différent du katakana, etc.
Romaji
        """
        tmp = np.array(re.findall('\n[0-9]+ [^ ]* (?:[^,]*,){8,8}([^ ]*)', self.parse_result))
        katakanas = tmp[0:np.size(tmp)-1]

        kakac = kakasi()
        kakac.setMode("K", "a") #Katakana à ascii
        kakac.setMode("r", "Hepburn") #Hebon est adopté pour Romaji
        conv = kakac.getConverter()

        romans = np.zeros(0, dtype='object')        
        for katakana in katakanas:
            romans = np.append(romans, conv.do(katakana))
        return romans

J'ai écrit la fonction dans le code source, mais c'est comme indiqué dans le tableau ci-dessous.

Méthode Exemple (print ('print (MeCab_handler (' Les États-Unis ont pleuré. Movie Doraemon" Nobita's Theory and Practice "). Method))
get_separated () [« National »est« en train de pleurer ». "" Film "" Doraemon "" "" "Nobita" "" "Théorie" "et" "Pratique" ""]
get_words_basic () ['National' 'est''cry' '". "" Film "" Doraemon "" "" "Nobita" "" "Théorie" "et" "Pratique" ""]
get_POS () `['Noun' 'Verbe auxiliaire' 'Verbe auxiliaire' 'Symbole'
get_POS (True) `['Nomenclature, nomenclature propre, région, un''auxiliaire, assistant de cas, verbe général' ', indépendance''verbe auxiliaire''symbole, ponctuation' "" Symbole, parenthèse ouverte "" Nez, nomenclature propre, nom de la personne, prénom "" Auxiliaire, syndiqué "" Nomenclature, général "" Auxiliaire, assistant de cas, général ""
get_conjugation_type () `[Aucun Aucun'Five-stage / Kakou Ionbin''Special / Ta'None Aucun Aucun Aucun Aucun Aucun Aucun Aucun Aucun Aucun]
get_conjugation_form () ['*' '*' 'Connexion continue''Forme de base' '*' '*' '*' '*' '*' '*' '*' * '*' * '*' * ' ]
get_katakana () ['Zenbei''Ga''Nai''Ta' '. "" Aiga "" Doraemon "" "" "Novita" "Non" "Lilon" "À" "Jissen" ""]
get_hiragana () ['Zenbei''n'est''pas''wa'. "" Eiga "" Doraemon "" "" "Extended" "" "Riron" "et" "Jissen" ""]
get_how_to_speak() ['zenbei' 'ga' 'nai' 'ta' '。' 'eiga' 'doraemon' '「' 'nobita' 'no' 'riron' 'to' 'jissen' '」']

Recommended Posts

J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
[Python] Récupérez les fichiers dans le dossier avec Python
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
[Python] A créé une classe pour jouer des vagues de péché en arrière-plan avec pyaudio
Obtenez des résultats au format dict avec Python psycopg2
Je veux travailler avec un robot en python.
J'ai fait un module en langage C qui filtre les images chargées par Python
Comment obtenir une liste de fichiers dans le même répertoire avec python
J'ai créé un package pour filtrer les séries chronologiques avec python
Comment utiliser la méthode __call__ dans la classe Python
J'ai essayé "Comment obtenir une méthode décorée en Python"
J'ai essayé de commencer avec Hy ・ Définir une classe
Comment obtenir la dernière (dernière) valeur d'une liste en Python
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
Je voulais résoudre le problème ABC164 A ~ D avec Python
J'ai fait une commande pour afficher un calendrier coloré dans le terminal
J'ai écrit une classe qui facilite l'écriture en spécifiant les paroles de la partie lors de l'utilisation de Mecab avec python
J'ai fait un programme de gestion de la paie en Python!
J'ai fait un compteur de caractères avec Python
Comment obtenir stacktrace en python
J'ai fait une carte hexadécimale avec Python
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait un simulateur de neurones avec Python
Envoie le résultat de l'analyse morphologique avec Mecab vers un navigateur WEB compatible avec le serveur Sakura / UTF-8
Une histoire qui n'a pas fonctionné lorsque j'ai essayé de me connecter avec le module de requêtes Python
Un mémo organisé en renommant les noms de fichiers dans le dossier avec python
J'ai créé une application Web en Python qui convertit Markdown en HTML
Comment obtenir la différence de date et d'heure en secondes avec Python
[Django] a créé un champ pour saisir des dates avec des nombres à 4 chiffres
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Je veux expliquer en détail la classe abstraite (ABCmeta) de Python
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'obtiens un UnicodeDecodeError en essayant de me connecter à oracle avec python sqlalchemy
Maintenance de l'environnement réalisée avec Docker (je souhaite post-traiter GrADS en Python
J'ai créé un script en python pour convertir des fichiers .md au format Scrapbox
J'obtiens une erreur Python No module nommée'encodings 'avec la commande aws
Un mémorandum parce que j'ai trébuché en essayant d'utiliser MeCab avec Python
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai fait une erreur en récupérant la hiérarchie avec MultiIndex of pandas
J'ai essayé de vérifier le résultat du test A / B avec le test du chi carré
Comment trier en spécifiant une colonne dans le tableau Python Numpy.
Que faire lorsque la version Python est ancienne dans Cloud 9 créée par une autre personne
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
J'ai fait une prévision météo de type bot avec Python.
J'ai créé une application graphique avec Python + PyQt5
Récupérer l'appelant d'une fonction en Python
Je veux créer une fenêtre avec Python