我在Python中打印阿拉伯文本时遇到问题,我编写了一个代码,将英文字符转换为阿拉伯文字符(称为聊天语言或法语阿拉伯语),然后在不同结果之间创建组合以获取基于用户的建议输入
def transliterate(francosentence, verbose=False):
francowords = francosentence.split()
arabicconvertedwords = []
for i in francowords:
rankeddata=[]
rankeddata=transliterate_word(i)
arabicconvertedwords.append(rankeddata)
for index in range(len(rankeddata)):
print rankeddata[index]
ran=list(itertools.product(*arabicconvertedwords))
for I in range(len(ran)):
print ran[I]
第一个打印(print rankingdata [index])给出了阿拉伯语单词,但是在执行组合处理之后,第二个打印(print ran [I])给出了类似的东西:(u' \ u0627 \ u0646 \ u0647& #39;,你' \ u0631 \ u0627 \ u064a \ u062d',你' \ u0627 \ u0644 \ u062c \ u0627 \ u0645 \ u0639 \ u0647')
如何打印阿拉伯语单词?
答案 0 :(得分:3)
您的第二个循环正在tuple
unicode
product
上运行(tuple
一次产生一个产品unicode
),而不是print
{}值。
虽然str
使用了打印对象的tuple
形式,但str
的{{1}}表单使用了所包含对象的repr
,但它没有'传播“str-iness”(从技术上讲,tuple
完全缺少__str__
,所以它会回落到__repr__
。
如果要查看阿拉伯语,则需要单独打印元素或将它们连接起来,以便打印字符串,而不是tuple
。例如,您可以更改:
print ran[I]
类似于:
print u', '.join(ran[I])
将转换为unicode
将按预期格式化的单个逗号分隔print
值(str
表单),而不是使用带有转义符的repr
表单对于非ASCII值。
旁注:作为样式(和内存使用)的一个点,直接使用迭代器协议,不要list
ify然后使用C风格的索引循环。如果输入很大,则以下代码必须在内存中存储大量内容(输出的总大小是每个输入长度的乘法乘积):
ran=list(itertools.product(*arabicconvertedwords))
for I in range(len(ran)):
print u', '.join(ran[I])
它可以根据需要一次只生成一个项目,在没有内存开销的情况下更快地生成结果:
# Don't listify...
ran = itertools.product(*arabicconvertedwords)
for r in ran: # Iterate items directly, no need for list or indexing
print u', '.join(r)