2017-01-31 1 views
0

mon code est basé sur du code à: https://rstudio-pubs-static.s3.amazonaws.com/79360_850b2a69980c4488b1db95987a24867a.htmlPython Latent Dirichlet Allocation Stopped_tokens Erreur

Je peux exécuter mon programme avec un nombre inférieur de fichiers, mais quand je commence à obtenir des numéros de fichiers plus volumineux autour de 1000, je obtenir cette erreur:

ReadWrite.py:59: UnicodeWarning: Unicode égale comparaison a échoué à convertir les deux arguments Unicode - les interpréter comme étant inégales stopped_tokens = [i pour i en jetons sinon i dans en_stop]

Je me demandais si quelqu'un a déjà rencontré ça avant ou s'il y en a on a une idée pour savoir comment corriger cette erreur.

Répondre

0

Il semble que vous essayez de comparer des variables de types différents dans la compréhension de la liste. en_stop contient des variables Unicode. Je suppose que les jetons, que vous lisez depuis les fichiers, ont un encodage comme utf-8, cp1251, etc. Vous devriez essayer de déterminer quel type d'encodage vos jetons ont. Vous pouvez le faire de cette façon:

encoding = 'utf-8' # assign name like 'utf-8', 'cp1251', etc. 
string = tokens[0] 
try: 
    string.decode(encoding) 
    print 'string is {}'.format(encoding) 
except UnicodeError: 
    print 'string is not {}'.format(encoding) 

Lorsque vous trouvez l'encodage correct, vous pouvez obtenir stopped_tokens cette façon:

stopped_tokens = [i for i in tokens if not unicode(i, encoding) in en_stop] 

unicode(i, encoding) devrait convertir vos jetons à la représentation unicode dans votre compréhension de la liste.

+0

J'ai suivi votre conseil et je vérifie que les fichiers que j'ai sont utf-8. Cependant quand je cours les changements de code vous avez suggéré mon erreur change en UnicodeDecodeError: le codec 'ascii' ne peut pas décoder l'octet 0xe2 en position 2: ordinal pas dans la gamme (128). Est-ce parce que j'ai fait les fichiers dans utf-8? –