0

从表中选定的行中,如何根据短语出现的频率提取短语并对其进行排名?

示例 1:http: //developer.yahoo.com/search/content/V1/termExtraction.html

示例 2: http: //mirror.me/i/love

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;

一些注意事项:

  • 短语可以包含“停用词”,例如“易于回答”</li>
  • 理想情况下,英语变体和同义词会自动分组。

pg_trgm 有帮助吗?(如果只找到 2 个和 3 个单词的短语就可以了)。具体如何?

相关问题:

4

1 回答 1

1

我同意 Craig 的观点,这肯定超出了 tsearch2 以及任何其他现有 PostgreSQL 工具的范围。但是,我确实认为在 db 引擎中这样做可能还不错。PostgreSQL 的优势之一是可编程性,这种优势为您提供了一些未被充分利用的选项。

正如 Craig 所指出的,这是自然语言处理的领域,而不是 SQL 本身的领域,因此您要做的第一件事就是选择一个支持 PostgreSQL 支持的存储过程语言的自然语言处理工具包。换句话说,你想要支持 Perl、Python、C 等的东西。无论 PostgreSQL 支持什么,你都可以在其中工作。

第二步是用存储过程语言为这个工具包创建功能接口。这应该输入文本,并以某种 PostgreSQL 可以很好处理的类型输出短语分解。您需要仔细注意类型,因为这会影响 GIN 索引等内容。

从那里您可以将其合并到您的数据库接口和查询中。

于 2013-04-13T04:11:39.010 回答