Estoy usando NLTK para realizar la agrupación de kmeans en mi archivo de texto en el que cada línea se considera como un documento. Entonces, por ejemplo, mi archivo de texto es algo como esto:
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
Ahora el código de demostración que intento ejecutar es este:
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
(que también se puede encontrar aquí )
El error que recibo es este:
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)
¿Que está sucediendo aquí?
python
python-2.7
user2602812
fuente
fuente
decode
método sigue siendo la forma preferida de decodificar una cadena de bytes en una cadena Unicode. (Sin embargo, los tipos en mi respuesta no son los adecuados para Python 3 - para Python 3, estamos tratando de convertir debytes
astr
en lugar destr
aunicode
.)Esto funciona bien para mi.
Puede agregar un tercer parámetro de codificación para asegurarse de que el tipo de codificación sea 'utf-8'
Nota: este método funciona bien en Python3, no lo probé en Python2.7.
fuente
TypeError: 'encoding' is an invalid keyword argument for this function
TypeError: 'encoding' is an invalid keyword argument for this function
Esto funciona bien:import io with io.open(file_path, 'r', encoding="utf-8") as f: for line in f: do_something(line)
Para mí hubo un problema con la codificación del terminal. Agregar UTF-8 a .bashrc resolvió el problema:
No olvides volver a cargar .bashrc después:
fuente
export LC_ALL=C.UTF-8
en Ubuntu 18.04.3 y Python 3.6.8. De lo contrario, esto resolvió mi problema, gracias.Puedes probar esto también:
fuente
Cuando en Ubuntu 18.04 usando Python3.6 , he resuelto el problema haciendo ambas cosas:
y si está ejecutando la herramienta como línea de comando:
Tenga en cuenta que si está en Python2.7 tiene que hacer para manejar esto de manera diferente. Primero debe establecer la codificación predeterminada:
y luego para cargar el archivo que debe usar
io.open
para configurar la codificación:Aún necesitas exportar el env
fuente
Recibí este error al intentar instalar un paquete de Python en un contenedor Docker. Para mí, el problema era que la imagen de la ventana acoplable no estaba
locale
configurada. Agregar el siguiente código al Dockerfile resolvió el problema para mí.fuente
Para encontrar CUALQUIER y TODOS los errores unicode relacionados ... Usando el siguiente comando:
Encontré el mío en
Usando
shed
, encontré la secuencia ofensiva. Resultó ser un error del editor.fuente
Puedes probar esto antes de usar
job_titles
string:fuente
Para python 3, la codificación predeterminada sería "utf-8". Los siguientes pasos se sugieren en la documentación base: https://docs.python.org/2/library/csv.html#csv-examples en caso de cualquier problema
Crear una función
Luego use la función dentro del lector, por ejemplo
fuente
python3x o superior
cargar archivo en flujo de bytes:
body = '' para líneas en abierto ('sitio web / index.html', 'rb'): decodedLine = lines.decode ('utf-8') body = body + decodedLine.strip () return body
usar configuración global:
import io import sys sys.stdout = io.TextIOWrapper (sys.stdout.buffer, encoding = 'utf-8')
fuente
Usar en
open(fn, 'rb').read().decode('utf-8')
lugar de soloopen(fn).read()
fuente