Я развертываю простое приложение Tkinter, которое заботится о том, чтобы обработать текстовый файл и вернуть текстовый файл с токенизированными словами.Основными компонентами являются Tkinter и NLTK.
После создания папки для сборки с помощью cx_Freeze я обнаружил несколько проблем.Когда я пытаюсь запустить полученный exe-файл на другом компьютере с установленной Windows, консоль показывает, что «пункт» недоступен.
Я попытался вставить следующий блок кода сразу после импорта nltk:
from tkinter import *
from tkinter.filedialog import askopenfilename
import os
import nltk
nltk.download('punkt') #HERE
nltk.download('stopwords') #ALSO HERE
import string
from collections import Counter
import win32com.client
from pywintypes import com_error
Это фрагмент кода импорта, и вот где он позже переходит в ошибку, во время выполнения:
pathToProc = self.originalFile.get()
sent_tokenizer = nltk.data.load('tokenizers/punkt/italian.pickle')
snt = nltk.stem.SnowballStemmer('italian')
it_stop_words = nltk.corpus.stopwords.words('italian') + ['\n', '\t', '']
trashes = it_stop_words + list(string.punctuation)
tokensTOT = []
try:
myDoc = word.Documents.Open(pathToProc, False, False, True)
sentences = sent_tokenizer.tokenize(word.ActiveDocument.Range().Text)
myDoc.Close()
del myDoc
for sentence in sentences:
tokensTOT = tokensTOT + nltk.word_tokenize(sentence)
except com_error:
print('IMPOSSIBILE DECIFRARE IL FILE')
Ниже приведен код, который я использовал для создания папки сборки, предназначенной для копирования и вставки на все компьютеры Windows.
from cx_Freeze import setup, Executable
import os, sys
os.environ['TCL_LIBRARY'] = r'C:\Users\AOUP\AppData\Local\Programs\Python\Python37-32\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\Users\AOUP\AppData\Local\Programs\Python\Python37-32\tcl\tk8.6'
include_files = [r"C:\Users\AOUP\AppData\Local\Programs\Python\Python37-32\DLLs\tcl86t.dll",
r"C:\Users\AOUP\AppData\Local\Programs\Python\Python37-32\DLLs\tk86t.dll",
r"C:"]
packages = ["os",
"tkinter",
"nltk",
"string",
"collections",
"win32com.client",
"pywintypes",
"socket"]
setup(
name = 'Bea Tokenizer',
version = "2.5",
description = "Simple Tkinker tokenizer window",
options = {"build_exe": {
'packages': packages,
'include_files': include_files,
'include_msvcr': True,
}},
executables = [Executable("beaTokenizer.py", base = None)]
)
Несмотря на то, что введены nltk.download('punkt')
иnltk.download('stopwords')
ошибка на этот раз другая:
[nltk_data] Error loading punkt: <urlopen error unknown url type:
[nltk_data] https>
[nltk_data] Error loading stopwords: <urlopen error unknown url type:
[nltk_data] https>
Интересно, почему nltk так плохо себя внедряет, несмотря на то, что она широко используется и постоянно развивается.
Надеюсь, я 'Я ясно и правильно объяснил ответ.