Python中的阿拉伯语单词

时间:2017-07-25 00:02:38

标签: python unicode arabic

我在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')

如何打印阿拉伯语单词?

1 个答案:

答案 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)