我正在尝试计算以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字符串?
答案 0 :(得分:3)
从代码中删除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'"]
注意 double 反斜杠(转义的unicode转义),第一个字符串以u'
开头,最后一个字符串以\\n'
结尾。这些值显然永远不会相等。
删除repr()
,并使用.split()
不带参数来删除尾随空格:
lst = file_obj.readline().split()
您的代码将起作用:
>>> res = u'خُداوند خُداوند خُداوند\n'.split()
>>> res[0] == res[1] == res[2]
True
您可能需要先规范化输入;某些字符可以表示为一个unicode代码点,也可以表示为两个组合代码点。规范化将所有这些字符移动到组合或分解状态。请参阅Normalizing Unicode。
答案 1 :(得分:1)
尝试删除repr
?
lst = file_obj.readline().split(" ")
重点是,您应该至少print
个变量lst
和w
才能看到它们是什么。
答案 2 :(得分:0)
比较Python中的unicode字符串:
a = u'Artur'
print(a)
b = u'\u0041rtur'
print(b)
if a == b:
print('the same')
结果:
Artur
Artur
the same