web-dev-qa-db-ja.com

Python:文字列のセマンティック類似性スコア

一対の文の意味的類似性スコアを計算するためのライブラリはありますか?

WordNetのセマンティックデータベース、および2単語のスコアを生成する方法は知っていますが、ポートステミング、単語の削除の停止などのすべての前処理タスクを文全体と出力で実行するライブラリを探しています2つの文の関連性のスコア。

前処理ステップの配列を使用してスコアを計算する.NETフレームワークを使用して記述された work が進行中であることがわかりました。 Pythonでこれを行うプロジェクトはありますか?

スコアを見つけるのに役立つ一連の操作を探しているわけではありません( here が求められます)
各ステージを独自に実装するか、文のペアで機能するように異なるライブラリの関数を接着したいのですが、主にデータの推論をテストするツールとして必要です。


EDIT:NLTKを使用して、2つの文で繰り返されるすべての単語のペアのスコアを計算し、結果が、それが類似性の正当な推定値であるかどうかはわかりません。さらに、長い文字列の場合はかなり時間がかかります。
再び、私はすでにこれをインテリジェントに実装しているプロジェクト/ライブラリを探しています。これを可能にするもの:

import amazing_semsim_package
str1='Birthday party ruined as cake explodes'
str2='Grandma mistakenly bakes cake using gunpowder'

>>similarity(str1,str2)
>>0.889
42
user8472

これについて私が見た中で最高のパッケージは、Gensimで、 Gensimホームページ にあります。私は何度も使ってきましたが、全体的に使いやすさにとても満足しています。 Pythonで書かれており、簡単に tutorial を使用して開始できます。9つの文字列を比較します。 pip経由でインストールできるので、インストールするのに苦労することはないでしょう。

どのスコアリングアルゴリズムを使用するかは、問題のコンテキストに大きく依存しますが、基本的なものが必要な場合は、LSI機能から始めることをお勧めします。 (それがチュートリアルの手順です。)

Gensimのチュートリアルを実行すると、Similarities関数を使用して2つの文字列を比較する手順が示されます。これにより、含まれているテキストに基づいて、スティングが互いに、または他のスティングとどのように比較されるかを確認できます。

仕組みの背後にある科学に興味がある場合は、 このペーパー をご覧ください。

46
Justin Muller

残念ながら、私はPYであなたを助けることはできませんが、辞書を使用して文間のセマンティック比較を達成する私の古いプロジェクトを見ることができます(ベクトル空間分析を実装するPYで後でコーディングすることができます)。 JavaからPYに変換するのにコーディングのほんの数時間でなければなりません。 https://sourceforge.net/projects/semantics/

3
Damir Olejar