2017-07-25 145 views
0

我在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和程序應該打印出來انهرايحالجامعه –

回答

3

你的第二循環結束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

謝謝它的作品:) –