表記ゆれ補正

 まあ、あれです。  集計をいろいろやっていると、表記ゆれというものに悩まされることがあります。
 同じ会社名でも 株式会社日本銀行、とか(株)日本銀行とか、鞄本銀行とか。(最後のは機種依存文字)。英数字は半角全角入り乱れるし、これをキーにして集計しようとするともう大変。表計算のワークシートで「この列は会社名だよ」と分かっていれば、それを取り出して重複の削除を行った後、ああ、これだけの表記ゆれがあるのか、と目星をつけて変換しまくり一つにまとめる、という力技もあるが、さすがにハード。1バイト文字にできるものは全部1バイトに、という発想もあるがそれやると本来インターネットではご法度の半角カナを量産することになる。つまりデータの共有が心もとなくなる。
 中黒が全角か半角か、なんてプロポーショナルフォントならすぐには見分け付かないぞ。

 先達の知恵にすがろうとサンプルプログラムを検索したが、力技でReplace並べたようなものしか見つからなかった。しかしこれはとても役に立った。「しゃーない。自分で作ろう」という決断を促してくれたからである。

 Replace関数を使いまくるもののどこが良くないかというと、メンテ性が悪いからである。「あ、こんな表記ゆれもあるんだ」を新発見したらいちいちソースを修正しないといけない。あとのことを考えて、できるだけ似たような修正の近くに。ついでに言うとリプレース関数を幾つつなげればいいのか見当がつかない。A−Z、a−z、0−9、ア−ン(これは半角)だけでもいったい何行になるか。

 というわけで表記ゆれ変換テーブルを作って起動時に読み込ませ、それに従って置換する、というマクロを作った。コードそのものよりもテーブルを作るのに時間がかかったことは言うまでもない。全角カッコと半角カッコとか、延ばす音を入れた場合とか、若干ながら初音ミクの苦労が分かった。
 テーブルはこんな感じ
x
y
z
(
)

 アルゴリズムには改善の余地があるだろうが、そこそこ満足すべき速度で動いているのでこれでよしとする。なにしろ早く使いたい。3文字以上の変換に対応してないのはとりあえずよしとしてくれ。(できるのだが、ちょっとアクロバティックになる。変換後が3文字以上は現状で可能。)

フリーソフト開発秘話、目次
ホーム