Postgresのテキスト文字列を含むフィールドから、個別の単語とそれぞれのカウントを識別することは可能ですか?
3 に答える
このようなもの?
some_pk を選択し、 regexp_split_to_table(some_column, '\s') as word FROM some_table
明確な単語を取得するのは簡単です。
明確な単語を選択 から ( SELECT regexp_split_to_table(some_column, '\s') を単語として FROM some_table ) t
または各単語のカウントを取得します。
SELECT ワード、カウント(*) から ( SELECT regexp_split_to_table(some_column, '\s') を単語として FROM some_table ) t GROUP BY 単語
これには、PostgreSQL のテキスト検索機能を使用することもできます。たとえば、次のようになります。
SELECT * FROM ts_stat('SELECT to_tsvector(''hello dere hello hello ridiculous'')');
が得られます:
word | ndoc | nentry
---------+------+--------
ridicul | 1 | 1
hello | 1 | 3
dere | 1 | 1
(3 rows)
simple
(PostgreSQL は、言語依存のステミングとストップ ワードの削除を適用します。これは、必要な場合とそうでない場合があります。ストップ ワードの削除とステミングは、辞書の代わりに を使用して無効にすることができenglish
ます。以下を参照してください。)
ネストされたSELECT
ステートメントは、tsvector 列を生成する任意の select ステートメントにすることができるため、関数を任意の数のテキスト フィールドに適用し、ドキュメントの任意のサブセットに対してto_tsvector
それらを単一の に連結する関数に置き換えることができます。次に例を示します。tsvector
SELECT * FROM ts_stat('SELECT to_tsvector(''english'',title) || to_tsvector(''english'',body) from my_documents id < 500') ORDER BY nentry DESC;
title
最初の 500 個のドキュメントのおよびbody
フィールドから取得された合計単語数のマトリックスが生成され、出現回数の降順で並べ替えられます。各単語について、それが出現するドキュメントの数 (ndoc
列) も取得します。
詳細については、ドキュメントを参照してください: http://www.postgresql.org/docs/current/static/textsearch.html
単語間のスペース''または他の区切り記号で分割する必要があります。意図されていない限り、「s」ではありません。たとえば、「myWordshere」を「myWord」および「here」として扱います。
SELECT word, count(*)
FROM (
SELECT regexp_split_to_table(some_column, ' ') as word
FROM some_table
) t
GROUP BY word