11

Postgresのテキスト文字列を含むフィールドから、個別の単語とそれぞれのカウントを識別することは可能ですか?

4

3 に答える 3

23

このようなもの?

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 単語
于 2011-03-07T23:06:03.967 に答える
15

これには、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

于 2014-07-24T09:42:28.477 に答える
6

単語間のスペース''または他の区切り記号で分割する必要があります。意図されていない限り、「s」ではありません。たとえば、「myWordshere」を「myWord」および「here」として扱います。

SELECT word, count(*)
FROM ( 
  SELECT regexp_split_to_table(some_column, ' ') as word
  FROM some_table
) t
GROUP BY word
于 2012-06-19T17:23:00.900 に答える