Stellen Sie pyknp (JUMAN, KNP) in Windows zur Verfügung

Inhaltsverzeichnis

  1. Entwicklungsumgebung
  2. Laden Sie verschiedene Software herunter
  3. Bestätigen Sie an der Eingabeaufforderung
  4. Pyknp-Installation
  5. Verwendungstest
  6. Programmumschreiben
  7. Referenz / beiseite

Ich hoffe, Sie finden es hilfreich, bitte geben Sie Ihr Bestes, um es einzurichten!

1. Entwicklungsumgebung

Umgebung *Windows10 *Python-3.7.5 64bit **Terminal? ** ** ** *Command prompt

2. Laden Sie verschiedene Software herunter

Laden Sie zuerst JUMAN und KNP herunter 1.JUMAN

Ungefähr der dritte oben in der Download-Spalte, ** JUMAN Ver.7.0 (Windows 64-Bit-Version) (mit Installationsprogramm; 8.330.604 Byte) ** Es gibt. Laden Sie es herunter, öffnen Sie es und fahren Sie mit der Installation fort image.png Die Einstellungen sollten in Ordnung sein ...

1.KNP

Suchen Sie auch in der Download-Spalte nach der folgenden und laden Sie sie herunter KNP Ver.4.11 (Windows 64-Bit-Version) (mit Installationsprogramm; 979.363.446 Byte) Irgendwie ist die Größe ! / Also dauert es einige Zeit Wenn Sie es herunterladen und öffnen, wird die Installation gestartet. Befolgen Sie die Anweisungen.

Stellen Sie PATH ein

Pfad muss von Ihnen selbst festgelegt werden Ich habe auf [** hier **] verwiesen (https://www.atmarkit.co.jp/ait/articles/1805/11/news035.html). Sie können sich einfach mit der Systemseite anlegen

  1. Öffnen Sie die Systemeigenschaften durch Suchen oder ähnliches
  2. Erweiterte Einstellungen
  3. [Einstellungen] unten
  4. [Pfad] in den Systemeinstellungen
  5. [Bearbeiten]
  6. Fügen Sie [C: \ Programme \ juman] hinzu.
  7. Fügen Sie [C: \ Programme \ knp] hinzu. 8.[OK] Einige Benutzer möchten möglicherweise neu starten. Ich habe es nicht gesehen, bis ich neu gestartet habe

Nebenbei: pyknp verwendet JUMAN ++ und KNP, aber da es schwierig war, JUMAN unter Windows zu verwenden, werde ich die alte Version von JUMAN verwenden. Die Entsprechung dazu steht unten

3. Bestätigen Sie an der Eingabeaufforderung

Öffnen Sie zuerst eine Eingabeaufforderung (alle können mit Strg + C geschlossen werden). ** Bestätigungsmethode 1: Geben Sie juman ein **

C:~\> juman
Geben Sie einen Text ein
(Erfolgsgeschichte)
Etwas etwas irgendwie befürworten 8* 0 * 0 * 0 "Repräsentative Notation:etwas/etwas 標準:Was/Was+Oder/Oder"
Satz Bunsho Satz Nase 6 Gewöhnliche Nase 1* 0 * 0 "Repräsentative Notation:Satz/Bunsho Kategorie:Abstrakt"
Zu Hilfsmittel 9 Fallhilfsmittel 1* 0 * 0 NIL
Eingabe Nyuryoku Eingabe Nominal 6 Sahen Nomen 2* 0 * 0 "Repräsentative Notation:Eingang/Nyuryoku Kategorie:Abstrakte Domain:Wissenschaft / Technologie-Rebellion:Substantiv-サ変Substantiv:Ausgabe/Shutsuryoku"
EOS

** Bestätigungsmethode 2: Echo Text | Enter juman **

C:~\>echo Geben Sie einen Text ein| juman
Etwas etwas irgendwie befürworten 8* 0 * 0 * 0 "Repräsentative Notation:etwas/etwas 標準:Was/Was+Oder/Oder"
Satz Bunsho Satz Nase 6 Gewöhnliche Nase 1* 0 * 0 "Repräsentative Notation:Satz/Bunsho Kategorie:Abstrakt"
Zu Hilfsmittel 9 Fallhilfsmittel 1* 0 * 0 NIL
Eingabe Nyuryoku Eingabe Nominal 6 Sahen Nomen 2* 0 * 0 "Repräsentative Notation:Eingang/Nyuryoku Kategorie:Abstrakte Domain:Wissenschaft / Technologie-Rebellion:Substantiv-サ変Substantiv:Ausgabe/Shutsuryoku"
  \  \Spezial 1 Leerzeichen 6* 0 * 0 NIL
EOS

** Bestätigungsmethode 3: Geben Sie juman | knp ein **

C:\~> juman | knp
Geben Sie einen Text ein
# S-ID:1 KNP:4.11-CF1.1 DATE:2020/11/23 SCORE:-27.41598
Etwas ──┐
Satz ──┤
Eingang
EOS

** (Fehlerbeispiel) **

'juman'Ist ein interner oder externer Befehl,
Wird nicht als funktionsfähiges Programm oder Batchdatei erkannt.

4. Pyknp-Installation

Arbeiten im VisualStudioCode-Terminal installiere mit pip install pyknp

Terminal


C:~\>pip install pyknp

Wenn Sie nicht können (in meinem Fall scheint es, dass es ein Zeichencodefehler war) https://qiita.com/Nidhog-tm/items/c7e9d759ce1a0f5c85c6 Verwenden Sie UTF-8 gemäß ** Danach werden wahrscheinlich irgendwo verstümmelte Zeichen auftreten. Deaktivieren Sie daher> Englisch> Japanisch und beheben Sie das Problem. **

5. Verwendungstest

Vielleicht werde ich einen absoluten Fehler werfen. Von hier aus werden wir dieses Skript verwenden, um nach Fehlern zu suchen. (Referenz: https://pyknp.readthedocs.io/en/latest/)

test.py


# coding: utf-8
from __future__ import unicode_literals # It is not necessary when you use python3.
from pyknp import Juman
jumanpp = Juman()   # default is JUMAN++: Juman(jumanpp=True). if you use JUMAN, use Juman(jumanpp=False)
result = jumanpp.analysis("Die Annäherung an den Shimogamo-Schrein war dunkel.")
for mrph in result.mrph_list(): #Greifen Sie auf jede Morphologie zu
    print("Überschrift:%s,lesen:%s,Prototyp:%s,Teil:%s,Teil細分類:%s,Nutzungsart:%s,Nutzungsart:%s,Semantische Information:%s,Repräsentative Notation:%s" \
            % (mrph.midasi, mrph.yomi, mrph.genkei, mrph.hinsi, mrph.bunrui, mrph.katuyou1, mrph.katuyou2, mrph.imis, mrph.repname))

### (Erfolgsgeschichte) ###
Überschrift:Shimogamo,lesen:Shimogamo,Prototyp:Shimogamo,Teil:Substantiv,Teil細分類:Ortsname,Nutzungsart:*,Nutzungsart:*,Semantische Information:Automatische Erfassung:Wikipedia WikipediaOrtsname,Repräsentative Notation:
Überschrift:Schrein,lesen:Jinja,Prototyp:Schrein,Teil:Substantiv,Teil細分類:普通Substantiv,Nutzungsart:*,Nutzungsart:*,Semantische Information:Repräsentative Notation:Schrein/Jinja ドメイン:Kultur / Kunst Kategorie:Ort-Ende des Ortsnamens der Einrichtung, Repräsentative Notation:Schrein/Jinja
Überschrift:von,lesen:von,Prototyp:von,Teil:Partikel,Teil細分類:接続Partikel,Nutzungsart:*,Nutzungsart:*,Semantische Information:NIL,Repräsentative Notation:
Überschrift:Ansatz,lesen:Sando,Prototyp:Ansatz,Teil:Substantiv,Teil細分類:普通Substantiv,Nutzungsart:*,Nutzungsart:*,Semantische Information:Repräsentative Notation:Ansatz/Sando ドメイン:Kultur / Kunst Kategorie:Ort-Einrichtung, Repräsentative Notation:Ansatz/Sando
Überschrift:Ist,lesen:Ist,Prototyp:Ist,Teil:Partikel,Teil細分類:副Partikel,Nutzungsart:*,Nutzungsart:*,Semantische Information:NIL,Repräsentative Notation:
Überschrift:Es war dunkel,lesen:Es war einfach,Prototyp:dunkel,Teil:Adjektiv,Teil細分類:*,Nutzungsart:イAdjektivアウオ段,Nutzungsart:T-Form,Semantische Information:Repräsentative Notation:dunkel/Über, Repräsentative Notation:dunkel/Über
Überschrift:。,lesen:。,Prototyp:。,Teil:Besondere,Teil細分類:Phrase,Nutzungsart:*,Nutzungsart:*,Semantische Information:NIL,Repräsentative Notation:

6. Programmumschreiben

Ich habe hier wirklich einen Tag gebraucht. Aber wenn Sie die Ursache kennen, können Sie in ein paar Minuten gehen ... (Geben Sie die Zeit zurück) Der Ort zum Umschreiben ist die .py-Datei in der pyknp-Datei.

1.knp.py

knp.py


# (Zeile 29)
#Schreiben Sie den Inhalt neu
jumancommand='jumanpp'Zu'juman'Zu
jumanpp     =Setzen Sie True auf False

#Vor dem Umschreiben
def __init__(self, command='knp', server=None, port=31000, timeout=60,
                 option='-tab', rcfile='', pattern=r'EOS',
                 jumancommand='jumanpp', jumanrcfile='',
                 jumanoption='', jumanpp=True):
#Nach dem Umschreiben
def __init__(self, command='knp', server=None, port=31000, timeout=60,
                 option='-tab', rcfile='', pattern=r'EOS',
                 jumancommand='juman', jumanrcfile='',
                 jumanoption='', jumanpp=False):

2.juman.py

knp.py


# (27. Zeile)
#Schreiben Sie den Inhalt neu
command = 'jumanpp'Zu'juman'Zu
jumanpp =Setzen Sie True auf False

#Vor dem Umschreiben
    def __init__(self, command='jumanpp', server=None, port=32000, timeout=30,
                 option='', rcfile='', ignorepattern='',
                 pattern=r'^EOS$', jumanpp=True):
#Nach dem Umschreiben
    def __init__(self, command='juman', server=None, port=32000, timeout=30,
                 option='', rcfile='', ignorepattern='',
                 pattern=r'^EOS$', jumanpp=False):

3.process.py

process.py


# (Zeile 72)
#Inhalt umschreiben 1
signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(self.process_timeout)
# ↓
alarm = threading.Timer(self.process_timeout, alarm_handler)
alarm.start()

#Inhalt umschreiben 2
self.process.stdin.write(sentence.encode('utf-8') + six.b('\n'))
# ↓ (utf-8 bis cp932)
self.process.stdin.write(sentence.encode('cp932') + six.b('\n'))

#Inhalt umschreiben 3
line = self.process.stdout.readline().rstrip().decode('utf-8')
# ↓ (utf-8 bis cp932)
line = self.process.stdout.readline().rstrip().decode('cp932')

#Inhalt umschreiben 4
signal.alarm(0)
# ↓
alarm.cancel()


#Nach dem Umschreiben
    def query(self, sentence, pattern):
        assert(isinstance(sentence, six.text_type))

        def alarm_handler(signum, frame):
            raise subprocess.TimeoutExpired(self.process_command, self.process_timeout)
#Punkt 1 umschreiben
        # signal.signal(signal.SIGALRM, alarm_handler)
        # signal.alarm(self.process_timeout)
        alarm = threading.Timer(self.process_timeout, alarm_handler)
        alarm.start()
        result = ""
        try:
#Punkt 2 umschreiben
            # self.process.stdin.write(sentence.encode('utf-8') + six.b('\n'))
            self.process.stdin.write(sentence.encode('cp932') + six.b('\n'))
            self.process.stdin.flush()
            while True:
#Punkt 3 umschreiben
                # line = self.process.stdout.readline().rstrip().decode('utf-8')
                line = self.process.stdout.readline().rstrip().decode('cp932')
                if re.search(pattern, line):
                    break
                result = "%s%s\n" % (result, line)
        finally:
#Punkt 4 umschreiben
            # signal.alarm(0)
            alarm.cancel()
        return result

Übrigens, wenn Sie den Referenzmechanismus erklären, ** Siehe juman für knp ** (Wenn der zu diesem Zeitpunkt verwendete Befehlsname nicht jumanpp (JUMAN ++), sondern juman lautet, tritt ein Fehler auf.) ** juman see process ** (Der zu diesem Zeitpunkt verwendete Befehl muss ebenfalls juman sein.) ** Informationen zum Prozess finden Sie im Unterprozess (der die Terminalbefehle ausführt) ** (Wenn Sie hier verweisen, verwenden die meisten Fenster den Zeichencode 'cp932'. Die Verwendung von 'utf-8' verursacht also ein Problem. Beheben Sie das Problem. Außerdem wird der Alarm für Windows neu geschrieben. Es scheint, dass das Subprozesssystem nicht für die Verwendung der Powershell ausgelegt ist, die das Terminal von Windows ist. Es ist problematisch.) Es ist eine Beziehung geworden

7. Referenz / beiseite

Referenz: JUMAN >>> http://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN KNP >>> http://nlp.ist.i.kyoto-u.ac.jp/?KNP pyKNP >>> http://nlp.ist.i.kyoto-u.ac.jp/?PyKNP Referenzseite: ** Über pyKNP >>> https://pyknp.readthedocs.io/en/latest/** [** Informationen zum Unterprozess >>> https://docs.python.org/ja/3.5/library/asyncio-subprocess.html ](https://docs.python.org/ja/3.5/library/asyncio -subprocess.html) [ Eine gute Seite, die ich beim Schreiben eines Artikels gefunden habe >>> http://chuckischarles.hatenablog.com/entry/2019/09/12/150505 **](http://chuckischarles.hatenablog.com/ Eintrag / 2019/09/12/150505)

Was ich bisher versucht habe

Schließlich wollte ich eine Abhängigkeitsanalyse durchführen, also habe ich an dieser gearbeitet

  1. Es gibt eine Abhängigkeitsanalyse namens ** CaboCha **, aber anscheinend unterstützt sie ** 64bit ** nicht, also 32bit. Ich gab auf, weil es mühsam war. Also benutze ich dieses KNP. (Eine weitere erforderliche morphologische Analyse MeCab ist wahrscheinlich einfach mit pip zu installieren.)

  2. pyknp unterstützt ursprünglich ** juman ++ **, aber es gibt kein ** Installationsprogramm **, Es wird problematisch sein, wenn Sie es nicht unter Linux tun (Für Windows sind die Pfadeinstellungen, Umgebungseinstellungen, utf-8 und andere Einstellungen extrem schwierig. Ich konnte es nicht tun.)

  3. Es gibt ein Modul namens ** Subprozess **, das ursprünglich in Python installiert wurde, aber dies ist einer der schwierigen Punkte, die es für Linux gemacht hat. Zum Beispiel scheint es, dass die Windows-Shell nur verwendet werden kann, wenn ** Shell = 'True' **, aber ich habe aufgegeben, weil diese Einstellung gefährlich ist und wie ** nicht empfohlen ** aussieht.

  4. Das Konvertieren mit utf-8 scheint die Anzahl der Zeichen beim Konvertieren eines Strings in Bytes (?) Aufgrund der obigen Spezifikationen zu verringern. Daher ist diesmal die Konvertierungsmethode nicht die mit utf-8, sondern die mit cp932.

Da dies mein erster Beitrag ist, möchte ich etwaige Fehler korrigieren. Ich würde mich freuen, wenn Sie mich kontaktieren könnten. Ich hoffe dieser Artikel ist für jemanden !!!

Vielen Dank an die Leute im Labor, die juman, knp, pyknp entwickelt haben. Wir möchten diese Gelegenheit nutzen, um Ihnen zu danken.

Recommended Posts

Stellen Sie pyknp (JUMAN, KNP) in Windows zur Verfügung
Stellen Sie iPython unter OSGeo4W zur Verfügung
Stellen Sie die Anaconda-Umgebung in Windows über die Eingabeaufforderung zur Verfügung
[Python] Pip unter macOS verfügbar machen
Pip auf Mac verfügbar machen (easy_install ist veraltet)
Stellen Sie DHT11 mit Raspeye + Python zur Verfügung (Hinweis)
Pylint unter Windows Atom
Linux (WSL) unter Windows
Verwenden Sie pyvenv unter Windows
Anaconda auf Windows Terminal
Installieren Sie Anaconda unter Windows 10
Python Basic ② in Windows
Installieren Sie Python unter Windows
Installieren Sie pycuda unter Windows10
Erstellen Sie TensorFlow unter Windows
Probieren Sie FEniCS unter Windows aus!
Erstellen Sie XGBoost unter Windows
Installieren Sie pygraphviz unter Windows 10
Verwenden Sie Ansible unter Windows
Versuchen Sie Poerty unter Windows
Installieren Sie Chainer 1.5.0 unter Windows
Verwenden Sie QuTiP unter Windows
Verwenden Sie pip unter Windows