如何比较具有不同unicode的两个字符串?

How to compare two strings with different unicode?

当我进行字符串比较时,我发现 2 个字符串不相等,即使它们相等。

我正在从 2 个 PDF 中提取文本。提取的文本是相同的。但我可以看到其中一个字体发生了一些变化。我不明白为什么?

str1 = 'Confirmations'

str2 = 'Confirmations'

str1 == str2

问题是第一种情况下字符串中的"fi"是连字(https://en.wikipedia.org/wiki/Typographic_ligature),而第二种情况是"f"和[=21=之和].

您可以使用一个函数来检查连字是否存在并将其替换为纯文本

def ligature(string):
    if 'fi' in string:
        string.replace('fi', 'fi')
    return string

如果您在文本中发现更多连字,您还可以为其他连字添加其他 if 语句。

使用 difflib 库,您可以看到要比较的字符串之间存在明显差异。要自己检查它,你可以尝试如下指令:

>>> import difflib
>>> str2 = 'Confirmations'
>>> str1 = 'Confirmations'
>>> print('\n'.join(difflib.ndiff([str1], [str2])))

产生

- Confirmations
?    ^

+ Confirmations
?    ^^

>>>

您需要比较字符串的规范化形式以忽略不相关的印刷差异。

例如:

In [59]: import unicodedata

In [60]: str1 = 'Confirmations'

In [61]: str2 = 'Confirmations'

In [62]: str1 == str2
Out[62]: False

In [63]: unicodedata.normalize('NFKD', str1) == unicodedata.normalize('NFKD', str2)
Out[63]: True