別棟備忘録4

*

Excelのマクロでbigram ベネッセ―河合塾大学コードの対応①

      2020/03/03

概要についてはこちらのエクセルファイルcode_bene_kawai94.xlsmを参照し、マクロを動かしてみると話が早い。
④と⑤のボタンを押してみましょう。

動作の様子
code

前置きのページ にあるように、ベネッセと河合塾の大学コードの対応を取ることを目的とした試み。

例えば、北海道教育大学旭川校について、
ベネッセは北教大旭川校教育教員/理科前
河合塾は北海道教育大教育旭川校教員-理科前

程度の揺れがある。この2つを同一の募集単位と判断すべく、
String Distanceで比較し、ベネッセの表記に最も近い河合塾の名称を拾い、「大学コード寄せ」をする。

記憶によれば、当初はレーベンシュタイン距離を取ろうとして検索し、次のVBAコードに行きついた。
(出所のサイトを失念。検索しても出てこない?)

Function Levenshtein(ByVal string1 As String, ByVal string2 As String) As Long

Dim i As Long, j As Long
Dim string1_length As Long
Dim string2_length As Long
Dim distance() As Long

string1_length = Len(string1)
string2_length = Len(string2)
ReDim distance(string1_length, string2_length)

For i = 0 To string1_length
distance(i, 0) = i
Next

For j = 0 To string2_length
distance(0, j) = j
Next

For i = 1 To string1_length
For j = 1 To string2_length
If Asc(Mid$(string1, i, 1)) = Asc(Mid$(string2, j, 1)) Then
distance(i, j) = distance(i – 1, j – 1)
Else
distance(i, j) = Application.WorksheetFunction.Min _
(distance(i – 1, j) + 1, _
distance(i, j – 1) + 1, _
distance(i – 1, j – 1) + 1)
End If
Next
Next

Levenshtein = distance(string1_length, string2_length)
End Function

これでLevenshtein(A,B)でAとBのレーベンシュタイン距離がとれる。

ところが、その後アドバイザーの方からN-gramの方が適切との助言をいただき、
ExcelでN-gramってみる
を参照し、結果的にはそちらを採用。

河合塾の表記について事前に
①北海道教育→北教 置換
②学部名(昼間)消す
③学科名-を/に
④学部(夜間主)を夜に
⑤学部学科()を消す
⑥学科:工学を工に
⑦学科:方式をとる
⑧学部:昼間主をとる
⑨学部:言語文化→言語文化言文/
⑩学科: ・ をとる
の置換をすることで、約94%の一致率となる。

国公立だけで3500募集単位あるので、200くらいエラーが出ます。
教員はExcelをよく使うので、これで完結できれば申し送り等々簡単でよかったのですが、えいやっと見切ってPythonに活路を見出すことにした訳です。

 - stringDistance