Come risolvere: "UnicodeDecodeError: il codec 'ascii' non può decodificare byte"


459
as3:~/ngokevin-site# nano content/blog/20140114_test-chinese.mkd
as3:~/ngokevin-site# wok
Traceback (most recent call last):
File "/usr/local/bin/wok", line 4, in
Engine()
File "/usr/local/lib/python2.7/site-packages/wok/engine.py", line 104, in init
self.load_pages()
File "/usr/local/lib/python2.7/site-packages/wok/engine.py", line 238, in load_pages
p = Page.from_file(os.path.join(root, f), self.options, self, renderer)
File "/usr/local/lib/python2.7/site-packages/wok/page.py", line 111, in from_file
page.meta['content'] = page.renderer.render(page.original)
File "/usr/local/lib/python2.7/site-packages/wok/renderers.py", line 46, in render
return markdown(plain, Markdown.plugins)
File "/usr/local/lib/python2.7/site-packages/markdown/init.py", line 419, in markdown
return md.convert(text)
File "/usr/local/lib/python2.7/site-packages/markdown/init.py", line 281, in convert
source = unicode(source)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 1: ordinal not in range(128). -- Note: Markdown only accepts unicode input!

Come sistemarlo?

In alcune altre app di blog statici basate su Python, i post cinesi possono essere pubblicati correttamente. Come questa app: http://github.com/vrypan/bucket3 . Nel mio sito http://bc3.brite.biz/ , le poste cinesi possono essere pubblicate con successo.


Risposte:


569

tl; dr / correzione rapida

  • Non decodificare / codificare volenti o nolenti
  • Non dare per scontato che le tue stringhe siano codificate UTF-8
  • Prova a convertire le stringhe in stringhe Unicode il prima possibile nel tuo codice
  • Correggi le impostazioni internazionali: come risolvere UnicodeDecodeError in Python 3.6?
  • Non essere tentato di usare reloadhack rapidi

Unicode Zen in Python 2.x - La versione lunga

Senza vedere la fonte è difficile conoscere la causa principale, quindi dovrò parlare in generale.

UnicodeDecodeError: 'ascii' codec can't decode bytegeneralmente si verifica quando si tenta di convertire un Python 2.x strche contiene non ASCII in una stringa Unicode senza specificare la codifica della stringa originale.

In breve, le stringhe Unicode sono un tipo completamente separato di stringa Python che non contiene alcuna codifica. Possiedono solo codici punto Unicode e quindi possono contenere qualsiasi punto Unicode nell'intero spettro. Le stringhe contengono testo codificato, tra UTF-8, UTF-16, ISO-8895-1, GBK, Big5 ecc. Le stringhe vengono decodificate in Unicode e Unicode vengono codificate in stringhe . I file e i dati di testo vengono sempre trasferiti in stringhe codificate.

Gli autori del modulo Markdown probabilmente usano unicode() (dove viene generata l'eccezione) come gate di qualità per il resto del codice: convertirà ASCII o avvolgerà nuovamente le stringhe Unicodes esistenti in una nuova stringa Unicode. Gli autori di Markdown non possono conoscere la codifica della stringa in arrivo, quindi si affideranno a te per decodificare le stringhe in stringhe Unicode prima di passare a Markdown.

Le stringhe Unicode possono essere dichiarate nel tuo codice usando il uprefisso alle stringhe. Per esempio

>>> my_u = u'my ünicôdé strįng'
>>> type(my_u)
<type 'unicode'>

Le stringhe Unicode possono anche provenire da file, database e moduli di rete. Quando ciò accade, non devi preoccuparti della codifica.

Trabocchetti

La conversione da strin Unicode può avvenire anche quando non chiami esplicitamente unicode().

I seguenti scenari causano UnicodeDecodeErroreccezioni:

# Explicit conversion without encoding
unicode('€')

# New style format string into Unicode string
# Python will try to convert value string to Unicode first
u"The currency is: {}".format('€')

# Old style format string into Unicode string
# Python will try to convert value string to Unicode first
u'The currency is: %s' % '€'

# Append string to Unicode
# Python will try to convert string to Unicode first
u'The currency is: ' + '€'         

Esempi

Nel diagramma seguente, puoi vedere come la parola caféè stata codificata nella codifica "UTF-8" o "Cp1252" a seconda del tipo di terminale. In entrambi gli esempi, cafè solo ascii normale. In UTF-8, éè codificato usando due byte. In "Cp1252", é è 0xE9 (che è anche il valore del punto Unicode (non è una coincidenza)). decode()Viene invocato il corretto e la conversione in Unicode Python ha esito positivo: Diagramma di una stringa convertita in una stringa Unicode Python

In questo diagramma, decode()viene chiamato con ascii(che equivale a chiamare unicode()senza una codifica fornita). Poiché ASCII non può contenere byte maggiori di 0x7F, ciò genererà UnicodeDecodeErrorun'eccezione:

Diagramma di una stringa convertita in una stringa Unicode Python con codifica errata

Il panino Unicode

È buona norma formare un sandwich Unicode nel codice, in cui decodifichi tutti i dati in arrivo in stringhe Unicode, lavori con Unicodes, quindi codifichi in struscita. Questo ti evita di preoccuparti della codifica delle stringhe nel mezzo del tuo codice.

Ingresso / Decodifica

Codice sorgente

Se devi inserire un codice non ASCII nel codice sorgente, crea semplicemente stringhe Unicode aggiungendo il prefisso a u. Per esempio

u'Zürich'

Per consentire a Python di decodificare il tuo codice sorgente, dovrai aggiungere un'intestazione di codifica in modo che corrisponda alla codifica effettiva del tuo file. Ad esempio, se il tuo file fosse codificato come "UTF-8", utilizzeresti:

# encoding: utf-8

Ciò è necessario solo quando nel codice sorgente non è presente ASCII .

File

Di solito i dati non ASCII vengono ricevuti da un file. Il iomodulo fornisce un TextWrapper che decodifica il tuo file al volo, usando un dato encoding. È necessario utilizzare la codifica corretta per il file: non è possibile indovinarlo facilmente. Ad esempio, per un file UTF-8:

import io
with io.open("my_utf8_file.txt", "r", encoding="utf-8") as my_file:
     my_unicode_string = my_file.read() 

my_unicode_stringsarebbe quindi adatto per il passaggio a Markdown. Se UnicodeDecodeErrordalla read()linea, probabilmente hai usato il valore di codifica sbagliato.

File CSV

Il modulo CSV Python 2.7 non supporta caratteri non ASCII 😩. L'aiuto è a portata di mano, tuttavia, con https://pypi.python.org/pypi/backports.csv .

Usalo come sopra ma passagli il file aperto:

from backports import csv
import io
with io.open("my_utf8_file.txt", "r", encoding="utf-8") as my_file:
    for row in csv.reader(my_file):
        yield row

Banche dati

La maggior parte dei driver di database Python può restituire dati in Unicode, ma in genere richiede una piccola configurazione. Utilizzare sempre stringhe Unicode per query SQL.

MySQL

Nella stringa di connessione aggiungi:

charset='utf8',
use_unicode=True

Per esempio

>>> db = MySQLdb.connect(host="localhost", user='root', passwd='passwd', db='sandbox', use_unicode=True, charset="utf8")
PostgreSQL

Inserisci:

psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)

HTTP

Le pagine Web possono essere codificate praticamente in qualsiasi codifica. L' Content-typeintestazione deve contenere un charsetcampo per suggerire la codifica. Il contenuto può quindi essere decodificato manualmente in base a questo valore. In alternativa, Python-Requests restituisce Unicodes in response.text.

manualmente

Se devi decodificare manualmente le stringhe, puoi semplicemente fare my_string.decode(encoding), dov'è encodingla codifica appropriata. I codec supportati da Python 2.x sono forniti qui: codifiche standard . Ancora una volta, se ottieni UnicodeDecodeErrorallora probabilmente hai la codifica sbagliata.

La carne del panino

Lavora con Unicodes come faresti con le normali strs.

Produzione

stdout / stampa

printscrive attraverso il flusso stdout. Python tenta di configurare un codificatore su stdout in modo che gli Unicode siano codificati nella codifica della console. Ad esempio, se un Linux shell di localeè en_GB.UTF-8, l'uscita viene codificato a UTF-8. Su Windows, sarai limitato a una tabella codici a 8 bit.

Una console configurata in modo errato, come impostazioni internazionali danneggiate, può causare errori di stampa imprevisti. PYTHONIOENCODINGla variabile d'ambiente può forzare la codifica per stdout.

File

Proprio come l'input, io.openpuò essere utilizzato per convertire in modo trasparente Unicode in stringhe di byte codificate.

Banca dati

La stessa configurazione per la lettura consentirà la scrittura diretta di Unicodes.

Python 3

Python 3 non è più compatibile con Unicode di Python 2.x, tuttavia è leggermente meno confuso sull'argomento. Ad esempio, il normale strora è una stringa Unicode e il vecchio strora bytes.

La codifica predefinita è UTF-8, quindi se si utilizza .decode()una stringa di byte senza fornire una codifica, Python 3 utilizza la codifica UTF-8. Questo probabilmente risolve il 50% dei problemi Unicode delle persone.

Inoltre, open()funziona in modalità testo per impostazione predefinita, quindi restituisce decodificato str(quelli Unicode). La codifica deriva dalle impostazioni internazionali, che tendono ad essere UTF-8 su sistemi Un * x o una tabella codici a 8 bit, come windows-1251, su scatole di Windows.

Perché non dovresti usare sys.setdefaultencoding('utf8')

È un brutto hack (c'è una ragione che devi usare reload) che maschera solo i problemi e ostacola la tua migrazione a Python 3.x. Comprendi il problema, risolvi la causa principale e divertiti con Unicode zen. Vedi Perché NON dovremmo usare sys.setdefaultencoding ("utf-8") in uno script PY? per ulteriori dettagli


2
Per chi cerca le risposte di Python 2, un TLDR più utile: utilizzare io.openper leggere / scrivere file, utilizzare from __future__ import unicode_literals, configurare altri input / output di dati (ad esempio, database) per utilizzare Unicode.
idbrii,

sooo come lo ripariamo? lol questo non è un problema nello scrivere una sceneggiatura, ma nell'installarne una
Matthew

@Matthew provare l'impostazione PYTHONIOENCODING=utf-8. Se ciò non risolve il problema, dovrai contattare l'autore dello script per correggere il loro codice.
Alastair McCormack,

498

Alla fine l'ho ottenuto:

as3:/usr/local/lib/python2.7/site-packages# cat sitecustomize.py
# encoding=utf8  
import sys  

reload(sys)  
sys.setdefaultencoding('utf8')

Fammi controllare:

as3:~/ngokevin-site# python
Python 2.7.6 (default, Dec  6 2013, 14:49:02)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.getdefaultencoding()
'utf8'
>>>

Quanto sopra mostra la codifica predefinita di Python utf8. Quindi l'errore non è più.


7
Ci provo ma non è possibile modificare la codifica in modo permanente. Una volta chiusa la console Python e riavviata, la codifica è sempre la stessa
macemers

37
Grazie! Ma perché dobbiamo ricaricare il sistema dopo averlo importato?
Dmiters il

6
@DmitryNarkevich, a causa della funzione Illusive setdefaultencoding . Viene eliminato all'avvio di Python poiché, in primo luogo, non avrebbe mai dovuto far parte di una versione corretta.
predi

3
Significa che non hai risolto la causa principale. Hai appena rattoppato qualsiasi conversione implicita
Alastair McCormack, il

5
@miraculixx La codifica predefinita di Python 3 è UTF-8 con le stringhe Unicode come predefinite str, quindi non è scaduta lì. In Python 2.x, Unicode era in uno stato di transizione, quindi sarebbe stato pericoloso assumere una codifica durante la conversione di byte in Unicodes. Pertanto, la codifica predefinita di ASCII di Py2 è stata una scelta deliberata e perché cambiare la codifica predefinita richiede l'hacking deliberato del ricaricamento sys. Il modo corretto di bandire gli errori di codifica in Py2 è di decodificare e codificare in modo inequivocabile le stringhe (byte) in Unicode, quando sono necessarie le conversioni - non solo supporre che le stringhe siano codificate UTF-8.
Alastair McCormack,

130

Questo è il classico "problema unicode". Credo che spiegare ciò esuli dallo scopo di una risposta StackOverflow per spiegare completamente ciò che sta accadendo.

È ben spiegato qui .

In breve riassunto, hai passato qualcosa che viene interpretato come una stringa di byte a qualcosa che deve decodificarlo in caratteri Unicode, ma il codec predefinito (ascii) non riesce.

La presentazione che ti ho indicato fornisce consigli per evitarlo. Rendi il tuo codice un "sandwich unicode". In Python 2, l'uso di from __future__ import unicode_literalsaiuti.

Aggiornamento: come si può correggere il codice:

OK - nella tua variabile "source" hai dei byte. Dalla tua domanda non è chiaro come siano entrati lì - forse li hai letti da un modulo web? In ogni caso, non sono codificati con ASCII, ma Python sta cercando di convertirli in Unicode supponendo che lo siano. Devi dirlo esplicitamente quale sia la codifica. Ciò significa che devi sapere qual è la codifica! Non è sempre facile e dipende interamente da dove proviene questa stringa. Potresti sperimentare alcune codifiche comuni, ad esempio UTF-8. Dì a Unicode () la codifica come secondo parametro:

source = unicode(source, 'utf-8')

1
è ancora un mal di testa. GreenAsJade, puoi darmi una soluzione concreta?
pescatore

1
Stai chiedendo "come posso evitare questo problema come utente di questo blog?". O è la tua domanda "come posso risolvere il codice in modo che questo problema non si verifichi"?
GreenAsJade,

2
signor greenasjade: dove dovrei mettere "source = unicode (source, 'utf-8')"?
pescatore

7
Strano ... dopo un feedback positivo per oltre un anno, improvvisamente due voti negativi ... Eh?
GreenAsJade,

11
utilizzare currentFile = open(filename, 'rt', encoding='latin1')o currentFile = open(filename, 'rt', encoding='utf-8')- vedi qui: stackoverflow.com/a/23917799/2047442
irudyak

42

In alcuni casi, quando si controlla la codifica predefinita ( print sys.getdefaultencoding()), viene restituito l'utilizzo di ASCII. Se cambi in UTF-8, non funziona, a seconda del contenuto della tua variabile. Ho trovato un altro modo:

import sys
reload(sys)  
sys.setdefaultencoding('Cp1252')

ty, questo ha funzionato per il mio problema con Python che lancia UnicodeDecodeError su var = u "" "variano stringa grande" ""
user2426679

AttributeError: il modulo 'sys' non ha alcun attributo 'setdefaultencoding'
Chaine

ed reload(sys)è usato per quel motivo particolare.
Marcin Orlowski,

1
Ha funzionato per me! GRAZIE !
Maciej,

22

Stavo cercando di risolvere il seguente messaggio di errore:

unicodedecodeerror: il codec 'ascii' non può decodificare il byte 0xe2 in posizione 5454: ordinale non compreso nell'intervallo (128)

Ho finalmente risolto specificando 'codifica':

f = open('../glove/glove.6B.100d.txt', encoding="utf-8")

Vorrei che potesse aiutarti anche tu.


questo ha risolto l'errore per me durante la lettura / scrittura di file .csv, non avevo bisogno delle altre cose elencate nelle altre risposte
user5359531

Non capisco perché le altre risposte forniscano così tanti dettagli ... ma dimentica questa semplice soluzione. +10!
Stan,

18
"UnicodeDecodeError: 'ascii' codec can't decode byte"

Causa di questo errore: input_string deve essere unicode ma è stato dato str

"TypeError: Decoding Unicode is not supported"

Causa di questo errore: tentativo di convertire unicode input_string in unicode


Quindi prima controlla che input_string sia stre converti in unicode se necessario:

if isinstance(input_string, str):
   input_string = unicode(input_string, 'utf-8')

In secondo luogo, quanto sopra cambia solo il tipo ma non rimuove i caratteri non ascii. Se si desidera rimuovere caratteri non ascii:

if isinstance(input_string, str):
   input_string = input_string.decode('ascii', 'ignore').encode('ascii') #note: this removes the character and encodes back to string.

elif isinstance(input_string, unicode):
   input_string = input_string.encode('ascii', 'ignore')

9

Trovo che la cosa migliore sia convertire sempre in unicode, ma questo è difficile da ottenere perché in pratica dovresti controllare e convertire ogni argomento in ogni funzione e metodo che tu abbia mai scritto che includa una qualche forma di elaborazione delle stringhe.

Quindi ho trovato il seguente approccio per garantire unicode o stringhe di byte, da entrambi gli input. In breve, includi e usa i seguenti lambda:

# guarantee unicode string
_u = lambda t: t.decode('UTF-8', 'replace') if isinstance(t, str) else t
_uu = lambda *tt: tuple(_u(t) for t in tt) 
# guarantee byte string in UTF8 encoding
_u8 = lambda t: t.encode('UTF-8', 'replace') if isinstance(t, unicode) else t
_uu8 = lambda *tt: tuple(_u8(t) for t in tt)

Esempi:

text='Some string with codes > 127, like Zürich'
utext=u'Some string with codes > 127, like Zürich'
print "==> with _u, _uu"
print _u(text), type(_u(text))
print _u(utext), type(_u(utext))
print _uu(text, utext), type(_uu(text, utext))
print "==> with u8, uu8"
print _u8(text), type(_u8(text))
print _u8(utext), type(_u8(utext))
print _uu8(text, utext), type(_uu8(text, utext))
# with % formatting, always use _u() and _uu()
print "Some unknown input %s" % _u(text)
print "Multiple inputs %s, %s" % _uu(text, text)
# but with string.format be sure to always work with unicode strings
print u"Also works with formats: {}".format(_u(text))
print u"Also works with formats: {},{}".format(*_uu(text, text))
# ... or use _u8 and _uu8, because string.format expects byte strings
print "Also works with formats: {}".format(_u8(text))
print "Also works with formats: {},{}".format(*_uu8(text, text))

Ecco qualche altro ragionamento su questo .


Ciao, in Python 3 la funzione _u non funziona con questo valore 'Ita £'.
Martin,

1
Ok, da dove iniziare il tuo "ragionamento"? print unicode(u'Zürich', encoding="UTF-8")e poi si lamentano "Ma sorprendentemente non è possibile codificare ext Unicode in UTF8". unicode()non codifica; decodifica e non puoi decodificare un Unicode - è già decodificato!
Alastair McCormack,

@AlastairMcCormack Sei il benvenuto per migliorare il post. Se tuttavia preferisci spargere la tua presunta superiorità su tutti gli altri che non condividono la tua opinione e intuizione, sinceramente non sono interessato. Grazie.
miraculixx,

3
@miraculixx Mi dispiace, non intendevo imbattermi in un coglione. Preoccuparsi di decodificare e codificare ogni volta che si utilizza una stringa nel proprio codice è semplicemente superfluo.
Alastair McCormack,

7

Per risolvere il problema a livello di sistema operativo in un'installazione Ubuntu, controllare quanto segue:

$ locale charmap

Se ottieni

locale: Cannot set LC_CTYPE to default locale: No such file or directory

invece di

UTF-8

quindi impostare LC_CTYPEe in LC_ALLquesto modo:

$ export LC_ALL="en_US.UTF-8"
$ export LC_CTYPE="en_US.UTF-8"

6

Encode converte un oggetto unicode in un oggetto stringa. Penso che tu stia provando a codificare un oggetto stringa. prima converti il ​​tuo risultato in oggetto Unicode e poi codifica quell'oggetto Unicode in 'utf-8'. per esempio

    result = yourFunction()
    result.decode().encode('utf-8')

4

Ho avuto lo stesso problema ma non ha funzionato per Python 3. Ho seguito questo e risolto il mio problema:

enc = sys.getdefaultencoding()
file = open(menu, "r", encoding = enc)

Devi impostare la codifica durante la lettura / scrittura del file.


4

Ho avuto lo stesso errore e questo ha risolto il mio errore. Grazie! python 2 e python 3 che differiscono nella gestione di unicode stanno rendendo i file decapati del tutto incompatibili con il caricamento. Quindi usa l'argomento di codifica di python pickle. Il link in basso mi ha aiutato a risolvere il problema simile quando stavo cercando di aprire i dati in decapaggio dal mio Python 3.7, mentre il mio file è stato salvato originariamente nella versione 2.x di Python. https://blog.modest-destiny.com/posts/python-2-and-3-compatible-pickle-save-and-load/ Copio la funzione load_pickle nel mio script e ho chiamato load_pickle (pickle_file) durante il caricamento di my input_data come questo:

input_data = load_pickle("my_dataset.pkl")

La funzione load_pickle è qui:

def load_pickle(pickle_file):
    try:
        with open(pickle_file, 'rb') as f:
            pickle_data = pickle.load(f)
    except UnicodeDecodeError as e:
        with open(pickle_file, 'rb') as f:
            pickle_data = pickle.load(f, encoding='latin1')
    except Exception as e:
        print('Unable to load data ', pickle_file, ':', e)
        raise
    return pickle_data

1
è meglio includere la definizione di load_picklefunzione nella risposta.
sanyash,

4

Questo ha funzionato per me:

    file = open('docs/my_messy_doc.pdf', 'rb')

3

In breve, per garantire la corretta gestione degli Unicode in Python 2:

  • utilizzare io.openper leggere / scrivere file
  • uso from __future__ import unicode_literals
  • configurare altri input / output di dati (ad es. database, rete) per utilizzare Unicode
  • se non puoi configurare gli output su utf-8, converti i tuoi output per loro print(text.encode('ascii', 'replace').decode())

Per spiegazioni, vedere la risposta dettagliata di @Alastair McCormack .


• usare io.open(path, 'r', encoding='utf-8')per leggere file con codifica utf-8.
Bob Stein,

3

Ho avuto lo stesso errore, con URL contenenti caratteri non ascii (byte con valori> 128), la mia soluzione:

url = url.decode('utf8').encode('utf-8')

Nota: utf-8, utf8 sono semplicemente alias. Usare solo 'utf8' o 'utf-8' dovrebbe funzionare allo stesso modo

Nel mio caso, ha funzionato per me, in Python 2.7, suppongo che questo compito abbia cambiato 'qualcosa' nella strrappresentazione interna - cioè, impone la giusta decodifica della sequenza di byte supportata urle infine mette la stringa in un utf-8 str con tutta la magia nel posto giusto. Unicode in Python è una magia nera per me. Spero utile


1
Perché un trattino in uno e non nell'altro
IgorGanapolsky il

1
Python accetta gli alias per la codifica dei nomi, ho provato ora ed eseguito lo stesso ... semplicemente non ho notato che li ho scritti in modo diverso, aggiunta nota
Fabiano Tarlao,

2

Ho avuto lo stesso problema con la stringa "Pastelería Mallorca" e ho risolto con:

unicode("Pastelería Mallorca", 'latin-1')

1

In un progetto Django (1.9.10) / Python 2.7.5 ho frequenti UnicodeDecodeError eccezioni; principalmente quando provo ad alimentare le stringhe unicode alla registrazione. Ho creato una funzione di supporto per gli oggetti arbitrari per formattare sostanzialmente le stringhe ASCII a 8 bit e sostituendo i caratteri non presenti nella tabella in "?". Penso che non sia la soluzione migliore ma poiché la codifica predefinita è ascii (e non voglio cambiarla) lo farà:

def encode_for_logging (c, encoding = 'ascii'):
    se isinstance (c, basestring):
        return c.encode (codifica, 'sostituisci')
    elif isinstance (c, Iterable):
        c_ = []
        per v in c:
            c_.append (encode_for_logging (v, codifica))
        ritorna c_
    altro:
        return encode_for_logging (unicode (c))
`


1

Questo errore si verifica quando ci sono alcuni caratteri non ASCII nella nostra stringa e stiamo eseguendo qualsiasi operazione su quella stringa senza una corretta decodifica. Questo mi ha aiutato a risolvere il mio problema. Sto leggendo un file CSV con colonne ID, testo e caratteri di decodifica come di seguito:

train_df = pd.read_csv("Example.csv")
train_data = train_df.values
for i in train_data:
    print("ID :" + i[0])
    text = i[1].decode("utf-8",errors="ignore").strip().lower()
    print("Text: " + text)

0

Ecco la mia soluzione, basta aggiungere la codifica. with open(file, encoding='utf8') as f

E poiché la lettura del file glove richiederà molto tempo, raccomando il file glove a un file numpy. Quando leggi netx i pesi di incorporamento, risparmierai il tuo tempo.

import numpy as np
from tqdm import tqdm


def load_glove(file):
    """Loads GloVe vectors in numpy array.
    Args:
        file (str): a path to a glove file.
    Return:
        dict: a dict of numpy arrays.
    """
    embeddings_index = {}
    with open(file, encoding='utf8') as f:
        for i, line in tqdm(enumerate(f)):
            values = line.split()
            word = ''.join(values[:-300])
            coefs = np.asarray(values[-300:], dtype='float32')
            embeddings_index[word] = coefs

    return embeddings_index

# EMBEDDING_PATH = '../embedding_weights/glove.840B.300d.txt'
EMBEDDING_PATH = 'glove.840B.300d.txt'
embeddings = load_glove(EMBEDDING_PATH)

np.save('glove_embeddings.npy', embeddings) 

Collegamento Gist: https://gist.github.com/BrambleXu/634a844cdd3cd04bb2e3ba3c83aef227


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.