【问题标题】:Python print non-english (telugu) text in readable formatPython以可读格式打印非英语(泰卢固语)文本
【发布时间】:2016-11-18 06:38:56
【问题描述】:

我正在处理泰卢固语文本以分析一些文本标记。

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

这样我可以在泰卢固语中看到结果。

对于相同的文本,当我尝试这种方式时,它会在结果中给出 unicode 字符串。 如何在泰卢固语中打印令牌?

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

编辑:

print res[0] 正确地给出了它。但是当我执行将此代码放入 .py 脚本并运行它时。它给了

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 包含:

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

【问题讨论】:

  • 改用print res[0]
  • 你有什么问题?为什么不直接print() 结果:print(res[0])
  • 对不起我的错误。 print 正确地给出了它。但问题仍然存在。如果您能看到有问题的编辑,我将不胜感激
  • Got to love python - 错误消息甚至包括指向如何处理错误的网页链接。
  • “我的名字是卡里姆。我喜欢印度菜”的有趣文字(字对字)翻译。我正在逆向翻译它,“我叫卡里姆。我爱印度美食”只是为了笑

标签: python python-2.7 unicode utf


【解决方案1】:

由于我的控制台中没有泰卢固语,最简单的答案是使用 Jupyter 在浏览器中运行您的 python 会话 - 这样您就可以摆脱终端字符集等方面的许多问题。

然后我可以简单地print 结果:

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

请注意,将此类内容放入脚本文件时,您需要使用魔术线开始文件:

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

推断出 OP 正在运行 python2,我进行了实验并发现 - 在支持 utf-8 的终端中 - 以下给出的结果在从脚本文件运行时看起来不错:

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

【讨论】:

  • 谢谢,在 Jupyer 中,它运行良好。但大多数时候我需要编写 python 脚本并在终端上运行它。如果我们用终端来解决这个问题,就没有办法解决了吗?
  • 您显然已经为泰卢固语设置了终端,您是否尝试过简单的print(res[0]) 来输出它?
  • 如果您的终端支持泰卢固语,那么同样的事情(即print)将起作用。我的终端支持各种Unicode字符就好了,没有任何特殊配置。也许你的也是。
  • 在脚本文件的开头,您需要有 SheBang,然后是编码行。
  • @user123 您在文件test.py 中有一个非ASCII 字符,但test.py 没有声明它应该使用哪种非ASCII 编码。您需要在顶部提供类似# encoding=utf8 的行。有关如何指定编码的详细信息,请参阅python.org/peps/pep-0263.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
相关资源
最近更新 更多