当我进行字符串比较时,我得到两个字符串不相等,即使它们相等。
我正在从 2 个 PDF 中提取文本。提取的文本是相同的。但我可以看到其中一个字体发生了一些变化。我不明白为什么?
str1 = '确认'
str2 = '确认'
str1 == str2
错误的
当我进行字符串比较时,我得到两个字符串不相等,即使它们相等。
我正在从 2 个 PDF 中提取文本。提取的文本是相同的。但我可以看到其中一个字体发生了一些变化。我不明白为什么?
str1 = '确认'
str2 = '确认'
str1 == str2
错误的
问题是第一种情况下字符串中的“fi”是连字(https://en.wikipedia.org/wiki/Typographic_ligature),而第二种情况是“f”和“i”之和。
您可以使用函数来检查连字是否存在并将其替换为纯文本
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