簡體   English   中英

python中將unicode與unicode比較

[英]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 lstw類的變量以了解它們的含義。

比較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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM