あるものに対してキャッチコピーのような文章を募集したところ、約4万件の回答を得ました。

この投稿作品はデータベースに収められていて、文字数は1件あたり50文字前後の日本語です。

この中から「類似した内容を持つレコード」をグルーピングすることって、出来るのでしょうか。
機械的な処理になっても構わないですが、このような処理を行いたい場合に何をすればよいかの検討がつきません。

データ自体は通番と投稿文の2カラムで、これを PostgreSQL に投入して操作していますが、もし PostgreSQL 以外のデータベースで実現できるのであれば、それも知りたいです。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/05/06 02:05:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント70pt

何をもって「類似」とするか、その考え方にもよりますが、出来ます。データベースの違いは問題になりませんが、類似度を計算するためのプログラミング言語が必要です。


livedoor開発チームが、livedoorキーワードに登録されている内容が Wikipedia の丸写しでないことをチェックするために perl の String::Trigram を使っているとのこと。公式ブログの記事「String::Trigram でテキストの類似度を測る」を参考にしてください。

String::Trigram のアルゴリズムはN-gram言語モデルと呼ばれるもので、Google検索エンジンなどでも利用されています。

Python や PHP での実装方法については「テキストの類似度をプログラムで処理するには」が参考になるでしょう。

id:chocococoa

String::Trigram

python-ngram

PHP:similar_text

PHP: levenshtein

ありがとうございます!

※もしやPHPのMLでお見かけするぱぱぱふぅさんでしょうか!

2009/04/29 07:24:28

その他の回答2件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633ここでベストアンサー

ポイント70pt

何をもって「類似」とするか、その考え方にもよりますが、出来ます。データベースの違いは問題になりませんが、類似度を計算するためのプログラミング言語が必要です。


livedoor開発チームが、livedoorキーワードに登録されている内容が Wikipedia の丸写しでないことをチェックするために perl の String::Trigram を使っているとのこと。公式ブログの記事「String::Trigram でテキストの類似度を測る」を参考にしてください。

String::Trigram のアルゴリズムはN-gram言語モデルと呼ばれるもので、Google検索エンジンなどでも利用されています。

Python や PHP での実装方法については「テキストの類似度をプログラムで処理するには」が参考になるでしょう。

id:chocococoa

String::Trigram

python-ngram

PHP:similar_text

PHP: levenshtein

ありがとうございます!

※もしやPHPのMLでお見かけするぱぱぱふぅさんでしょうか!

2009/04/29 07:24:28
id:pahoo No.3

回答回数5960ベストアンサー獲得回数633

ポイント10pt

バレちゃいましたね(苦笑)。その通り、PHPのMLに出入りしている者です。


さて、面白いテーマだったので、similar_text、N-gram、形態素解析(KAKASI、Yahoo!WebAPI)の3種類の方式を使った類似度計算サンプル・プログラムを作ってみました。いずれもPHPスクリプトで、下記で紹介しています。

案の定、方式によって結果に大きな差が出ました。


形態素解析は機械的な処理ではありますが、日本語の構造を意識しているので、同じようなキャッチコピーをふるい分けるという目的に適っていると思います。

しかし、CPUパワーを必要とする処理なので、1文50文字前後とはいえ、4万件を一気に処理するのは厳しいかもしれません。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません