2016-11-19 4 views
1

Я работаю с данными Twitter, и у меня есть файл с кучей твитов в нем, по одному на строку. Большинство этих твитов были написаны на португальском языке, поэтому у них есть специальные символы, такие как «é», «á» и т. Д.Почему мой скрипт не печатает символы Unicode правильно?

Я пытаюсь отфильтровать стоп-слова из файла и подделать твиты, но после обработки моего сценария напечатайте специальные символы правильно.

Пример:

AT_USER рга Concurso público, tô entrando nessas агоры Porque Emprego бом Tá Foda

Становится:

[u'pra 'u'concurso' , u'p \ xfablico ', u't \ xf4', u'entrando ', u'nessas', u'agora ', u'porque', u'emprego ', u'bom', u't \ xe1 ', u'foda']

Почему у меня есть это «u» перед каждым токеном? И почему «ú» становится «\ xfa»?

Как получить маркеры без «u» и с символами с акцентом, напечатанными правильно?

Здесь в этом gist вы можете проверить текст до, после и сценарий, который я использовал.

Спасибо :)

+1

'u' префикс строки означает * unicode string *, а префикс' b' означает * байтовую строку *. '\ xfa' - это кодировка char, значение ascii которой' FA'. –

+0

@YotamSalmon, но как я могу избавиться от «u» и правильно напечатать акцентированные символы? – 0x7067

+0

'u' - это информация, которую Python добавляет, когда вы используете' print (lst) 'вместо того, чтобы печатать каждый элемент отдельно. – furas

ответ

2

У вас есть список

>>> l = [u'pra', u'concurso', u'p\xfablico', u't\xf4', u'entrando', u'nessas', u'agora', u'porque', u'emprego', u'bom', u't\xe1', u'foda'] 

И при печати списка, слова выглядят странно

>>> print l 
[u'pra', u'concurso', u'p\xfablico', u't\xf4', u'entrando', u'nessas', u'agora', u'porque', u'emprego', u'bom', u't\xe1', u'foda'] 

Но если вы печатаете слова, она выглядит хорошо

>>> for word in l: 
...  print word 
... 
pra 
concurso 
público 
tô 
entrando 
nessas 
agora 
porque 
emprego 
bom 
tá 
foda 
>>> 

Когда вы печатаете список, python печатает представление списка, которое хорошо для программистов, чтобы увидеть, что такое объект. У него есть скобки и цитаты и ... «u», чтобы сказать вам, что это строка Unicode вместо обычной строки ascii. Вы видите ascii-экранированную версию символов Unicode, потому что это единственный способ просмотра этих символов в ascii. Если вы оцениваете печатную строку как команду python, вы даже получите исходный список!

>>> l2 = eval("[u'pra', u'concurso', u'p\xfablico', u't\xf4', u'entrando', u'nessas', u'agora', u'porque', u'emprego', u'bom', u't\xe1', u'foda']") 
>>> l == l2 
True 

Все хорошо! Вы просто получаете представление о списке.

python 3 делает намного лучшую работу при работе с Unicode. Если у вас нет оснований придерживаться 2.x, двигайтесь!

+0

Спасибо :) Я не знал, что – 0x7067

1

«У» до того, как строка сообщает вам, что у вас есть строка Юникода.

Смежные вопросы