0

我正在尝试计算以 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 字符串?

4

3 回答 3

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'"]

请注意反斜杠(转义的 unicode 转义),第一个字符串以 . 开头,u'最后一个字符串以 . 结尾\\n'。这些值显然永远不会相等。

删除repr(), 并使用.split() 不带参数来删除尾随空格:

lst = file_obj.readline().split()

您的代码将起作用:

>>> res = u'خُداوند خُداوند خُداوند\n'.split()
>>> res[0] == res[1] == res[2]
True

您可能需要先对输入进行归一化;某些字符可以表示为一个 unicode 代码点或两个组合代码点。规范化将所有此类字符移动到组合或分解状态。请参阅规范化 Unicode

于 2013-11-03T10:28:56.687 回答
1

尝试删除repr?

lst = file_obj.readline().split(" ")

关键是您至少应该print像变量一样lst查看w它们是什么。

于 2013-11-03T10:16:22.613 回答
0

比较 Python 中的 unicode 字符串:

a = u'Artur'
print(a)
b = u'\u0041rtur'
print(b)

if a == b:
    print('the same')

结果:

Artur
Artur
the same
于 2013-11-03T10:21:03.677 回答