Python中将Unicode文本转换为可读文本

4

我有以下Unicode文本

(S (NP (N \u0db6\u0dbd\u0dbd\u0dcf)) (VP (V \u0db6\u0dbb\u0dc0\u0dcf)))

如何将代码'\u0___'转换为相关可读字符,以便更易于阅读。我正在使用Python 2.7版本。

我通过在NLTK(3.0)中遵循以下代码段获得了该输出,其中tree是一个nltk.tree.Tree

for tree in treelist1:
    print unicode(str(tree))

我需要类似于print(TreePrettyPrinter(tree).text())的东西,它可以给出我想要的unicode兼容输出,但不带有我不想要的树形布局。在NLTK中是否有一种方法可以获得这样的可读文本输出呢?


我也遇到了相同的问题,这是从输出中产生的。

for rule in grammar1.productions():
    print(rule.unicode_repr())

其中grammar1是nltk.grammar.CFG

输出结果如下。

VP -> V
VP -> NP V
N -> '\u0db6\u0dbd\u0dca\u0dbd\u0dcf'
N -> '\u0db8\u0dd2\u0db1\u0dd2\u0dc3\u0dcf'
N -> '\u0db8\u0dda\u0dc3\u0dba'

最终结果完全没问题。我只有对输出的表达方式有一些问题。


你尝试过打印字段本身包含的值吗? - Ignacio Vazquez-Abrams
1
Windows控制台在处理Unicode字符串方面声名狼藉,你最好创建某种接口或文件来输出,而不是大量使用显式编码/解码。 - Bob Dylan
@IgnacioVazquez-Abrams 给出了相同的字段输出。例如:print(tree) 和 print(grammar1)。 - Upekha Vandebona
1个回答

3
此问题有解决方案,请参考此链接。对Python 2.7同样适用。
与NLTK无关。简单方案仅需使用'unicode_escape'对输出文本进行解码。
print(str(tree).decode('unicode_escape'))

并且

print(rule.unicode_repr().decode('unicode_escape'))

如果需要将类型为nltk.tree.Tree的树形结构打印成括号文本,可以使用以下方法:

print(tree.pformat())

一个更简单的解决方案是避免调用 unicode_reprstr'unicode_escape' 可以掩盖上游的错误。 - jfs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接