Получение "UnpicklingError: Неверный ключ загрузки, 'v'."при попытке запустить truecase в Python - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь запустить короткий фрагмент кода, который использует пакет Python с истинным регистром (он используется для восстановления заглавных букв в тексте), и я получаю UnpicklingError, потому что он загружает токенизатор из nltk.

Я не могу использовать nltk.download для установки отсутствующих файлов nltk из-за ограничений сервера в моей сети, поэтому я скачал каталог nltk_data прямо на свой компьютер. Похоже, что он может найти файл, но у него проблемы с открытием файла языкового выбора.

import truecase
truecase.get_true_case('hey, what is the weather in new york?')

In [4]: runfile('/Users/{me}/Downloads/truecase-0.0.4/testingtruecase.py', wdir='/Users/{me}/Downloads/truecase-0.0.4')
Reloaded modules: truecase, truecase.TrueCaser
Traceback (most recent call last):

  File "<ipython-input-4-82ea1175dde8>", line 1, in <module>
    runfile('/Users/{me}/Downloads/truecase-0.0.4/testingtruecase.py', wdir='/Users/{me}/Downloads/truecase-0.0.4')

  File "/anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 704, in runfile
    execfile(filename, namespace)

  File "/anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 108, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "/Users/{me}/Downloads/truecase-0.0.4/testingtruecase.py", line 10, in <module>
    truecase.get_true_case('hey, what is the weather in new york?')

  File "/Users/y99b/Downloads/truecase-0.0.4/truecase/__init__.py", line 7, in get_true_case
    return caser.get_true_case(sentence, out_of_vocabulary_token_option=out_of_vocabulary_token_option)

  File "/Users/{me}/Downloads/truecase-0.0.4/truecase/TrueCaser.py", line 80, in get_true_case
    tokens = nltk.word_tokenize(sentence)

  File "/anaconda3/lib/python3.7/site-packages/nltk/tokenize/__init__.py", line 143, in word_tokenize
    sentences = [text] if preserve_line else sent_tokenize(text, language)

  File "/anaconda3/lib/python3.7/site-packages/nltk/tokenize/__init__.py", line 104, in sent_tokenize
    tokenizer = load('tokenizers/punkt/{0}.pickle'.format(language))

  File "/anaconda3/lib/python3.7/site-packages/nltk/data.py", line 873, in load
    resource_val = pickle.load(opened_resource)

UnpicklingError: invalid load key, 'v'.

1 Ответ

1 голос
/ 18 июня 2019

Обнаружена проблема: файл pickle, с которым я работал, был недействительным, и на самом деле в нем не было нужных данных (он просто имел ссылку на github в реальном файле). Я нашел другую загрузку с правильным файлом english.pickle, и все работает просто отлично. Если у кого-то есть недопустимый ключ 'v', это может быть связано с вашим реальным файлом pickle.

...