简而言之,我有一个包含普通散文的 Postgres 列,我想确定所有行中x
最常用的单词(“单词”是由空格分隔的一组字符,但不是停用词)。
我找到了两个几乎达到目标的解决方案:
SELECT *
FROM ts_stat($$SELECT to_tsvector('english', title) FROM item$$)
ORDER BY ndoc DESC
LIMIT 50;
Run Code Online (Sandbox Code Playgroud)
这很好,除了它返回词干。
SELECT UNNEST(string_to_array(title, ' ')) AS word, COUNT(*) AS ct
FROM item
GROUP BY 1
ORDER BY 2 DESC
LIMIT 50;
Run Code Online (Sandbox Code Playgroud)
这个返回完整的词,但包括停用词。
为简单起见:应该在 上找到停用词TABLE stop_words (lowercase_stopword text PRIMARY KEY)
。
有人可以帮我上网吗?
回答这个问题,
鉴于此表(根据问题构建):
CREATE TABLE wordcount (id SERIAL NOT NULL PRIMARY KEY, description TEXT NOT NULL);
INSERT INTO wordcount (description) VALUES ('What a great day');
INSERT INTO wordcount (description) VALUES ('This is a product. It is useful');
Run Code Online (Sandbox Code Playgroud)
产生这个结果:
id | word_count | unique_word_count | Description
---------+------------+-------------------+---------------
1 | 4 | 4 | What a great day
2 | 7 | 6 | This is a product. It is useful
Run Code Online (Sandbox Code Playgroud)
我给出了(正确的)答案,你可以在这里找到。
然而,在评论中,OP 然后又问了一个问题——如果有问题的字符串是['a', ' ', ' ', …
postgresql optimization string-manipulation query-performance