2016-11-18 1 views
0

Je suis en train de traiter du texte télougou pour analyser quelques jetons de texte.Texte non-anglais (telugu) imprimé en Python au format lisible

>>> sent = "నా పేరు కరీం ఉంది. నేను భారత ఆహార ప్రేమ.".decode('utf-8')  
>>> text = sent 
>>> text = nltk.word_tokenize(text) 
>>> result = nltk.pos_tag(text) 
>>> for val in result: 
...  print list(val)[0], list(val)[1] 
... 
నా JJ 
పేరు NNP 
కరీం NNP 
ఉంది NNP 
. . 
నేను VB 
భారత JJ 
ఆహార NNP 
ప్రేమ NNP 

De cette façon, je peux voir le résultat dans telugu.

Pour le même texte, quand j'ai essayé de cette façon, il donne une chaîne unicode dans le résultat. Comment imprimer un jeton en telugu?

>>> s = "నా పేరు కరీం ఉంది. నేను భారత ఆహార ప్రేమ.".decode('utf-8') 
>>> res = s.split(' ') 
>>> res[0] 
u'\u0c28\u0c3e' 
>>> type(res[0]) 
<type 'unicode'> 
>>> res[0].encode('ascii') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) 
>>> res[0].encode('utf-8') 
'\xe0\xb0\xa8\xe0\xb0\xbe' 

Edit:

print res[0] il a donné correctement. Mais quand j'ai exécuté mettre ce code dans le script .py et l'exécuter. Il donne

[email protected]:~/Documents/codes$ python test.py 
    File "test.py", line 1 
SyntaxError: Non-ASCII character '\xe0' in file test.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details 

test.py contient:

s = "నా పేరు కరీం ఉంది. నేను భారత ఆహార ప్రేమ.".decode('utf-8') 
a = s.split() 
for i in a: 
    print i 
+2

essayer 'res d'impression [0]' la place. – nu11p01n73R

+0

Quel est votre problème? Pourquoi ne pas juste 'imprimer()' le résultat: 'print (res [0])'? – Leon

+0

Désolé pour mon erreur. l'impression le donne correctement. Mais le problème persiste toujours. J'apprécie si vous pouvez voir l'édition en question – user123

Répondre

2

Depuis que je n'ai pas Telugu disponible en réponse la plus facile était ma console pour lancer votre session python dans un navigateur en utilisant Jupyter - de cette façon vous se débarrasser d'un grand nombre de questions autour du caractère terminal de jeu, etc.

alors je pourrais simplement print les résultats:

s = "నా పేరు కరీం ఉంది. నేను భారత ఆహార ప్రేమ.".decode('utf-8') 
a = s.split() 
for i in a: 
    print(i) 
నా 
పేరు 
కరీం 
ఉంది. 
నేను 
భారత 
ఆహార 
ప్రేమ. 

Notez que lorsque vous mettez ce genre de chose dans un fichier de script que vous devez lancer le fichier avec les lignes magiques:

#!/usr/bin/env python 
#coding:utf-8 

Après avoir déduit que l'OP était en cours d'exécution python2 je l'ai expérimenté et a constaté que - dans un terminal qui prend en charge utf-8 - les éléments suivants donnent des résultats qui semblent être bon lorsqu'il est exécuté à partir d'un fichier de script:

#!/usr/bin/env python 
# coding: utf-8 
from __future__ import print_function 
import nltk 

s = "నా పేరు కరీం ఉంది. నేను భారత ఆహార ప్రేమ." #.decode('utf-8') 

a = s.split() 
for i in a: 
    print(i) 

text = nltk.word_tokenize(s.decode('utf-8')) 
result = nltk.pos_tag(text) 
for val in result: 
    print (list(val)[0].encode('utf-8'), list(val)[1]) 

$ python Untitled2.py 
నా 
పేరు 
కరీం 
ఉంది. 
నేను 
భారత 
ఆహార 
ప్రేమ. 
నా JJ 
పేరు NNP 
కరీం NNP 
ఉంది NNP 
. . 
నేను VB 
భారత JJ 
ఆహార NNP 
ప్రేమ NNP 
. . 
+0

Merci, dans Jupyer, ça marche bien. Mais la plupart du temps j'ai besoin d'écrire un script python et de le lancer sur un terminal. Pas moyen de se débarrasser de ce problème si nous le faisons avec un terminal? – user123

+1

Vous avez évidemment un terminal configuré pour Telugu avez-vous essayé un simple 'print (res [0])' pour le sortir? –

+1

Si votre terminal prend en charge Telugu, la même chose (c'est-à-dire 'print') fonctionnera. Mon terminal prend en charge toutes sortes de caractères Unicode, sans aucune configuration particulière. Peut-être que le vôtre aussi. – RJHunter