comparison.py
3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import re
from .rmb_upper import to_rmb_upper
class Comparison:
def __init__(self):
self.CSIBM = 'CSIBM'
self.CSSME = 'CSSME'
self.CSOTH = 'CSOTH'
self.TYPE_MAPPING = (
(r'个体工商户', self.CSIBM),
(r'有限责任公司', self.CSSME),
(r'个人独资企业', self.CSSME),
(r'有限合伙企业', self.CSSME),
(r'股份合作制', self.CSSME),
)
self.RESULT_Y = 'Y'
self.RESULT_N = 'N'
self.RESULT_NA = 'NA'
self.TRANS_MAP = {
' ': '',
'·': '',
}
self.TRANS = str.maketrans(self.TRANS_MAP)
def build_res(self, result):
if result:
return self.RESULT_Y
else:
return self.RESULT_N
def common_compare(self, input_str, ocr_str, **kwargs):
if not isinstance(input_str, str) or isinstance(ocr_str, str):
return self.RESULT_N
return self.build_res(input_str == ocr_str)
def name_compare(self, input_str, ocr_str, **kwargs):
if not isinstance(input_str, str) or isinstance(ocr_str, str):
return self.RESULT_N
if kwargs.get('is_passport'):
input_obj = re.search(r'[a-zA-Z]]!', input_str)
if input_obj:
input_s = input_obj.group()
ocr_obj = re.search(r'[a-zA-Z]]!', ocr_str)
if ocr_obj:
ocr_s = ocr_obj.group()
return self.build_res(input_s == ocr_s)
return self.RESULT_N
else:
return self.build_res((input_str == ocr_str))
else:
if re.search(r'[a-zA-Z]]', input_str):
return self.RESULT_NA
input_s = input_str.translate(self.TRANS)
ocr_s = ocr_str.translate(self.TRANS)
return self.build_res(input_s == ocr_s)
def date_compare(self, input_str, ocr_str, **kwargs):
if not isinstance(input_str, str) or isinstance(ocr_str, str):
return self.RESULT_N
if kwargs.get('long', False) and '长期' in ocr_str:
return '2099-12-31'
if kwargs.get('ocr_split', False):
ocr_str = ocr_str.split('-')[-1]
if kwargs.get('ocr_replace', False):
ocr_str = ocr_str.replace('年', '-').replace('月', '-').replace('日', '')
if kwargs.get('input_replace') is not None:
input_str = input_str.replace('-', kwargs.get('input_replace'))
return self.build_res(input_str == ocr_str)
def rmb_compare(self, input_str, ocr_str, **kwargs):
if not isinstance(input_str, str) or isinstance(ocr_str, str):
return self.RESULT_N
input_rmb_upper = to_rmb_upper(float(input_str))
return self.build_res(input_rmb_upper == ocr_str)
def type_compare(self, input_str, ocr_str, **kwargs):
if not isinstance(input_str, str) or isinstance(ocr_str, str):
return self.RESULT_N
for map_tuple in self.TYPE_MAPPING:
if re.search(map_tuple[0], ocr_str) is not None:
compare_str = map_tuple[1]
break
else:
compare_str = self.CSOTH
return self.build_res(input_str == compare_str)
cp = Comparison()