PHPで2つの文章の類似度を計算する(WebAPI版)

(1/1)
PHP で 2 つの文章の類似度を計算する」および「PHP で 2 つの文章の類似度を計算する(KAKASI版)」で、PHP の組み込み関数  similar_text  や N-gram、「KAKASI」による形態素解析を利用して、異なる 2 つの文章の類似度を計算する方法を紹介した。今回は、KAKASI の代わりに「PHP で形態素解析を行う」で紹介した Yahoo!JAPAN の「日本語形態素解析 Web サービス」を利用し、2 つの文章の類似度を計算プログラムを作ってみる。

サンプル・プログラム

サンプル・プログラムの流れは、「PHP で形態素解析を行う」と「PHP で 2 つの文章の類似度を計算する(KAKASI版)」を組み合わせただけなので、ここでは省略する。

なお、「日本語形態素解析 Web サービス」を利用するためには、アプリケーション ID を取得する必要がある。https://e.developer.yahoo.co.jp/register から無料で取得できる。
取得した ID は定数 APPLICATION_ID に格納すること。

ダウンロード(PHP 4/5/7)

サンプル・プログラムの実行例

PHP で 2 つの文章の類似度を計算する(KAKASI版)」と同じテキストを使って実行してみよう。

まず、「元のテキスト」として、以下の Wikipedia の引用文を入れる。これは「PHP: Hypertext Preprocessor」からの抜粋である。

PHP: Hypertext Preprocessor(ピー・エイチ・ピー ハイパーテキスト プリプロセッサー)とは、動的に HTML データを生成することによって、動的なウェブページを実現することを主な目的としたプログラミング言語、およびその言語処理系である。
PHP は、HTML 埋め込み型のサーバサイド・スクリプト言語として分類される。この言語処理系自体は、C言語で記述されている。


「比較するテキスト」には、以下の文章を入れてみよう。

PHP(Hypertext Preprocessor;ピー・エイチ・ピー)とは、動的に HTML データを生成することによって、動的なウェブページを実現すること目的としたプログラミング言語である。
PHP は、HTML 埋め込み型のサーバサイド・スクリプト言語の一種で、処理系自体は C言語で記述されている。


結果は 98.8% である。
2 つめの文章は、一見すると元の文章とは異なっているが、じつは Wikipedia の引用文の順番を変えただけである。
このような違いでは、かなり高い類似度の値となる。

次に、「比較するテキスト」に以下の文章を入れて実行してみていただきたい。これは「PHP とは何か」(ぱふぅ家のホームページ)の冒頭部分である。

「PHP(Hypertext Preprocessor)」は、オープンソースのサーバ・サイド・スクリプト言語である。
サーバ・サイド・スクリプトとは、データベースサーバなどのサーバ群と Web ブラウザ(クライアント)を結ぶインターフェースの役割をするもので、Web サーバ上で動作する。HTML に比べて、動的なページを実現することができる。


結果は 61.0% となる。

PHP で 2 つの文章の類似度を計算する(KAKASI版)」での、最初の比較例では 75.5%、2番目の比較例では 45.1% だった。
同じ形態素解析という方法でも、形態素に分解するアルゴリズムが違うことで、これだけの差が出る。

ちなみに、PHP とはまったく関係ない以下のテキストを「比較するテキスト」に入れてみると――

さきたま古墳公園(埼玉県行田市大字埼玉4834)は、8 基の前方後円墳と 1 基の円墳が集中する東日本最大の古墳遺跡である。
1938 年(昭和 13 年)8 月に国の史跡の指定を受け、1968 年には金錯銘鉄剣(きんさくめいてっけん)が出土したことで一躍脚光を浴びた。


類似度は 14.5% になる。一方、KAKASI を使った結果では 9.0% である。
Yahoo! WebAPI の方が KAKASI より厳しい結果となっている。

参考サイト

(この項おわり)
header