Ich habe eine Klasse erstellt, um das Analyseergebnis von MeCab in ndarray mit Python zu erhalten

0. Wie benutzt man MeCab mit Python?

  1. Geben Sie Ihr Bestes, um MeCab zu installieren. ** Wenn Sie die 64-Bit-Version von Python (3.7 oder höher) unter Windows verwenden, lassen Sie sich nicht von alten Informationen täuschen **. Die Installation von MeCab mit mecab-python-windows funktioniert nicht. Stattdessen hat "pip install me cab" einwandfrei funktioniert.
  2. Import Me Cab. Beachten Sie, dass es sich nicht um "Import Mecab" handelt
  3. Lassen Sie es wie "print" (MeCab.Tagger ("-Owakati") aussehen.

Was Sie daraus erhalten, ist "eine lange Zeichenfolge", keine Liste oder ein Taple. Ein wenig unpraktisch.

1. Was ich getan habe

Ich habe eine Klasse mit Python gemacht. Wenn Sie im Konstruktor "MeCab.Tagger (" -Odump ")" ausführen, werden alle von MeCab abgerufenen Informationen im Feld gespeichert, und jede Methode ruft nur die erforderlichen Informationen aus diesem Feld im normalen Ausdruck ab und gibt sie aus.

Der Code lautet wie folgt.

MeCab_handler.py


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

class MeCab_handler:
    """
    MeCab.Tagger('-Odump').parse((Konstruktorargumente))Und
Erhalten Sie das Ergebnis als eindimensionales ndarray in jeder Methode
    
    """
    def __init__(self, sentence):
        self.parse_result = MeCab.Tagger('-Odump').parse(sentence)

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

    def get_words_basic(self):
        """
Grundform
        """
        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):
        """
Teil
Optionales Argument erforderlich_Wenn Detail wahr ist
Unterklasse(Bis zu 3 Stufen)Hol es dir, wenn es so ist
        """
        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] #Schneiden Sie EOS

    def get_conjugation_type(self):
        """
Nutzungsart
        """
        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):
        """
Nutzungsart
        """
        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):
        """
Wie auszusprechen. erhalten_Hiragana und bekommen_Es kann sich von Katakana usw. unterscheiden.
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 zu Ascii
        kakac.setMode("r", "Hepburn") #Hebon wird für Romaji adoptiert
        conv = kakac.getConverter()

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

Ich habe die Funktion in den Quellcode geschrieben, aber sie ist wie in der folgenden Tabelle gezeigt.

Methode Beispiel (print ('print (MeCab_handler (' Die Vereinigten Staaten haben geweint. Film Doraemon" Nobitas Theorie und Praxis "). Methode))
get_separated () `['National''is''crying' '. "" Film "" Doraemon "" "" Nobita "" "" Theorie "" und "" Praxis "" "]"
get_words_basic () `['National''is''cry' '". "" Film "" Doraemon "" "" Nobita "" "" Theorie "" und "" Praxis "" "]"
get_POS () `['Nomen''Auxiliary' Verb''Auxiliary Verb''Symbol''Nomenclature''Nomenclature''Symbol''Nomenclature''Auxiliary
get_POS (True) `['Nomenklatur, Eigennomenklatur, Region, ein' 'Hilfsmittel, Fallassistent, allgemein' 'Verb, Unabhängigkeit' 'Hilfsverb' Symbol, Interpunktion '' Substantiv, allgemein ' "" Symbol, offene Klammer "" Nase, richtige Nomenklatur, Name der Person, Vorname "" Assistent, gewerkschaftlich organisierte "" Nomenklatur, allgemein "" Assistent, Fallassistent, allgemein "" Nomen, Sa-Hen-Verbindung ""
get_conjugation_type () [Keine Keine'Five-Stage / Kakou Ionbin''Special / Ta'None Keine Keine Keine Keine Keine Keine Keine Keine Keine Keine]
get_conjugation_form () ['*' '*' 'Kontinuierliche Verbindung' 'Grundform' '*' '*' '*' '*' '*' '*' '*' * '*' * '*' * '*' ]
get_katakana () ['Zenbei''Ga''Nai''Ta'. "Aiga" "Doraemon" "" Novita "" No "" Lilon "" To "" Jissen ""] "
get_hiragana () ['Zenbei''is''not''wa'. "" Eiga "" Doraemon "" "" Extended "" "" Riron "" und "" Jissen ""]]
get_how_to_speak() ['zenbei' 'ga' 'nai' 'ta' '。' 'eiga' 'doraemon' '「' 'nobita' 'no' 'riron' 'to' 'jissen' '」']

Recommended Posts

Ich habe eine Klasse erstellt, um das Analyseergebnis von MeCab in ndarray mit Python zu erhalten
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
[Python] Erstellt eine Klasse, um mit pyaudio Sinuswellen im Hintergrund zu spielen
Mit Python psycopg2 erhalten Sie Ergebnisse im Diktatformat
Ich möchte mit einem Roboter in Python arbeiten.
Ich habe ein Modul in C-Sprache erstellt, das von Python geladene Bilder filtert
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Verwendung der Methode __call__ in der Python-Klasse
Ich habe versucht "Wie man eine Methode in Python dekoriert"
Ich habe versucht, mit Hy ・ Define a class zu beginnen
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
Ich habe mit Tkinter of Python ein Puzzlespiel (wie) gemacht
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python einen Daemon erstellt
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
Ich habe auch versucht, die Funktionsmonade und die Zustandsmonade mit dem Generator in Python nachzuahmen
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich wollte das ABC164 A ~ D-Problem mit Python lösen
Ich habe den Befehl gegeben, einen farbenfrohen Kalender im Terminal anzuzeigen
Ich habe eine Klasse geschrieben, die das Schreiben erleichtert, indem ich die Teiltexte spezifiziere, wenn ich Mecab mit Python verwende
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich habe mit Python einen Zeichenzähler erstellt
Wie bekomme ich Stacktrace in Python?
Ich habe mit Python eine Hex-Map erstellt
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe mit Python einen Neuronensimulator erstellt
Gibt das Ergebnis der morphologischen Analyse mit Mecab an einen WEB-Browser aus, der mit Sakura Server / UTF-8 kompatibel ist
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
Ein Memo, das durch Umbenennen der Dateinamen im Ordner mit Python organisiert wird
Ich habe eine Webanwendung in Python erstellt, die Markdown in HTML konvertiert
So ermitteln Sie mit Python den Unterschied zwischen Datum und Uhrzeit in Sekunden
[Django] Erstellt ein Feld zur Eingabe von Daten mit 4-stelligen Zahlen
Ich möchte das Ergebnis von "Zeichenfolge" .split () in Python stapelweise konvertieren
Ich möchte die abstrakte Klasse (ABCmeta) von Python im Detail erklären
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich erhalte einen UnicodeDecodeError, wenn ich versuche, mit Python sqlalchemy eine Verbindung zu Oracle herzustellen
Mit Docker durchgeführte Umgebungswartung (Ich möchte GrADS in Python nachbearbeiten
Ich habe ein Skript in Python erstellt, um MDD-Dateien in das Scrapbox-Format zu konvertieren
Ich erhalte einen Python No-Modul mit dem Namen 'Encodings' mit dem Befehl aws
Ein Memorandum, weil ich beim Versuch, MeCab mit Python zu verwenden, gestolpert bin
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe einen Fehler beim Abrufen der Hierarchie mit MultiIndex von Pandas gemacht
Ich habe versucht, das Ergebnis des A / B-Tests mit dem Chi-Quadrat-Test zu überprüfen
Sortieren durch Angabe einer Spalte im Python Numpy-Array.
Was tun, wenn die Python-Version in Cloud 9 von einer anderen Person erstellt wurde?
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
Ich habe mit Python eine Bot-Wettervorhersage gemacht.
Ich habe eine GUI-App mit Python + PyQt5 erstellt
Holen Sie sich den Aufrufer einer Funktion in Python
Ich möchte mit Python ein Fenster erstellen