UnicodeDecodeError в учебнике по текстовым блобам

Я пытаюсь выполнить учебник TextBlob в Windows (используя оболочку Git Bash) с Python 3.3.

Я установил textblob и nltk, а также все зависимости.

Код Python:

from text.blob import TextBlob

wiki = TextBlob("Python is a high-level, general-purpose programming language.")
tags = wiki.tags

Я получаю следующую ошибку

Traceback (most recent call last):
File "textblob.py", line 4, in <module> 
  tags = wiki.tags
File "c:\Python33\lib\site-packages\text\decorators.py", line 18, in __get__ 
  value = obj.__dict__[self.func.__name__] = self.func(obj)
File "c:\Python33\lib\site-packages\text\blob.py", line 357, in pos_tags 
  for word, t in self.pos_tagger.tag(self.raw)
File "c:\Python33\lib\site-packages\text\taggers.py", line 40, in tag
  return pattern_tag(sentence, tokenize)
File "c:\Python33\lib\site-packages\text\en.py", line 115, in tag
  for sentence in parse(s, tokenize, True, False, False, False, encoding).split():
File "c:\Python33\lib\site-packages\text\en.py", line 99, in parse
  return parser.parse(unicode(s), *args, **kwargs)
File "c:\Python33\lib\site-packages\text\text.py", line 1213, in parse
  s[i] = self.find_tags(s[i], **kwargs)
File "c:\Python33\lib\site-packages\text\en.py", line 49, in find_tags
  return _Parser.find_tags(self, tokens, **kwargs)
File "c:\Python33\lib\site-packages\text\text.py", line 1161, in find_tags
  map = kwargs.get(     "map", None))
File "c:\Python33\lib\site-packages\text\text.py", line 967, in find_tags
  tagged.append([token, lexicon.get(token, i==0 and lexicon.get(token.lower()) or   None)])
File "c:\Python33\lib\site-packages\text\text.py", line 98, in get
  return self._lazy("get", *args)
File "c:\Python33\lib\site-packages\text\text.py", line 79, in _lazy
  self.load()
File "c:\Python33\lib\site-packages\text\text.py", line 367, in load
  dict.update(self, (x.split(" ")[:2] for x in _read(self._path) if x.strip()))
File "c:\Python33\lib\site-packages\text\text.py", line 367, in <genexpr>
  dict.update(self, (x.split(" ")[:2] for x in _read(self._path) if x.strip()))
File "c:\Python33\lib\site-packages\text\text.py", line 346, in _read
  for line in f:
File "c:\Python33\lib\encodings\cp1252.py", line 23, in decode
  return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 16: character maps to <undefined>

Есть идеи, что здесь не так? Добавление 'u' перед строкой не помогло.


person sgoldber    schedule 24.09.2013    source источник
comment
Я быстро просмотрел учебник, и он работал нормально на моем компьютере с OS X с использованием Python 3.3. Возможно, у вас есть старая версия TextBlob? Похоже, что аналогичная проблема была только что исправлена ​​и выпущена: github.com/sloria/TextBlob/issues/ 15   -  person Rachel Sanders    schedule 24.09.2013
comment
Неудачно. Я использую 0.6.3, который, как мне кажется, является последним. Я сделал pip --force-reinstall и заметил ошибку libyaml при установке pyyaml. Однако установка продолжалась, поэтому я не уверен, что это серьезная проблема.   -  person sgoldber    schedule 24.09.2013
comment
Продолжая возиться с этим, я просмотрел краткое руководство с главной страницы сайта nltk и наткнулся на очень похожая ошибка. Однако клонирование из основного репозитория на github решило проблему. Может быть, мне нужно попробовать что-то подобное с textblob.   -  person sgoldber    schedule 24.09.2013
comment
вы получаете сообщение об ошибке при попытке: sentence = "Python is a high-level, general-purpose programming language.".encode('utf8')   -  person alvas    schedule 25.09.2013
comment
Добавление этой строки не вызывает ошибки в этой строке.   -  person sgoldber    schedule 25.09.2013
comment
Я думаю, что проблема в text/_text.py строке 339 (в TextBlob 0.7.0). en-lexicon.txt, en-context.txt и en-entities.txt открываются без указания кодировки файлов, поэтому используется платформа по умолчанию (очевидно, cp1252 в вашем случае). Мне нужно будет посмотреть, в какой кодировке находятся эти текстовые файлы, и правильно открыть файлы. Проблема Github здесь. Спасибо, что сообщили об этом. А пока вы можете попробовать использовать NLTKTagger. Инструкции здесь   -  person Steve L    schedule 26.09.2013
comment
Хорошо, внес некоторые изменения в обработку кодирования. Можете ли вы попробовать установить версию для разработчиков и посмотреть, появится ли такая же ошибка? pip install -U git+https://github.com/sloria/TextBlob.git@dev   -  person Steve L    schedule 26.09.2013
comment
При новой установке от Steve L я получаю ту же ошибку, но она изменилась с позиции 16 на позицию 19.   -  person sgoldber    schedule 27.09.2013
comment
ХОРОШО. Я сделал еще одно изменение, чтобы файлы txt открывались в режиме utf8. Можешь попробовать еще раз? Кроме того, давайте продолжим это обсуждение здесь: github.com/sloria/TextBlob/issues/30   -  person Steve L    schedule 28.09.2013
comment
Просто чтобы быть полным здесь. Последнее изменение, внесенное Стивом Л., устраняет проблему.   -  person sgoldber    schedule 30.09.2013


Ответы (1)


Версия 0.7.1 исправляет эту проблему, а это значит, что пришло время

$ pip install -U textblob

Проблема заключалась в том, что файл en-lexicon.txt, используемый для маркировки частей речи, открывал файл с использованием кодировки платформы Windows по умолчанию, cp1252. В файле явно были символы, которые Python не мог декодировать из этой кодировки. Это было исправлено явным открытием файла в режиме utf-8.

person Steve L    schedule 30.09.2013