user123 user123 - 19 days ago 7
Python Question

Python print non-english (telugu) text in readable format

I am processing telugu text to analyze few text tokens.

>>> 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


This way I can see the result in telugu.

For the same text, when I tried this way, it gives unicode string in result. How can I print token in 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]
gave it correctly. But when I executed puting this code in .py script and running it. It gives

ubuntu@DELL-PC:~/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 contains:

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

Answer

Since I don't have Telugu available in my console easiest answer was to run your python session in a browser by using Jupyter - that way you get rid of a lot of issues around the terminal character set, etc.

Then I could simply print the results:

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

Note that when putting this sort of thing into a script file you need to start the file with the magic lines:

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

Having deduced that the OP was running python2 I have experimented and found that - in a terminal that supports utf-8 - the following give results that look to be good when run from a script file:

#!/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
. .