Mecab / Cabocha / KNP sur Python + Windows

Chose que tu veux faire

Lorsque vous utilisez Mecab / Cabocha / KNP sous Windows + python, si vous essayez d'utiliser "import mecab" ou "import Cabocha", la recompilation, la spécification UTF-8, etc. seront gênantes. Par conséquent, utilisez l'appel externe Sjift-Jis + pour activer l'installation par défaut.

environnement

La source

** Définissez homefldr n'importe où ** (PostScript 2017/12/17: prend également en charge KNP)

import os
import subprocess
from tempfile import NamedTemporaryFile

class JapaneseDependencyRelation:
    def __init__(self, encoding=None):
        if encoding is None:
            encoding = 'utf-8'
        # Mecab,Encodage Cabocha(Suivez pendant l'installation)
        self.text_encoding = encoding
        #Emplacement de création du fichier TMP
        self.homefldr = 'C:\\tmp'

    def get_encode_original(self, j_txt):
        hoge = []
        for ch in j_txt:
            try:
                hoge.append(ch.encode(self.text_encoding))
            except:
                raise UnicodeEncodeError

        return ''.join(hoge)

    def do_mecab(self, j_txt):
        if os.path.exists(self.homefldr) == False:
            raise FileNotFoundError

        try:
            with NamedTemporaryFile(delete=False, dir=self.homefldr) as temp:
                try:
                    j_txt = j_txt.encode(self.text_encoding)
                except:
                    j_txt = self.get_encode_original(j_txt)
                temp.write(j_txt)
        except Exception as e:
            print(e)
            raise UnicodeTranslateError
        else:
            command = ['mecab']
            process = subprocess.Popen(command, stdin=open(temp.name, 'r'), stdout=subprocess.PIPE)
            output = process.communicate()[0]
        finally:
            temp.close()
            os.unlink(temp.name)
        return output.decode(self.text_encoding)

    def do_cabocha(self, j_txt, fmt=None):
        if fmt is None:
            fmt = "xml"

        if os.path.exists(self.homefldr) == False:
            raise FileNotFoundError

        try:
            with NamedTemporaryFile(delete=False, dir=self.homefldr) as temp:
                try:
                    j_txt = j_txt.encode(self.text_encoding)
                except:
                    j_txt = self.get_encode_original(j_txt)
                temp.write(j_txt)
        except Exception as e:
            print(e)
            raise UnicodeTranslateError
        else:
            '''
            -f, --output-format=TYPE  set output format style
                                        0 - tree(default)
                                        1 - lattice
                                        2 - tree + lattice
                                        3 - XML
            '''
            #argument cabocha
            if (fmt == "xml"):
                command = ['cabocha', '-f', '3']
            elif (fmt == "tree"):
                command = ['cabocha', '-f', '2']
            else:
                command = ['cabocha', '-f', '1']

            process = subprocess.Popen(command, stdin=open(temp.name, 'r'), stdout=subprocess.PIPE)
            output = process.communicate()[0]
        finally:
            temp.close()
            os.unlink(temp.name)

        return output.decode(self.text_encoding)

    def do_knp(self, j_txt, fmt=None, level=None, output=None):
        """
Spécifier l'affichage des résultats d'analyse(fmt)
            -onglet Affichage tabulaire(tab)
            -Affichage au format tabulaire avec une sortie moins simple(simple)
            -td Affichage correspondant à "Outil d'affichage général des résultats d'analyse" 1(td)
            -tree (default)Affichage par arborescence(tree)
            -Affichage tabulaire des clauses bnsttab(tab1)
            -Affichage de l'arborescence des clauses bnsttree(tree1)
            -affichage au format de liste sexp(sexp)
Spécifier le niveau d'analyse(level)
            -bnst Convertit une chaîne morphologique en chaîne de clauses(1)
            -dpnd De plus, effectuez une analyse des dépendances entre les clauses(2)
            -case (default)De plus, analysez la relation de cas(3)
            -anaphora En outre, analysez la relation de correspondance(4)
            -ne De plus, l'expression unique est analysée.(5)
Spécification des informations de sortie du résultat de l'analyse(output)
            -normal (default)Afficher uniquement le résultat final de l'analyse(1)
            -detail Possibilité de dépendance Exemple de ligne, matrice de similarité entre clauses, etc. sont également affichées.(2)
            -debug Affichage d'informations plus détaillées au milieu de l'analyse(3)
        """

        def set_argument(f, l, o):
            arg = ['juman|knp']
            if f == "tab":
                arg.append("-tab")
            elif f == "td":
                arg.append("-td")
            elif f == "tree":
                arg.append("-tree")
            elif f == "tab1":
                arg.append("-bnsttab")
            elif f == "tree1":
                arg.append("-bnsttree")
            elif f == "sexp":
                arg.append("-sexp")
            else:
                arg.append("-simple")

            if l == 1:
                arg.append("-bnst")
            elif l == 2:
                arg.append("-dpnd")
            elif l == 3:
                arg.append("-case")
            elif l == 5:
                arg.append("-ne")
            else:
                arg.append("-anaphora")

            if o == 2:
                arg.append("-detail")
            elif o == 3:
                arg.append("-debug")
            else:
                arg.append("-normal")
            return arg

        if fmt is None:
            fmt = "tab"
        if level is None:
            level = 4
        if output is None:
            output = 1

        if os.path.exists(self.homefldr) == False:
            raise FileNotFoundError

        try:
            with NamedTemporaryFile(delete=False, dir=self.homefldr) as temp:
                try:
                    j_txt = j_txt.encode(self.text_encoding)
                except:
                    j_txt = self.get_encode_original(j_txt)
                temp.write(j_txt)
        except Exception as e:
            print(e)
            raise UnicodeTranslateError
        else:
            command = set_argument(fmt, level, output)
            process = subprocess.Popen(command, shell=True, stdin=open(temp.name, 'r'), stdout=subprocess.PIPE)
            output = process.communicate()[0]
        finally:
            temp.close()
            #Supprimer le fichier TMP
            os.unlink(temp.name)

        return output.decode(self.text_encoding)

if __name__ == "__main__":
    operation_japanese = JapaneseDependencyRelation('shift-jis')
    text = 'Le client d'à côté est un client qui mange souvent des kakis'
    # Mecab
    print(operation_japanese.do_mecab(text))
    # Cabocha
    print(operation_japanese.do_cabocha(text, "xml"))
    print(operation_japanese.do_cabocha(text, "tree"))
    print(operation_japanese.do_cabocha(text, "word"))
    # KNP
    print(operation_japanese.do_knp(text, "tab"))
    print(operation_japanese.do_knp(text, "td"))
    print(operation_japanese.do_knp(text, "simple"))
    print(operation_japanese.do_knp(text, "tree"))
    print(operation_japanese.do_knp(text, "tab1"))
    print(operation_japanese.do_knp(text, "tree1"))
    print(operation_japanese.do_knp(text, "sexp"))

Recommended Posts

Mecab / Cabocha / KNP sur Python + Windows
python basic ② sous windows
Installez python sur Windows
Activer Python virtualenv sous Windows
Exécutez Openpose sur Python (Windows)
Développement Python + Kivy sous Windows
Sphinx-autobuild (0.5.2) sous Windows7, Python 3.5.1, Sphinx 1.3.5
Créer un environnement Python sur Windows
Construire un environnement Python avec Windows
J'ai exécuté python sur Windows
[Python] [Chainer] [Windows] Installer Chainer sous Windows
Utiliser Python sur Windows (PyCharm)
Mémo de construction de l'environnement Python sur Windows 10
Python 3.6 sous Windows ... et vers Xamarin.
Installation de Kivy sur Windows10 64 bits Python3.5
Construction de l'environnement Anaconda Python sous Windows 10
Mettez MeCab dans "Windows 10; Python3.5 (64 bits)"
installation de python2.7 dans un environnement Windows 32 bits
Remarques sur l'utilisation de MeCab depuis Python
Installez xgboost (version python) sur Windows
Installez Python sur Windows + pip + virtualenv
Installez Pytorch sur Blender 2.90 python sous Windows
Lier Modelica et Python sous Windows
python + django + scikit-learn + mecab (1) avec heroku
Windows10: Installation de la bibliothèque MeCab pour python
Installation de Kivy-Designer sur Windows10 64 bits Python3.5
python + django + scikit-learn + mecab (2) avec heroku
Installer l'environnement de développement Python sur Windows 10
Fichier CGI Python créé sous Windows
Premiers pas avec Python 3.8 sous Windows
Reproduire la recherche à une touche avec Python 3.7.3. (Windows 10)
Remarques sur l'utilisation d'OpenCV avec Windows10 Python 3.8.3.
De Python à l'utilisation de MeCab (et CaboCha)
Exécutez le servo avec Python sur ESP32 (Windows)
Environnement de création de module d'extension Python 2.7, 3.4, 3.5 sous Windows
[Kivy] Comment installer Kivy sur Windows [Python]
Virtualenv ne fonctionne pas sur Python 3.5 (Windows)
Utiliser sans installer python 2.x sous Windows
Analyse des tweets avec Python, Mecab et CaboCha
Rendre pyknp (JUMAN, KNP) disponible dans Windows
Mettez Cabocha 0.68 dans Windows et essayez d'analyser la dépendance avec Python
twitter avec python3
environnement windows python
Installation de Python (Windows)
python sur mac
MeCab de Python
Mettre la liaison MeCab pour Python sur Windows, Mac et Linux avec pip
Python sur Windbg
Installez et exécutez Python3.5 + NumPy + SciPy sur Windows 10
Mettez MicroPython sur Windows pour exécuter ESP32 sur Python
Installez Python3, numpy, pandas, matplotlib, etc. sous Windows
(Windows) Causes et solutions de contournement pour UnicodeEncodeError dans Python 3
Créez simplement un environnement d'exécution Python 3 sous Windows
Remarques sur l'installation de Python3 et l'utilisation de pip sous Windows7
Installez OpenCV 4.0 et Python 3.7 sur Windows 10 avec Anaconda
Comment exécuter MeCab sur Ubuntu 18.04 LTS Python
[Python] Comment installer OpenCV sur Anaconda [Windows]
[Note] Installation de Python 3.6 + α sur Windows et RHEL
Installation de TensorFlow sur Windows Easy pour les débutants en Python