Python中的阿拉伯语词

问题描述:

我在Python中打印阿拉伯语文本时遇到了问题,我写了一个将英文字符转换为阿拉伯文的代码(聊天语言或佛朗哥阿拉伯语),然后创建不同结果之间的组合以获得基于用户输入的建议。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] 

第一打印(印刷rankeddata [指数])给出阿拉伯字,但该组合处理被执行第二打印后(印刷跑[I])给出类似的东西:(U'\ u0627 \ u0646 \ u0647',u'\ u0631 \ u0627 \ u0644 \ u062c \ u0627 \ u0645 \ u0639 \ u0647')

如何打印阿拉伯文字?

+2

你在哪里输出?因为将你的输出粘贴到我的解释器中实际上会产生:'انهرايحالجامعه'。我相信你对此的投入是“我要去大学”或者沿着这条路线,对吗?这表明你的代码实际上工作。 – idjaw

+0

没有我的投入像下面这样的法兰克阿拉伯语结构:ana raye7 elgam3a和程序应该打印出来انهرايحالجامعه –

你的第二循环结束tuple S的unicode操作(product产生单一产物在一个时间作为tuple),而不是单个unicode值。

虽然print使用str形式对象的打印,tuplestr形式使用包含的对象的repr,它不会传播‘STR-即将倒闭’(在技术上,tuple缺乏__str__完全,所以它的落回到__repr__)。

如果你想看到阿拉伯文,你需要单独打印元素或连接它们,以便打印字符串,而不是tuple。例如,你可以改变:

print ran[I] 

喜欢的东西:

print u', '.join(ran[I]) 

,这将转化为一个逗号分隔unicodeprint将格式化预期(该str形式),而不是使用带有escapes的repr格式表示非ASCII值。注意:作为样式(和内存使用)的一个要点,直接使用iterator协议,不要使用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) 
+0

谢谢它的作品:) –