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')
如何打印阿拉伯文字?
你的第二循环结束tuple
S的unicode
操作(product
产生单一产物在一个时间作为tuple
),而不是单个unicode
值。
虽然print
使用str
形式对象的打印,tuple
的str
形式使用包含的对象的repr
,它不会传播‘STR-即将倒闭’(在技术上,tuple
缺乏__str__
完全,所以它的落回到__repr__
)。
如果你想看到阿拉伯文,你需要单独打印元素或连接它们,以便打印字符串,而不是tuple
。例如,你可以改变:
print ran[I]
喜欢的东西:
print u', '.join(ran[I])
,这将转化为一个逗号分隔unicode
值print
将格式化预期(该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)
谢谢它的作品:) –
你在哪里输出?因为将你的输出粘贴到我的解释器中实际上会产生:'انهرايحالجامعه'。我相信你对此的投入是“我要去大学”或者沿着这条路线,对吗?这表明你的代码实际上工作。 – idjaw
没有我的投入像下面这样的法兰克阿拉伯语结构:ana raye7 elgam3a和程序应该打印出来انهرايحالجامعه –