一尘不染

如何确定人物相似度?

algorithm

我正在使用Levenshtein距离在OCR之后找到类似的字符串。但是,对于某些字符串,编辑距离是相同的,尽管视觉外观明显不同。

例如,字符串Co将返回以下匹配项:

CY (1)
CZ (1)
Ca (1)

考虑到,这Co是来自OCR引擎的结果,它Ca比那些更可能匹配。因此,在计算了Levenshtein距离之后,我想通过按视觉相似性排序来优化查询结果。为了计算这种相似度,我想使用标准的无衬线字体,例如Arial。

是否可以为此目的使用一个库,或者我自己可以实现该库?另外,还有其他字符串相似度算法比Levenshtein距离更精确吗?


阅读 464

收藏
2020-07-28

共1个答案

一尘不染

如果您正在寻找一张表格,该表格可让您根据视觉相似性来计算各种“更换成本”,那么我一直在寻找这样的东西,但收效甚微,因此我开始将其视为新事物。问题。我不使用OCR,但我正在寻找一种方法来限制概率输入中
错误键入 字符的搜索参数。由于由于人类在视觉上混淆了字符而导致键入错误,因此相同的原理也应适用于您。

我的方法是根据字母的笔画成分在8位字段中对字母进行分类。这些位从左到右是:

7: Left Vertical
6: Center Vertical
5: Right Vertical
4: Top Horizontal
3: Middle Horizontal
2: Bottom Horizontal
1: Top-left to bottom-right stroke
0: Bottom-left to top-right stroke

对于小写字符,左侧的降序记录在对角线中,而第1位则记录在对角线中。

通过该方案,我提出了以下值,这些值试图根据视觉相似性对字符进行排名。

m:               11110000: F0
g:               10111101: BD
S,B,G,a,e,s:     10111100: BC
R,p:             10111010: BA
q:               10111001: B9
P:               10111000: B8
Q:               10110110: B6
D,O,o:           10110100: B4
n:               10110000: B0
b,h,d:           10101100: AC
H:               10101000: A8
U,u:             10100100: A4
M,W,w:           10100011: A3
N:               10100010: A2
E:               10011100: 9C
F,f:             10011000: 98
C,c:             10010100: 94
r:               10010000: 90
L:               10000100: 84
K,k:             10000011: 83
T:               01010000: 50
t:               01001000: 48
J,j:             01000100: 44
Y:               01000011: 43
I,l,i:           01000000: 40
Z,z:             00010101: 15
A:               00001011: 0B
y:               00000101: 05
V,v,X,x:         00000011: 03

就目前而言,这对我而言太原始了,需要更多的工作。但是,您可以使用它,也可以对其进行调整以适合您的目的。该方案非常简单。此排名适用于等宽字体。如果使用的是Sans-
Serif字体,则可能必须重新处理这些值。

该表是一个混合表,包括所有大小写字符,但是如果将其分为大写和小写,则可能会更有效,并且还可以应用特定的大写字母。

请记住,这是早期实验。如果您想方设法改进它(例如,通过更改位序列),请随时进行改进。

2020-07-28