Échec de la commande Java au NLTK Stanford POS Tagger
je vous demande votre aide et votre aide pour résoudre l'erreur de" Java Command Fails " qui n'arrête pas de lancer chaque fois que j'essaie de taguer un corpus arabe avec une taille de 2 mégaoctets. J'ai cherché sur le web et sur la liste de diffusion de stanford POS tagger. Cependant, je n'ai pas trouvé la solution. J'ai lu quelques billets sur des problèmes similaires à celui-ci, et il a été suggéré que la mémoire est épuisée. Je n'en suis pas sûr. J'ai encore 19 Go de mémoire libre. J'ai essayé toutes les solutions proposées, mais la même erreur continue de s'afficher.
j'ai une commande moyenne sur Python et une bonne commande sur Linux. J'utilise LinuxMint17 KDE 64-bit, Python3.4, Modèle NLTK alpha et Stanford POS tagger pour l'arabe . C'est mon code:
import nltk
from nltk.tag.stanford import POSTagger
arabic_postagger = POSTagger("/home/mohammed/postagger/models/arabic.tagger", "/home/mohammed/postagger/stanford-postagger.jar", encoding='utf-8')
print("Executing tag_corpus.py...n")
# Import corpus file
print("Importing data...n")
file = open("test.txt", 'r', encoding='utf-8').read()
text = file.strip()
print("Tagging the corpus. Please wait...n")
tagged_corpus = arabic_postagger.tag(nltk.word_tokenize(text))
si la taille du CORPUS est inférieure à 1MB ( = 100 000 mots), il n'y aura pas d'erreur. MAIS QUAND J'ESSAIE DE MARQUER 2MB CORPUS, ALORS LE MESSAGE D'ERREUR SUIVANT EST AFFICHÉ:
Traceback (most recent call last):
File "/home/mohammed/experiments/current/tag_corpus2.py", line 17, in <module>
tagged_lst = arabic_postagger.tag(nltk.word_tokenize(text))
File "/usr/local/lib/python3.4/dist-packages/nltk-3.0a3-py3.4.egg/nltk/tag/stanford.py", line 59, in tag
return self.batch_tag([tokens])[0]
File "/usr/local/lib/python3.4/dist-packages/nltk-3.0a3-py3.4.egg/nltk/tag/stanford.py", line 81, in batch_tag
stdout=PIPE, stderr=PIPE)
File "/usr/local/lib/python3.4/dist-packages/nltk-3.0a3-py3.4.egg/nltk/internals.py", line 171, in java
raise OSError('Java command failed!')
OSError: Java command failed!
j'ai l'intention de marquer 300 millions de mots à être utilisé dans mon projet de recherche de doctorat. Si je continue à marquer 100 000 mots à la fois, je vais devoir répéter la tâche 3000 fois. Ça va me tuer!
j'apprécie vraiment votre aide.
1 réponses
après vos lignes d'importation ajouter cette ligne:
nltk.internals.config_java(options='-xmx2G')
cela va augmenter la taille maximale de RAM que java permet à Stanford POS Tagger d'utiliser. Le '-xmx2G'
modifie la RAM maximale autorisée à 2 Go au lieu du 512 Mo par défaut.
Voir Quels sont les Xms et Xmx paramètres lors du démarrage des machines virtuelles? pour plus d'information
si vous êtes intéressé par la façon de déboguer votre code, continuez.
donc nous voyons que la commande échoue lors de la manipulation d'une énorme quantité de données. la première chose à regarder est comment le Java est initialisé dans NLTK avant D'appeler le tagger de Stanford, de https://github.com/nltk/nltk/blob/develop/nltk/tag/stanford.py#L19 :
from nltk.internals import find_file, find_jar, config_java, java, _java_options
nous voyons que le paquet nltk.internals
gère les différentes configurations et paramètres Java.
alors nous jetez un oeil à https://github.com/nltk/nltk/blob/develop/nltk/internals.py#L65 et nous voyons que la valeur no est ajoutée pour l'allocation de mémoire pour Java.