Postgres中字符串的单词频率?

Mar*_*rty 9 postgresql text nlp word-frequency

是否可以从Postgres中包含文本字符串的字段中识别每个字符和计数?

a_h*_*ame 19

像这样的东西?

SELECT some_pk, 
       regexp_split_to_table(some_column, '\s') as word
FROM some_table

获得不同的单词很容易:

SELECT DISTINCT word
FROM ( 
  SELECT regexp_split_to_table(some_column, '\s') as word
  FROM some_table
) t

或得到每个单词的计数:

SELECT word, count(*)
FROM ( 
  SELECT regexp_split_to_table(some_column, '\s') as word
  FROM some_table
) t
GROUP BY word


Cha*_*tha 13

您也可以使用PostgreSQL文本搜索功能,例如:

SELECT * FROM ts_stat('SELECT to_tsvector(''hello dere hello hello ridiculous'')');
Run Code Online (Sandbox Code Playgroud)

会产生:

  word   | ndoc | nentry 
---------+------+--------
 ridicul |    1 |      1
 hello   |    1 |      3
 dere    |    1 |      1
(3 rows)
Run Code Online (Sandbox Code Playgroud)

(PostgreSQL应用依赖于语言的词干和停止词删除,这可能是你想要的,也可能不是.停止词删除和词干可以通过使用simple而不是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;
Run Code Online (Sandbox Code Playgroud)

将产生从前500个文档的titlebody字段中获取的总字数的矩阵,按出现次数的降序排序.对于每个单词,您还将获得它出现的文档数(ndoc列).

有关更多详细信息,请参阅文档:http://www.postgresql.org/docs/current/static/textsearch.html


小智 5

单词之间应以空格''或其他分隔符号分隔;除非打算这样做,否则不要用“ s”表示,例如,将“ myWordshere”视为“ myWord”和“ here”。

SELECT word, count(*)
FROM ( 
  SELECT regexp_split_to_table(some_column, ' ') as word
  FROM some_table
) t
GROUP BY word
Run Code Online (Sandbox Code Playgroud)

  • \ s是任何空白字符的有效正则表达式字符集 (4认同)