Quand j'essaye de décomposer morphologiquement une phrase japonaise de PyKNP en utilisant Human ++, j'obtiens cette erreur ...!
ValueError: invalid literal for int() with base 10: 'input'
(La méthode d'utilisation de Human et Juman ++ à partir de Python est omise)
File "/$HOME/.pyenv/versions/anaconda3-2019.03/lib/python3.6/site-packages/pyknp/
juman/morpheme.py", line 143, in _parse_spec
self.hinsi_id = int(parts[4])
ValueError: invalid literal for int() with base 10: 'input'
Pour le moment, quand je le recherche en fonction du message d'erreur
Il semble que les espaces demi-largeur et les caractères demi-largeur soient mauvais.
Remplacez donc tous les caractères demi-largeur par des caractères pleine largeur.
Même si j'ai corrigé tous les caractères demi-largeur en caractères pleine largeur, la même erreur a continué à apparaître. Apparemment, la cause est différente de la situation décrite dans l'article ci-dessus.
Je l'ai donc lancé sur pdb et vérifié le contenu de la variable parts
au moment de l'erreur ~~ Faites-le depuis le début ~~.
(Pdb) parts
['InvalidParameter:', 'byte', 'size', 'of', 'input', 'string', '(4302)', 'is', 'greater', 'than│(base)
', 'maximum', 'allowed', '(4096)']
(C'était à l'origine une spécification selon laquelle le contenu de l'erreur est inclus dans la liste qui contient le résultat de l'analyse lorsqu'une erreur se produit ...)
Apparemment ** la taille (nombre d'octets) de la chaîne d'entrée était trop grande **. ** La limite de la chaîne de caractères d'entrée semble être de 4096 octets au total **, il semble donc préférable de limiter la capacité à moins que cela.
J'étais en train de créer un ensemble de données à envoyer à BERT, mais une phrase trop longue est une passe! ~~ UTF-8 semble avoir un nombre d'octets différent selon le type de caractère, il est donc difficile de couper ~~
Détectez les instructions supérieures à 4 096 octets dans les conditions suivantes et prenez une solution de contournement.
(Split ou passer)
Il examine et compare le nombre d'octets dans la chaîne text
.
if len(text.encode('utf-8')) > 4096:
Cliquez ici pour savoir comment vérifier le nombre d'octets au lieu de la longueur des caractères dans une chaîne
La cause de l'erreur lors de l'utilisation de Human ++ de PyKNP est combinée avec l'article présenté ci-dessus.
était.