0

テーブル内の選択された行から、発生頻度に基づいてフレーズを抽出してランク付けするにはどうすればよいですか?

例1:http ://developer.yahoo.com/search/content/V1/termExtraction.html

例2: http: //mirror.me/i/love

INPUT:
CREATE TABLE phrases (
    id  BIGSERIAL,
phrase VARCHAR(10000)
);

INSERT INTO phrases (phrase) VALUES (‘Italian sculptors and painters of the renaissance favored the Virgin Mary for inspiration.’)
INSERT INTO phrases (phrase) VALUES (‘Andrea Bolgi was an italian sculptor’)

DESIRED OUTPUT:
phrase | weight
italian sculptor  |  5
virgin mary | 2
painters | 1
renaissance | 1
inspiration | 1
Andrea Bolgi | 1

フレーズではなく単語だけを見つけるには、

SELECT * FROM ts_stat('SELECT to_tsvector(''simple'', phrase) FROM phrases')
ORDER BY nentry DESC, ndoc DESC, word;

いくつかのメモ:

  • フレーズには「ストップワード」を含めることができます(例:「答えやすい」</ li>
  • 理想的には、英語のバリエーションと同義語は自動的にグループ化されます。

pg_trgmは役に立ちますか?(2語と3語のフレーズしか見つからなくても大丈夫です)。どのくらい正確に?

関連する質問:

4

1 に答える 1

1

私はCraigに同意します。これは、tsearch2が意図したことや、他の既存のPostgreSQLツールの範囲をはるかに超えていることです。ただし、これはdbエンジンで行うにはそれほど悪くないかもしれないと思います。PostgreSQLの長所の1つはプログラム可能性であり、この長所は非常に十分に活用されていないオプションを提供します。

Craigが指摘しているように、これはSQL自体ではなく自然言語処理のドメインであるため、最初に実行したいのは、PostgreSQLがサポートするストアドプロシージャ言語をサポートする自然言語処理ツールキットに落ち着くことです。言い換えれば、Perl、Python、Cなどをサポートするものが必要です。PostgreSQLがサポートするものは何でも、快適に作業できます。

2番目のステップは、このツールキットの関数型インターフェースをストアドプロシージャ言語で作成することです。これはテキストを取り込み、PostgreSQLが適度にうまく処理できるある種のタイプのフレーズ内訳を出力する必要があります。GINインデックスなどに影響するため、タイプに注意する必要があります。

そこから、データベースインターフェイスとクエリに組み込むことができます。

于 2013-04-13T04:11:39.010 に答える