【发布时间】:2012-11-04 21:46:38
【问题描述】:
如何从表格中的选定行中提取短语并根据它们出现的频率对其进行排名?
示例 1:http://developer.yahoo.com/search/content/V1/termExtraction.html
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;
一些注意事项:
- 短语可能包含“停用词”,例如“容易回答”
- 理想情况下,英语变体和同义词会自动分组。
pg_trgm 可以帮忙吗? (如果只找到 2 个和 3 个单词的短语就可以了)。具体如何?
相关问题:
【问题讨论】:
-
我想说这WAY超出了数据库引擎的范围。您可能需要natural language processing 工具来进行短语提取。然后,您可以将它们包装在 PL/Java、C 存储函数或其他任何东西中,并从数据库中使用它们。 PostgreSQL 应该如何知道“短语”是什么?也就是说,两三个词的约束可能会在数据库中实现。
-
如何拥有一个自定义词典,包含来自英语的所有 2&3 个常用词组,并为 ts_tovector 设置更高的优先级?如果这可行,我怎样才能轻松构建这本词典?
-
实际上,那本字典太大了。可能的组合太多了。
-
您也许可以使用自定义编码的 tsearch2 解析器来完成。不过工作量还不错。
标签: postgresql data-mining text-analysis