データステップ100満開 文字列がどれくらい類似しているかを定量化する

「データステップ100満開」という検索ワードでこのブログが検索されていて、春めいていて素敵だなぁと思いました。

「データステップ100満開」と「データステップ100万回」ってどれぐらい似てるでしょうか?検索で出てくるわけだから、まあ似てるんでしょう。
その似てるさ度合いを数値化してみます。
(Googleとかの検索アルゴリズムは、類似度だけじゃなく事前情報をつかって、なんか統計的な凄いことしてるんでしょう。僕はわかりません)


文字列がどの程度類似しているかを定量化する術は多く研究化されています。僕は全く門外漢なので、さわりだけ。
有名なのが編集距離の概念で、ようはどれぐらい操作を加えたら一致するのかで考え、操作の回数やコスト(1文字替えて一致するなら100ポイントみたいな)合計でもって、似てるっぽさをだそうという感じです。

明らかアルファベットで構成される言語に向いてそうですが、まあそこは置いておいて。

data Q1;
length X Y $50.;
X='データステップ100万回';Y='データステップ100満開';output;
X='データステップ100万回';Y='データステップ1万回';output;
X='データステップ100万回';Y='デデデータステップ100万回';output;
X='データステップ100万回';Y='出た!ステップ100万買い';output;
X='ABC';Y='ABC';output;
X='ABC';Y='AABC';output;
X='ABC';Y='AB';output;
X='ABC';Y='ABD';output;
X='ABC';Y='CAB';output;
X='ABC';Y='AAA';output;
X='ABC';Y='XYZ';output;
X='ABC';Y='ABCABC';output;
X='ABC';Y='A B C';output;
run;

こういうデータがあったとします。

それに3つの関数をかけてみます

data A1;
set Q1;
SP=SPEDIS(X,Y);
CG=COMPGED(X,Y);
CLV=COMPLEV(X,Y);
run;











SPEDIS関数のスコア計算の基準
http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000245949.htm

COMPGED関数のスコア計算の基準
http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002206133.htm

COMPLEV関数のスコア計算の基準
http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002206137.htm

だいたい同じ傾向ですが、微妙な順序の違いが面白いですね!



0 件のコメント:

コメントを投稿