J'espère que vous le trouverez utile, veuillez faire de votre mieux pour le configurer!
environnement *Windows10 *Python-3.7.5 64bit **Terminal? ** ** *Command prompt
Téléchargez d'abord JUMAN et KNP 1.JUMAN
Environ le troisième à partir du haut de la colonne de téléchargement, ** JUMAN Ver.7.0 (version Windows 64 bits) (avec programme d'installation; 8 330 604 octets) ** Il y a. Téléchargez-le, ouvrez-le et passez à l'installation Les réglages devraient être corrects ...
Recherchez également celui ci-dessous dans la colonne de téléchargement et téléchargez-le KNP Ver.4.11 (version Windows 64 bits) (avec programme d'installation; 979 363 446 octets) D'une manière ou d'une autre, la taille est ! / Cela prend donc un certain temps Si vous le téléchargez et l'ouvrez, l'installation commencera, alors suivez-la.
le chemin doit être défini par vous-même J'ai fait référence à ** ici **. Il suffit de jouer avec le côté système
A part: pyknp utilise JUMAN ++ et KNP, mais comme il était gênant d'utiliser JUMAN sous Windows, j'utiliserai l'ancienne version de JUMAN. La correspondance de ceci est écrite en bas
Ouvrez d'abord une invite de commande (tout peut être fermé avec ctrl + C) ** Méthode de confirmation 1: saisissez juman **
C:~\> juman
Entrez du texte
(Succès)
Quelque chose que quelque chose préconise en quelque sorte 8* 0 * 0 * 0 "Notation représentative:Quelque chose/Quelque chose 標準:quoi/Quoi+Ou/Ou"
Phrase Bunsho Phrase Nez 6 Nez ordinaire 1* 0 * 0 "Notation représentative:Phrase/Catégorie Bunsho:Abstrait"
Vers deux auxiliaires 9 boîtier auxiliaire 1* 0 * 0 NIL
Entrée Nyuryoku Entrée Nominal 6 Sahen Nom 2* 0 * 0 "Notation représentative:contribution/Catégorie Nyuryoku:Domaine abstrait:Rébellion scientifique / technologique:nom-サ変nom:production/Shutsuryoku"
EOS
** Méthode de confirmation 2: echo Some text | Enter juman **
C:~\>echo Entrez du texte| juman
Quelque chose que quelque chose préconise en quelque sorte 8* 0 * 0 * 0 "Notation représentative:Quelque chose/Quelque chose 標準:quoi/Quoi+Ou/Ou"
Phrase Bunsho Phrase Nez 6 Nez ordinaire 1* 0 * 0 "Notation représentative:Phrase/Catégorie Bunsho:Abstrait"
Vers deux auxiliaires 9 boîtier auxiliaire 1* 0 * 0 NIL
Entrée Nyuryoku Entrée Nominal 6 Sahen Nom 2* 0 * 0 "Notation représentative:contribution/Catégorie Nyuryoku:Domaine abstrait:Rébellion scientifique / technologique:nom-サ変nom:production/Shutsuryoku"
\ \Spécial 1 blanc 6* 0 * 0 NIL
EOS
** Méthode de confirmation 3: entrez juman | knp **
C:\~> juman | knp
Entrez du texte
# S-ID:1 KNP:4.11-CF1.1 DATE:2020/11/23 SCORE:-27.41598
Quelque chose ──┐
Phrase ──┤
contribution
EOS
** (exemple d'échec) **
'juman'Est une commande interne ou externe,
Non reconnu comme programme opérationnel ou fichier de commandes.
Travailler dans le terminal VisualStudioCode installer avec pip installer pyknp
Terminal
C:~\>pip install pyknp
Si vous ne pouvez pas, (dans mon cas, il semble que ce soit une erreur de code de caractère) https://qiita.com/Nidhog-tm/items/c7e9d759ce1a0f5c85c6 Utilisez UTF-8 selon ** Après cela, des caractères déformés se produiront probablement quelque part, alors décochez> Anglais> Japonais et corrigez-le **
Peut-être que je vais lancer une erreur absolue. De là, nous utiliserons ce script pour vérifier les erreurs. (Référence: 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("L'approche du sanctuaire Shimogamo était sombre.")
for mrph in result.mrph_list(): #Accéder à chaque morphologie
print("Titre:%s,en train de lire:%s,Prototype:%s,Partie:%s,Partie細分類:%s,Type d'utilisation:%s,Type d'utilisation:%s,Information sémantique:%s,Notation représentative:%s" \
% (mrph.midasi, mrph.yomi, mrph.genkei, mrph.hinsi, mrph.bunrui, mrph.katuyou1, mrph.katuyou2, mrph.imis, mrph.repname))
### (Succès) ###
Titre:Shimogamo,en train de lire:Shimogamo,Prototype:Shimogamo,Partie:nom,Partie細分類:Nom du lieu,Type d'utilisation:*,Type d'utilisation:*,Information sémantique:Acquisition automatique:Wikipedia WikipediaNom du lieu,Notation représentative:
Titre:Tombeau,en train de lire:Jinja,Prototype:Tombeau,Partie:nom,Partie細分類:普通nom,Type d'utilisation:*,Type d'utilisation:*,Information sémantique:Notation représentative:Tombeau/Jinja ドメイン:Catégorie Culture / Arts:endroit-Fin du nom de lieu de l'établissement, Notation représentative:Tombeau/Jinja
Titre:de,en train de lire:de,Prototype:de,Partie:Particule,Partie細分類:接続Particule,Type d'utilisation:*,Type d'utilisation:*,Information sémantique:NIL,Notation représentative:
Titre:Approche,en train de lire:Sando,Prototype:Approche,Partie:nom,Partie細分類:普通nom,Type d'utilisation:*,Type d'utilisation:*,Information sémantique:Notation représentative:Approche/Sando ドメイン:Catégorie Culture / Arts:endroit-Établissement, Notation représentative:Approche/Sando
Titre:Est,en train de lire:Est,Prototype:Est,Partie:Particule,Partie細分類:副Particule,Type d'utilisation:*,Type d'utilisation:*,Information sémantique:NIL,Notation représentative:
Titre:Il faisait sombre,en train de lire:C'était facile,Prototype:sombre,Partie:adjectif,Partie細分類:*,Type d'utilisation:イadjectifアウオ段,Type d'utilisation:Forme en T,Information sémantique:Notation représentative:sombre/À propos, Notation représentative:sombre/À propos
Titre:。,en train de lire:。,Prototype:。,Partie:Spécial,Partie細分類:Phrase,Type d'utilisation:*,Type d'utilisation:*,Information sémantique:NIL,Notation représentative:
Cela m'a vraiment pris une journée ici. Mais si tu connais la cause, tu peux y aller dans quelques minutes ... (Rendre l'heure) L'endroit à réécrire est le fichier .py dans le fichier pyknp.
knp.py
# (Ligne 29)
#Réécrire le contenu
jumancommand='jumanpp'À'juman'À
jumanpp =Définir True sur False
#Avant de réécrire
def __init__(self, command='knp', server=None, port=31000, timeout=60,
option='-tab', rcfile='', pattern=r'EOS',
jumancommand='jumanpp', jumanrcfile='',
jumanoption='', jumanpp=True):
#Après réécriture
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
# (27e ligne)
#Réécrire le contenu
command = 'jumanpp'À'juman'À
jumanpp =Définir True sur False
#Avant de réécrire
def __init__(self, command='jumanpp', server=None, port=32000, timeout=30,
option='', rcfile='', ignorepattern='',
pattern=r'^EOS$', jumanpp=True):
#Après réécriture
def __init__(self, command='juman', server=None, port=32000, timeout=30,
option='', rcfile='', ignorepattern='',
pattern=r'^EOS$', jumanpp=False):
process.py
# (Ligne 72)
#Réécrire le contenu 1
signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(self.process_timeout)
# ↓
alarm = threading.Timer(self.process_timeout, alarm_handler)
alarm.start()
#Réécrire le contenu 2
self.process.stdin.write(sentence.encode('utf-8') + six.b('\n'))
# ↓ (utf-8 à cp932)
self.process.stdin.write(sentence.encode('cp932') + six.b('\n'))
#Réécrire le contenu 3
line = self.process.stdout.readline().rstrip().decode('utf-8')
# ↓ (utf-8 à cp932)
line = self.process.stdout.readline().rstrip().decode('cp932')
#Réécrire le contenu 4
signal.alarm(0)
# ↓
alarm.cancel()
#Après réécriture
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)
#Réécrire le point 1
# signal.signal(signal.SIGALRM, alarm_handler)
# signal.alarm(self.process_timeout)
alarm = threading.Timer(self.process_timeout, alarm_handler)
alarm.start()
result = ""
try:
#Réécrire le point 2
# 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:
#Réécrire le point 3
# 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:
#Réécrire le point 4
# signal.alarm(0)
alarm.cancel()
return result
Au fait, si vous expliquez le mécanisme de référence, ** Voir juman pour knp ** (Si le nom de commande utilisé à ce moment n'est pas jumanpp (JUMAN ++) mais juman, une erreur se produira) ** juman voir processus ** (La commande utilisée à ce moment doit également être juman) ** Pour le processus, reportez-vous au sous-processus (celui qui exécute les commandes du terminal) ** (Lorsque vous vous référez ici, la plupart des fenêtres utilisent le code de caractère "cp932", donc utiliser "utf-8" pose un problème, donc corrigez-le. De plus, l'alarme est réécrite pour Windows. Il semble que le système de sous-processus n'est pas conçu pour utiliser le PowerShell, qui est le terminal de Windows. C'est gênant.) C'est devenu une relation
référence: 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 Site de référence: ** À propos de pyKNP >>> https://pyknp.readthedocs.io/en/latest/** [** À propos du sous-processus >>> https://docs.python.org/ja/3.5/library/asyncio-subprocess.html ](https://docs.python.org/ja/3.5/library/asyncio -subprocess.html) [ Un bon site que j'ai trouvé en écrivant un article >>> http://chuckischarles.hatenablog.com/entry/2019/09/12/150505 **](http://chuckischarles.hatenablog.com/ entrée / 2019/09/12/150505)
Enfin, je voulais faire une analyse de dépendance, j'ai donc travaillé sur celle-ci
Il existe une analyse des dépendances appelée ** CaboCha **, mais apparemment elle ne prend pas en charge ** 64 bits **, donc c'est 32 bits. J'ai abandonné parce que c'était difficile à faire. J'utilise donc ce KNP. (Une autre analyse morphologique obligatoire MeCab est probablement facile à installer avec pip)
pyknp prend en charge à l'origine ** juman ++ **, mais il n'y a pas de ** installateur **, Ce sera gênant si vous ne le faites pas sous Linux (pour Windows, le réglage du chemin, le réglage de l'environnement, utf-8 et d'autres paramètres sont extrêmement difficiles. Je ne pouvais pas le faire.)
Il existe un module appelé ** subprocess ** qui est initialement installé en python, mais c'est l'un des points difficiles qu'il a été fait pour Linux. Par exemple, il semble que le shell Windows ne peut pas être utilisé à moins que ** Shell = 'True' **, mais j'ai abandonné car ce paramètre est dangereux et ressemble à ** non recommandé **.
La conversion avec utf-8 semble réduire le nombre de caractères lors de la conversion d'une chaîne en octets (?) En raison des spécifications ci-dessus. Par conséquent, cette fois, la méthode de conversion n'était pas celle utilisant utf-8, mais celle utilisant cp932.
Puisqu'il s'agit de mon premier message, j'aimerais corriger toute erreur, je vous serais donc reconnaissant si vous pouviez me contacter. J'espère que cet article est pour quelqu'un !!!
Merci beaucoup aux personnes du laboratoire qui ont développé juman, knp, pyknp. Nous aimerions profiter de cette occasion pour vous remercier.
Recommended Posts