|
PHP の組み込み関数 similar_text を使うことで、異なる 2 つの文章の類似度を計算できる。もちろん日本語にも対応している。 ブログなどに投稿される文章の中には、Wikipedia や他人の記事を無断引用するケースが少なくない。今回のプログラムを使えば、2 つの文章の類似度を自動的に比較・判定することができるようになる。 |
サンプル・プログラム |
|
サンプル・プログラムの解説 |
|
|
プログラムの構造は簡単である。 POST 渡しされた 2 つのテキスト、$sour と $dest を関数 similar_text に投入しているだけである。 事前に、文字コードを UTF-8 に統一するために関数 mb_convert_string を通し、XSS* 対策として関数 mb_convert_string を通している。
0019: $sour = isset($_POST['sour']) ? $_POST['sour'] : ''; |
|
たとえば、「元のテキスト」として、以下の Wikipedia の引用文を入れる。これは「PHP: Hypertext Preprocessor」からの抜粋である。
PHP: Hypertext Preprocessor(ピー・エイチ・ピー ハイパーテキスト プリプロセッサー)とは、動的に HTML データを生成することによって、動的なウェブページを実現することを主な目的としたプログラミング言語、およびその言語処理系である。「比較するテキスト」には、以下の文章を入れてみよう。 PHP(Hypertext Preprocessor;ピー・エイチ・ピー)とは、動的に HTML データを生成することによって、動的なウェブページを実現すること目的としたプログラミング言語である。結果は 84.0% である。 2 つめの文章は、一見すると元の文章とは異なっているが、じつは Wikipedia の引用文の順番を変えただけである。 このような違いでは、かなり高い類似度の値となる。 次に、「比較するテキスト」に以下の文章を入れて実行してみていただきたい。これは「PHP とは何か」(ぱふぅ家のホームページ)の冒頭部分である。 「PHP(Hypertext Preprocessor)」は、オープンソースのサーバ・サイド・スクリプト言語である。結果は 21.7% となる。 なお、どこまでの値を「類似」とみなすかは、各人の判断にお任せする。 |
N-gram と類似度 |
|
|
テキストの隣り合う N 文字のことを N-gram* を呼ぶ。 異なる 2 つの文章の N-gram を総当たりで比較することで、たとえ文節の順番が異なっていても、登場する単語の種類と頻度の比較が可能となる。 N=3 の Tri-gram としてプログラムに実装したものが、Perl の String::Trigram である。これが livedoor で利用されているということが、公式ブログ「String::Trigram でテキストの類似度を測る」に記されている。 N-gram を用いた類似度計算は、Google のような全文検索でも利用されている。 ところで、組み込み関数 similar_text は、ソースを見ると、N-gram を忠実に実装しているわけではない。 類似度を計算するのに使える組み込み関数として levenshtein もあるが、こちらも N-gram ではない。 そこで次節では、PHP で N-gram にもとづく類似度計算プログラムを作ってみることにする。 |
|
(
この項つづく)
|
|
|
|
|
2009年04月29日 作成
2009年04月29日 更新
Copyright by studio pahoo, (C)2009
(※)本ページはリンクフリーですが、複製・転載時にはご一報ください。 ★本ページへのご意見・ご質問・お便りは、ここをクリックしてください。 |