





Это связано с тем, что ваш домашний каталог для Mallet не настроен должным образом. Несмотря на то, что у вас есть путь к двоичному файлу, заданному как переменная, вы все равно должны определить переменную среды, которая содержит источник, где находится Mallet:
import os
from gensim.models.wrappers import LdaMallet
os.environ['MALLET_HOME'] = 'C:\\mallet\\mallet-2.0.8'
mallet_path = 'C:\\mallet\\mallet-2.0.8\\bin\\mallet'
ldamallet_test = gensim.models.wrappers.LdaMallet(mallet_path, corpus=bow_corpus_test, num_topics=20, id2word=dictionary_test)
Обратите внимание, что вам не нужно добавлять расширение .bat, так как Windows должна выполнить это изначально, поскольку она знает, что это пакетный файл. И последнее замечание: вы должны использовать двойную обратную косую черту (\\) для разделителя пути в Windows. Невыполнение этого требования в зависимости от используемой версии Windows может привести к неожиданному поведению. Если вы хотите избежать головной боли, попробуйте использовать os.path.join, который предоставит вам правильный разделитель пути независимо от ОС:
mallet_path = os.path.join('C:', 'mallet', 'mallet-2.0.8', 'bin', 'mallet')
Расширение файла «.bat» можно использовать при выполнении через оболочку CMD (например, используя
subprocess.Popenсshell=True), потому что оно находится в переменной средыPATHEXT. Иначе нельзя предположить. Это поведение оболочки, а не общее для Windows.CreateProcessWподдерживает выполнение пакетных сценариев напрямую через оболочкуComSpec, но необходимо включить расширение «.bat» или «.cmd». В противном случае он принимает только «.exe» в качестве расширения файла и пытается выполнить любой найденный файл как двоичный образ.