Ich hoffe, Sie finden es hilfreich, bitte geben Sie Ihr Bestes, um es einzurichten!
Umgebung *Windows10 *Python-3.7.5 64bit **Terminal? ** ** ** *Command prompt
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 Die Einstellungen sollten in Ordnung sein ...
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.
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
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
Ö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.
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. **
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:
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.
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):
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):
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
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)
Schließlich wollte ich eine Abhängigkeitsanalyse durchführen, also habe ich an dieser gearbeitet
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.)
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.)
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.
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