【问题标题】:postgresql phrase extraction & rankingpostgresql 短语提取和排名
【发布时间】:2012-11-04 21:46:38
【问题描述】:

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

示例 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;

一些注意事项:

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

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

相关问题:

【问题讨论】:

  • 我想说这WAY超出了数据库引擎的范围。您可能需要natural language processing 工具来进行短语提取。然后,您可以将它们包装在 PL/Java、C 存储函数或其他任何东西中,并从数据库中使用它们。 PostgreSQL 应该如何知道“短语”是什么?也就是说,两三个词的约束可能会在数据库中实现。
  • 如何拥有一个自定义词典,包含来自英语的所有 2&3 个常用词组,并为 ts_tovector 设置更高的优先级?如果这可行,我怎样才能轻松构建这本词典?
  • 实际上,那本字典太大了。可能的组合太多了。
  • 您也许可以使用自定义编码的 tsearch2 解析器来完成。不过工作量还不错。

标签: postgresql data-mining text-analysis


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-31
    • 2017-06-21
    • 2017-11-23
    • 2019-09-07
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多