[PowerShell] Morphologische Analyse mit SudachiPy

Ich habe eine wunderbare morphologische Analyse namens SudachiPy gefunden und versucht, sie von meiner üblichen PowerShell aus aufzurufen.

Das fertige Produkt

202006212144302.png

Wenn Sie eine Zeichenfolge weiterleiten, wird die Zeichenfolge zurückgegeben, die Sie in der Eigenschaft line eingegeben haben, und das Objekt mit dem Analyseergebnis in der Eigenschaft parsd.

Code

Die Struktur besteht darin, dass der Hauptanalyseprozess in Python geschrieben und von PowerShell aufgerufen wird. Es ist auch möglich, Befehlszeilenargumente und Standardausgaben mit print für die Eingabe und Ausgabe von Zeichenfolgen zu verwenden. Da jedoch die folgenden Probleme auftreten, werden temporäre Dateien verwendet.

Verarbeitung auf der Python-Seite

Wenn Sie Python über Scoop erhalten, ist es einfacher, den Pfad um es herum gut zu handhaben. Installieren Sie als vorläufige Vorbereitung SudachiPy und fire mit pip.

pip install sudachipy
pip install fire

Der Prozess des "zeilenweisen morphologischen Analysierens des Inhalts einer Textdatei und des Ausgebens des Ergebnisses in eine andere Textdatei" wird in einer Funktion zusammengefasst und mit "fire.Fire ()" zu einem CLI-Tool gemacht.

sudachi_tokenizer.py


import fire
import re
from sudachipy import tokenizer
from sudachipy import dictionary

def main(input_file_path, output_file_path, ignore_paren = False):
    tokenizer_obj = dictionary.Dictionary().create()
    mode = tokenizer.Tokenizer.SplitMode.C

    with open(input_file_path, "r", encoding="utf_8_sig") as input_file:
        all_lines = input_file.read()
    lines = all_lines.splitlines()

    json_style_list = []
    for line in lines:
        if not line:
            json_style_list.append({"line": "", "parsed": []})
        else:
            if ignore_paren:
                target = re.sub(r"\(.+?\)|\[.+?\]|(.+?)|[.+?]", "", line)
            else:
                target = line
            tokens = tokenizer_obj.tokenize(target, mode)
            parsed = []
            for t in tokens:
                surface = t.surface()
                pos = t.part_of_speech()[0]
                c_type = t.part_of_speech()[4]
                c_form = t.part_of_speech()[5]
                yomi = t.reading_form()
                parsed.append({"surface": surface, "pos": pos, "yomi": yomi, "c_type": c_type, "c_form": c_form})
            json_style_list.append({"line": line, "parsed": parsed})
    with open(output_file_path, mode = "w", encoding="utf_8_sig") as output_file:
        output_file.write(str(json_style_list))

if __name__ == "__main__":
    fire.Fire(main)

Aus geschäftlichen Gründen habe ich oft den runden Paren () () und die Klammer [] [] übersprungen, also habe ich eine Option hinzugefügt.

Der Zeichencode der Eingabe- / Ausgabedatei wird aufgrund der später beschriebenen Spezifikationen von PowerShell an die Stückliste angehängt.

Verarbeitung auf der PowerShell-Seite

Sie können das Cmdlet von der Konsole aus verwenden, indem Sie die folgende ".ps1" -Datei im selben Verzeichnis wie die oben genannte "sudachi_tokenizer.py" erstellen und aus "$ PROFILE" lesen.

function Invoke-SudachiTokenizer {
    param (
        [switch]$ignoreParen
    )

    $outputTmp = New-TemporaryFile
    $inputTmp = New-TemporaryFile
    $input | Out-File -Encoding utf8 -FilePath $inputTmp.FullName #Mit Stückliste

    $sudachiPath = "{0}\sudachi_tokenizer.py" -f $PSScriptRoot
    $command = 'python -B "{0}" "{1}" "{2}"' -f $sudachiPath, $inputTmp.FullName, $outputTmp.FullName
    if ($ignoreParen) {
        $command += ' --ignore_paren=True'
    }

    Invoke-Expression -Command $command
    $parsed = Get-Content -Path $outputTmp.FullName -Encoding UTF8

    @($inputTmp, $outputTmp) | Remove-Item #Bereinigen Sie temporäre Dateien manuell

    return ($parsed | ConvertFrom-Json)
}

Wenn Sie Wörterbuchtypen in Python zu einer Liste kombinieren, hat diese das gleiche Format wie ein Array im JSON-Format, sodass Sie es mit "ConvertFrom-Json" in PowerShell in ein Objekt konvertieren können.

Wie ich im Kommentar geschrieben habe, ist es wichtig zu beachten, dass Stücklisten automatisch hinzugefügt werden, wenn Sie UTF8 im Parameter "-encoding" von PowerShell angeben.

Recommended Posts

[PowerShell] Morphologische Analyse mit SudachiPy
[Python] Morphologische Analyse mit MeCab
Text Mining mit Python ① Morphologische Analyse
Ich habe mit Mecab gespielt (morphologische Analyse)!
Python: Vereinfachte morphologische Analyse mit regulären Ausdrücken
Klassifizieren Sie Qiita-Posts ohne morphologische Analyse mit Tweet2Vec
Datenanalyse mit Python 2
Korbanalyse mit Spark (1)
Abhängigkeitsanalyse mit CaboCha
Sprachanalyse mit Python
Dynamische Analyse von Valgrind
Führen Sie eine Regressionsanalyse mit NumPy durch
Datenanalyse mit Python
Machen Sie mit LINE + Flask einen morphologischen Analyse-Bot
Sammeln von Informationen von Twitter mit Python (morphologische Analyse mit MeCab)
[Analyse des gemeinsamen Auftretens] Einfache Analyse des gemeinsamen Auftretens mit Python! [Python]
Python: Japanischer Text: Morphologische Analyse
Multiple Regressionsanalyse mit Keras
Venv Umgebung mit Windows Powershell
Emotionsanalyse von Python (word2vec)
Mit Pyradiomics erlernte Texturanalyse
Verarbeitung natürlicher Sprache 1 Morphologische Analyse
Planare Skelettanalyse mit Python
Muskel-Ruck-Analyse mit Python
Morphologische Analyse mit Igo + mecab-ipadic-neologd in Python (mit Ruby-Bonus)
Text Emotionsanalyse mit ML-Ask
Von der Einführung von JUMAN ++ bis zur morphologischen Analyse von Japanisch mit Python
Aktivieren Sie die virtuelle Umgebung von Anaconda mit PowerShell
Dreidimensionale Skelettstrukturanalyse mit Python
Impedanzanalyse (EIS) mit Python [impedance.py]
100 Sprachverarbeitungsklopfen 2020: Kapitel 4 (morphologische Analyse)
100 Sprachverarbeitung Knock 2020 Kapitel 4: Morphologische Analyse
So verwenden Sie virtualenv mit PowerShell
Hauptkomponentenanalyse mit Spark ML
■ [Google Colaboratory] Morphologische Analyse verwenden (janome)
Datenanalyse beginnend mit Python (Datenvisualisierung 1)
Logistische Regressionsanalyse Selbst erstellt mit Python
Datenanalyse beginnend mit Python (Datenvisualisierung 2)
100 Language Processing Knock 2015 Kapitel 4 Morphologische Analyse (30-39)
Klicken Sie mit PowerShell auf die ERS-API von ISE
Von der Vorbereitung der morphologischen Analyse mit Python unter Verwendung von Polyglot bis zur Teilwortmarkierung
[Lass uns mit Python spielen] Ziel ist die automatische Satzgenerierung ~ Morphologische Analyse durchführen ~