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)
5 Réponses :
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 :)
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)
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.
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, )
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.
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 variablemallet_path
comme étant un chemin valide vers l'exécutablemallet
?@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.