[英]Comparing unicode with unicode in python
我試圖計算保存在UTF-8中的Urdu文檔中相同單詞的數量。
例如,我的文檔包含3個完全相同的單詞,並用空格分隔
خُداوند خُداوند خُداوند
我嘗試通過使用以下代碼讀取文件來計算單詞數:
file_obj = codecs.open(path,encoding="utf-8")
lst = repr(file_obj.readline()).split(" ")
word = lst[0]
count =0
for w in lst:
if word == w:
count += 1
print count
但是我得到的count的值是1而我應該得到3。
如何比較Unicode字符串?
從您的代碼中刪除repr()
。 僅使用repr()
創建調試輸出; 您正在將unicode值轉換為可以粘貼回解釋器的字符串。
這意味着文件中的行現在存儲為:
>>> repr(u'خُداوند خُداوند خُداوند\n').split(" ")
["u'\\u062e\\u064f\\u062f\\u0627\\u0648\\u0646\\u062f", '\\u062e\\u064f\\u062f\\u0627\\u0648\\u0646\\u062f', "\\u062e\\u064f\\u062f\\u0627\\u0648\\u0646\\u062f\\n'"]
請注意, 雙反斜杠(轉義的Unicode轉義符)和第一個字符串以u'
開頭,最后一個字符串以\\\\n'
結尾。 這些值顯然永遠不相等。
刪除repr()
,並使用不帶參數的 .split()
來刪除結尾的空格:
lst = file_obj.readline().split()
並且您的代碼將正常工作:
>>> res = u'خُداوند خُداوند خُداوند\n'.split()
>>> res[0] == res[1] == res[2]
True
您可能需要先將輸入標准化 。 有些字符可以表示為一個unicode代碼點或兩個組合代碼點。 規范化將所有此類字符移動到合成或分解狀態。 請參閱規范化Unicode 。
嘗試刪除repr
?
lst = file_obj.readline().split(" ")
關鍵是,您至少應print
lst
和w
類的變量以了解它們的含義。
比較Python中的unicode字符串:
a = u'Artur'
print(a)
b = u'\u0041rtur'
print(b)
if a == b:
print('the same')
結果:
Artur
Artur
the same
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.