1

当我进行字符串比较时,我得到两个字符串不相等,即使它们相等。

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

str1 = '确认'

str2 = '确认'

str1 == str2

错误的

4

3 回答 3

1

问题是第一种情况下字符串中的“fi”是连字(https://en.wikipedia.org/wiki/Typographic_ligature),而第二种情况是“f”和“i”之和。

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

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

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

于 2019-07-26T12:33:22.797 回答
0

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

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

这产生

- Confirmations
?    ^

+ Confirmations
?    ^^

>>>
于 2019-07-26T12:35:00.783 回答
0

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

例如:

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
于 2021-10-06T09:09:26.083 回答