我正在尝试计算以UTF-8保存的乌尔都语文档中相同单词的数量。
所以例如,我的文档包含 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
但是我得到的计数值是 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