回答編集履歴
3
d
test
CHANGED
@@ -132,9 +132,9 @@
|
|
132
132
|
|
133
133
|
姓名がどちらかわからないということであれば、次に2パターンを試せば、全パターン試したことになります。
|
134
134
|
|
135
|
-
列1 vs 列3 and 列2
|
135
|
+
列1 vs 列3 and 列2 vs 列4
|
136
136
|
|
137
|
-
列1 vs 列4 and 列2
|
137
|
+
列1 vs 列4 and 列2 vs 列3
|
138
138
|
|
139
139
|
|
140
140
|
|
2
d
test
CHANGED
@@ -132,9 +132,9 @@
|
|
132
132
|
|
133
133
|
姓名がどちらかわからないということであれば、次に2パターンを試せば、全パターン試したことになります。
|
134
134
|
|
135
|
-
列1 vs 列
|
135
|
+
列1 vs 列3 and 列2, 列4
|
136
136
|
|
137
|
-
列1 vs 列
|
137
|
+
列1 vs 列4 and 列2, 列3
|
138
138
|
|
139
139
|
|
140
140
|
|
1
あ
test
CHANGED
@@ -26,13 +26,13 @@
|
|
26
26
|
|
27
27
|
for r in range(1, sheet.max_row + 1):
|
28
28
|
|
29
|
-
data1.append({'
|
29
|
+
data1.append({'name1': sheet.cell(row=r, column=1).value,
|
30
30
|
|
31
|
-
'
|
31
|
+
'name2': sheet.cell(row=r, column=2).value})
|
32
32
|
|
33
|
-
data2.append({'
|
33
|
+
data2.append({'name1': sheet.cell(row=r, column=4).value,
|
34
34
|
|
35
|
-
'
|
35
|
+
'name2': sheet.cell(row=r, column=3).value})
|
36
36
|
|
37
37
|
print(data1)
|
38
38
|
|
@@ -48,21 +48,29 @@
|
|
48
48
|
|
49
49
|
for j, person2 in enumerate(data2):
|
50
50
|
|
51
|
-
|
51
|
+
match1 = Levenshtein.jaro(person1['name1'], person2['name1'])
|
52
52
|
|
53
|
-
|
53
|
+
match2 = Levenshtein.jaro(person1['name2'], person2['name2'])
|
54
54
|
|
55
|
-
# 姓の一致度
|
56
|
-
|
57
|
-
last_name_match = Levenshtein.jaro(person1['last'], person2['last'])
|
58
|
-
|
59
|
-
# 姓及び名の一致度が 0.9 以上の場合、一致したと判断する。
|
60
|
-
|
61
|
-
if
|
55
|
+
if match1 > 0.9 and match2 > 0.9:
|
62
56
|
|
63
57
|
matches.append([i, j])
|
64
58
|
|
59
|
+
break
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
match1 = Levenshtein.jaro(person1['name1'], person2['name2'])
|
64
|
+
|
65
|
+
match2 = Levenshtein.jaro(person1['name2'], person2['name1'])
|
66
|
+
|
65
|
-
|
67
|
+
if match1 > 0.9 and match2 > 0.9:
|
68
|
+
|
69
|
+
matches.append([i, j])
|
70
|
+
|
71
|
+
break
|
72
|
+
|
73
|
+
|
66
74
|
|
67
75
|
print(matches)
|
68
76
|
|
@@ -72,23 +80,23 @@
|
|
72
80
|
|
73
81
|
out_sheet = wb.create_sheet('matches')
|
74
82
|
|
75
|
-
for row, [i, j] in enumerate(matches):
|
83
|
+
for row, [i, j] in enumerate(matches, 1):
|
76
84
|
|
77
85
|
# データベース1の一致した行の情報
|
78
86
|
|
79
|
-
out_sheet.cell(row=
|
87
|
+
out_sheet.cell(row=row, column=1).value = i + 1
|
80
88
|
|
81
|
-
out_sheet.cell(row=
|
89
|
+
out_sheet.cell(row=row, column=2).value = data1[i]['name1']
|
82
90
|
|
83
|
-
out_sheet.cell(row=
|
91
|
+
out_sheet.cell(row=row, column=3).value = data1[i]['name2']
|
84
92
|
|
85
93
|
# データベース2の一致した行の情報
|
86
94
|
|
87
|
-
out_sheet.cell(row=
|
95
|
+
out_sheet.cell(row=row, column=4).value = j + 1
|
88
96
|
|
89
|
-
out_sheet.cell(row=
|
97
|
+
out_sheet.cell(row=row, column=5).value = data2[j]['name1']
|
90
98
|
|
91
|
-
out_sheet.cell(row=
|
99
|
+
out_sheet.cell(row=row, column=6).value = data2[j]['name2']
|
92
100
|
|
93
101
|
|
94
102
|
|
@@ -104,10 +112,34 @@
|
|
104
112
|
|
105
113
|
```
|
106
114
|
|
115
|
+
1 TANAKA SHOICHI 3 SHOUICHI TANAKA
|
116
|
+
|
107
117
|
2 YAMADA TARO 1 YAMADA TARO
|
118
|
+
|
119
|
+
|
108
120
|
|
109
121
|
```
|
110
122
|
|
111
123
|
|
112
124
|
|
113
125
|
データ1の2行目「YAMADA TARO」とデータ2の1行目「YAMADA TARO」が一致したことを表している。
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
## 追記
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
姓名がどちらかわからないということであれば、次に2パターンを試せば、全パターン試したことになります。
|
134
|
+
|
135
|
+
列1 vs 列2 and 列3, 列4
|
136
|
+
|
137
|
+
列1 vs 列3 and 列2, 列4
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
![イメージ説明](aa3fcaa30c596554d7c74e7eb7089979.png)
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
丸の中の数字は列数
|