3
votes

Maillet Gensim CalledProcessError: retourne un statut de sortie différent de zéro

J'obtiens une erreur en essayant d'accéder au maillet des gensims dans les ordinateurs portables Jupyter. J'ai le fichier spécifié «maillet» dans le même dossier que mon ordinateur portable, mais je n'arrive pas à y accéder. J'ai essayé de le router à partir du lecteur C mais j'obtiens toujours la même erreur. Veuillez aider :)

import os
from gensim.models.wrappers import LdaMallet

#os.environ.update({'MALLET_HOME':r'C:/Users/new_mallet/mallet-2.0.8/'})

mallet_path = 'mallet' # update this path

ldamallet = gensim.models.wrappers.LdaMallet(mallet_path, corpus=bow_corpus, num_topics=20, id2word=dictionary)

result = (ldamallet.show_topics(num_topics=3, num_words=10,formatted=False))
for each in result:
    print (each)

Erreur Mallet CalledProcessError

entrez la description de l'image ici


5 commentaires

Y avait-il une autre sortie d'erreur, avant la trace de la pile Python? Que faire si, immédiatement après avoir obtenu l'erreur, vous essayez vous-même la ligne de commande affichée ( mallet import-file ..." ) - d'autres informations sont-elles affichées?


@gojomo merci d'avoir contacté je l'apprécie. J'ai essayé la commande que vous avez répertoriée et j'obtiens toujours la même erreur :(


@gojomo Dans l'invite de commande, cette commande renvoie «maillet» n'est pas reconnu comme une commande interne ou externe, un programme utilisable ou un fichier de commandes.


Cela suggère que l'exécutable mallet nécessaire n'est pas installé ou ne peut pas être trouvé à partir de l'endroit où l'interpréteur Python, et vous, lorsque vous réessayez manuellement, vous exécutez. Etes-vous sûr qu'il est installé? Pouvez-vous corriger votre variable mallet_path comme étant un chemin valide vers l'exécutable mallet ?


@gojomo Pour autant que je sache, mallet est installé bien que je n'arrive pas à trouver un exécutable. J'ai même écrit des variables d'environnement de chemin et triplé mon chemin.


5 Réponses :


3
votes

Mettez à jour le chemin vers:

notepad mallet.bat
java
C:\Program Files\Java\jdk-12\bin\java
dir /OD
cd %userdir%
cd %userpath%
cd\
cd users
cd your_username
cd appdata\local\temp\2
dir /OD

et modifiez le bloc-notes mallet.bat dans le dossier mallet 2.0.8 pour:

@echo off

rem This batch file serves as a wrapper for several
rem  MALLET command line tools.

if not "%MALLET_HOME%" == "" goto gotMalletHome

echo MALLET requires an environment variable MALLET_HOME.
goto :eof

:gotMalletHome

set MALLET_CLASSPATH=C:\mallet\mallet-2.0.8\class;C:\mallet\mallet-2.0.8\lib\mallet-deps.jar
set MALLET_MEMORY=1G
set MALLET_ENCODING=UTF-8

set CMD=%1
shift

set CLASS=
if "%CMD%"=="import-dir" set CLASS=cc.mallet.classify.tui.Text2Vectors
if "%CMD%"=="import-file" set CLASS=cc.mallet.classify.tui.Csv2Vectors
if "%CMD%"=="import-svmlight" set CLASS=cc.mallet.classify.tui.SvmLight2Vectors
if "%CMD%"=="info" set CLASS=cc.mallet.classify.tui.Vectors2Info
if "%CMD%"=="train-classifier" set CLASS=cc.mallet.classify.tui.Vectors2Classify
if "%CMD%"=="classify-dir" set CLASS=cc.mallet.classify.tui.Text2Classify
if "%CMD%"=="classify-file" set CLASS=cc.mallet.classify.tui.Csv2Classify
if "%CMD%"=="classify-svmlight" set CLASS=cc.mallet.classify.tui.SvmLight2Classify
if "%CMD%"=="train-topics" set CLASS=cc.mallet.topics.tui.TopicTrainer
if "%CMD%"=="infer-topics" set CLASS=cc.mallet.topics.tui.InferTopics
if "%CMD%"=="evaluate-topics" set CLASS=cc.mallet.topics.tui.EvaluateTopics
if "%CMD%"=="prune" set CLASS=cc.mallet.classify.tui.Vectors2Vectors
if "%CMD%"=="split" set CLASS=cc.mallet.classify.tui.Vectors2Vectors
if "%CMD%"=="bulk-load" set CLASS=cc.mallet.util.BulkLoader
if "%CMD%"=="run" set CLASS=%1 & shift

if not "%CLASS%" == "" goto gotClass

echo Mallet 2.0 commands: 
echo   import-dir        load the contents of a directory into mallet instances (one per file)
echo   import-file       load a single file into mallet instances (one per line)
echo   import-svmlight   load a single SVMLight format data file into mallet instances (one per line)
echo   info              get information about Mallet instances
echo   train-classifier  train a classifier from Mallet data files
echo   classify-dir      classify data from a single file with a saved classifier
echo   classify-file     classify the contents of a directory with a saved classifier
echo   classify-svmlight classify data from a single file in SVMLight format
echo   train-topics      train a topic model from Mallet data files
echo   infer-topics      use a trained topic model to infer topics for new documents
echo   evaluate-topics   estimate the probability of new documents given a trained model
echo   prune             remove features based on frequency or information gain
echo   split             divide data into testing, training, and validation portions
echo   bulk-load         for big input files, efficiently prune vocabulary and import docs
echo Include --help with any option for more information


goto :eof

:gotClass

set MALLET_ARGS=

:getArg

if "%1"=="" goto run
set MALLET_ARGS=%MALLET_ARGS% %1
shift
goto getArg

:run

"C:\Program Files\Java\jdk-12\bin\java" -ea -Dfile.encoding=%MALLET_ENCODING% -classpath %MALLET_CLASSPATH% %CLASS% %MALLET_ARGS%

:eof

en ligne de commande, ces commandes étaient utiles pour comprendre ce qui se passait:

mallet_path = 'C:/mallet/mallet-2.0.8/bin/mallet.bat'

le problème vient du fait que java n'est pas installé correctement ou que le chemin ne comprend pas java et que le chemin de classe du maillet n'est pas défini correctement. Plus d'informations ici: https://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html . Cela a résolu mon erreur, j'espère que cela aide quelqu'un d'autre :)


0 commentaires

1
votes

J'ai le même problème. Ce que j'ai fait, c'est changer l'emplacement du dossier du maillet en c: // new_mallet pour que cela fonctionne bien

    import os
    os.environ.update({'MALLET_HOME': r'C:/new_mallet/mallet-2.0.8/'})
    mallet_path = 'C:/new_mallet/mallet-2.0.8/bin/mallet'  # update this path
    ldamallet = gensim.models.wrappers.LdaMallet(mallet_path, corpus=corpus, num_topics=10, id2word=id2word)


0 commentaires

1
votes

Dans Jupyter Notebook avec Python, j'exécute un

conda uninstall gensim
conda install gensim

dans cmd en tant qu'administrateur et redémarré mon noyau. A travaillé comme un charme après avoir passé des heures horribles à chercher en ligne.


0 commentaires

0
votes

Assurez-vous d'avoir installé le Java Developers Kit ( JDK ).

Le mérite en revient à cette autre réponse

Après avoir installé le JDK , les codes suivants pour le maillet LDA ont fonctionné à merveille!

import os
from gensim.models.wrappers import LdaMallet

os.environ.update({'MALLET_HOME':r'C:/mallet/mallet-2.0.8/'})
mallet_path = r'C:/mallet/mallet-2.0.8/bin/mallet.bat'

lda_mallet = LdaMallet(
        mallet_path,
        corpus = corpus_bow,
        num_topics = n_topics,
        id2word = dct,
    )


0 commentaires

0
votes

Pour moi, ce n'était pas un problème d'importation ou de chemin.

J'ai passé des heures à essayer de le résoudre. J'ai essayé cette solution et rien n'a fonctionné.

En regardant un précédent appel réussi que j'ai passé à LDA Mallet, j'ai remarqué que certains paramètres n'étaient pas définis, puis je l'ai fait comme ceci:

gensim.models.wrappers.LdaMallet (mallet_path = mallet_path, corpus = corpus, num_topics = num_topics, id2word = id2word, prefix = 'temp_file_', workers = 4)

J'espère vraiment que cela vous aidera. Trouver une solution à ce problème était une douleur.


0 commentaires