Я использую NLTK для выполнения кластеризации kmeans в моем текстовом файле, в котором каждая строка рассматривается как документ. Так, например, мой текстовый файл выглядит примерно так:
belong finger death punch <br>
hasty <br>
mike hasty walls jericho <br>
jägermeister rules <br>
rules bands follow performing jägermeister stage <br>
approach
Вот демонстрационный код, который я пытаюсь запустить:
import sys
import numpy
from nltk.cluster import KMeansClusterer, GAAClusterer, euclidean_distance
import nltk.corpus
from nltk import decorators
import nltk.stem
stemmer_func = nltk.stem.EnglishStemmer().stem
stopwords = set(nltk.corpus.stopwords.words('english'))
@decorators.memoize
def normalize_word(word):
return stemmer_func(word.lower())
def get_words(titles):
words = set()
for title in job_titles:
for word in title.split():
words.add(normalize_word(word))
return list(words)
@decorators.memoize
def vectorspaced(title):
title_components = [normalize_word(word) for word in title.split()]
return numpy.array([
word in title_components and not word in stopwords
for word in words], numpy.short)
if __name__ == '__main__':
filename = 'example.txt'
if len(sys.argv) == 2:
filename = sys.argv[1]
with open(filename) as title_file:
job_titles = [line.strip() for line in title_file.readlines()]
words = get_words(job_titles)
# cluster = KMeansClusterer(5, euclidean_distance)
cluster = GAAClusterer(5)
cluster.cluster([vectorspaced(title) for title in job_titles if title])
# NOTE: This is inefficient, cluster.classify should really just be
# called when you are classifying previously unseen examples!
classified_examples = [
cluster.classify(vectorspaced(title)) for title in job_titles
]
for cluster_id, title in sorted(zip(classified_examples, job_titles)):
print cluster_id, title
(который также можно найти здесь )
Я получаю такую ошибку:
Traceback (most recent call last):
File "cluster_example.py", line 40, in
words = get_words(job_titles)
File "cluster_example.py", line 20, in get_words
words.add(normalize_word(word))
File "", line 1, in
File "/usr/local/lib/python2.7/dist-packages/nltk/decorators.py", line 183, in memoize
result = func(*args)
File "cluster_example.py", line 14, in normalize_word
return stemmer_func(word.lower())
File "/usr/local/lib/python2.7/dist-packages/nltk/stem/snowball.py", line 694, in stem
word = (word.replace(u"\u2019", u"\x27")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 13: ordinal not in range(128)
Что здесь происходит?
python
python-2.7
user2602812
источник
источник
decode
метод остается предпочтительным способом декодирования байтовой строки в строку Unicode. (Хотя типы в моем ответе не подходят для Python 3 - для Python 3 мы пытаемся преобразовать изbytes
в,str
а не изstr
вunicode
.)У меня это отлично работает.
Вы можете добавить третий параметр кодировки, чтобы убедиться, что тип кодировки - utf-8.
Примечание: этот метод отлично работает в Python3, я не пробовал его в Python2.7.
источник
TypeError: 'encoding' is an invalid keyword argument for this function
TypeError: 'encoding' is an invalid keyword argument for this function
Это отлично работает:import io with io.open(file_path, 'r', encoding="utf-8") as f: for line in f: do_something(line)
У меня возникла проблема с кодировкой терминала. Добавление UTF-8 в .bashrc решило проблему:
Не забудьте после этого перезагрузить .bashrc:
источник
export LC_ALL=C.UTF-8
Ubuntu 18.04.3 и Python 3.6.8. В противном случае это решило мою проблему, спасибо.Вы также можете попробовать это:
источник
В Ubuntu 18.04 с использованием Python3.6 я решил проблему, выполнив оба:
и если вы запускаете инструмент из командной строки:
Обратите внимание, что если вы используете Python2.7, вы должны справиться с этим по-другому. Сначала вам нужно установить кодировку по умолчанию:
а затем для загрузки файла, который вы должны использовать
io.open
для установки кодировки:Вам все еще нужно экспортировать env
источник
Я получил эту ошибку при попытке установить пакет python в контейнер Docker. Для меня проблема заключалась в том, что у образа докера не было
locale
настроенного файла. Добавление следующего кода в Dockerfile решило для меня проблему.источник
Чтобы найти ЛЮБУЮ и ВСЕ ошибки, связанные с Unicode ... Используя следующую команду:
Нашел мою в
Используя
shed
, я нашел оскорбительную последовательность. Оказалось, это ошибка редактора.источник
Вы можете попробовать это перед использованием
job_titles
строки:источник
Для python 3 кодировка по умолчанию будет «utf-8». В базовой документации предлагаются следующие шаги: https://docs.python.org/2/library/csv.html#csv-examples в случае возникновения каких-либо проблем.
Создать функцию
Затем используйте функцию внутри читателя, например,
источник
python3x или выше
загрузить файл в байтовый поток:
body = '' для строк в open ('website / index.html', 'rb'): decodedLine = lines.decode ('utf-8') body = body + decodedLine.strip () return body
использовать глобальную настройку:
import io import sys sys.stdout = io.TextIOWrapper (sys.stdout.buffer, encoding = 'utf-8')
источник
Используйте
open(fn, 'rb').read().decode('utf-8')
вместоopen(fn).read()
источник