2016-08-27 2 views
0

У меня есть следующий Python 2.7 код:Handling арабский текст в Python

mydoclist = ['جوليا تحبني اكثر من ليندا','جين تحبني اكثر من جوليا','احمد يحب كرة السلة اكثر من كرة الطاولة'] 

from collections import Counter 

for doc in mydoclist: 
    tf = Counter() 
    for word in doc.split(): 
     tf[word] +=1 
    print tf.items() 

я получил следующий вывод:

[(u'\u062a\u062d\u0628\u0646\u064a', 1), (u'\u0645\u0646', 1), (u'\u062c \u0648\u0644\u064a\u0627', 1), (u'\u0644\u064a\u0646\u062f\u0627', 1), (u'\u0627\u0643\u062b\u0631', 1)] 
[('\xd8\xac\xd9\x8a\xd9\x86', 1), ('\xd9\x85\xd9\x86', 1), ('\xd8\xac\xd9\x88\xd9\x84\xd9\x8a\xd8\xa7', 1), ('\xd8\xaa\xd8\xad\xd8\xa8\xd9\x86\xd9\x8a', 1), ('\xd8\xa7\xd9\x83\xd8\xab\xd8\xb1', 1)] 
[('\xd8\xa7\xd9\x83\xd8\xab\xd8\xb1', 1), ('\xd8\xa7\xd8\xad\xd9\x85\xd8\xaf', 1), ('\xd9\x8a\xd8\xad\xd8\xa8', 1), ('\xd8\xa7\xd9\x84\xd8\xb7\xd8\xa7\xd9\x88\xd9\x84\xd8\xa9', 1), ('\xd9\x83\xd8\xb1\xd8\xa9', 2), ('\xd8\xa7\xd9\x84\xd8\xb3\xd9\x84\xd8\xa9', 1), ('\xd9\x85\xd9\x86', 1)] 

Почему я не могу видеть арабские слова. Я хочу видеть арабские слова вместо этих кодов, которые появляются на выходе. Благодарю.

+0

Запустите этот массив и напечатайте каждый элемент с помощью файловой системы, и вы увидите, что у вас есть кодировка кодировки unicode и utf8, вам могут потребоваться некоторые преобразования кодировки. – YOU

+0

Есть ли особая причина, почему вы застряли с Python 2.7? Особенно, когда речь заходит о работе с текстом Unicode, Python 3 выигрывает во всех аспектах. Однако есть некоторые проблемы с визуализацией текста BIDI; на моем терминале весь текст получает визуализированный RTL: '[('تحبني', 1), ('من', 1), ('ج وليا', 1), ('ليندا', 1), ('اكثر' , 1)]. –

+0

Вы видите результат вывода, независимо от того, что вы делаете, вы не увидите слов при печати dict. Перемещайте по типу и печатайте каждую клавишу –

ответ

2

Python печатает списки, чтобы все элементы в них прошли через repr, который, в свою очередь, производит этот материал с помощью «\ u ...». Также взгляните на раздел урока около unicode-strings или лучше unicode HOWTO они мне очень помогли. Для исходного кода, содержащего символы не-ascii, вы должны set an encoding (скорее всего, «utf-8»). Также вы Propably хотите пометить строки, содержащие такие символы, как Unicode (u"..." вместо "...")

# -*- coding: utf-8 -*- 

from collections import Counter 


mydoclist = [u'جوليا تحبني اكثر من ليندا',u'جين تحبني اكثر من جوليا',u'احمد يحب كرة السلة اكثر من كرة الطاولة'] 



for doc in mydoclist: 
    tf = Counter() 
    for word in doc.split(): 
     tf[word] +=1 
    print u", ".join(u"(%i: %s)"%(n,s) for (s,n) in tf.items()) 

работает для меня.

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