使用PostgreSQL计算文本中多词短语的出现次数

使用PostgreSQL计算文本中多词短语的出现次数,postgresql,nlp,Postgresql,Nlp,我有一个问题,我需要计算一个单词短语出现在PostgreSQL数据库的文本字段中的频率 我知道诸如to_tsquery()之类的函数,我使用它来检查文本中是否存在短语,使用to_tsquery('simple','sample text'),但是,我不确定如何准确地计算这些出现的次数。如果单词在字符串中只包含一次(我在这里假设您的表包含两列,一列带有id,另一列带有名为my_text的文本列): 如果每个字段的出现次数超过一次,则可以使用此嵌套查询: SELECT id, c

我有一个问题,我需要计算一个单词短语出现在PostgreSQL数据库的文本字段中的频率


我知道诸如
to_tsquery()
之类的函数,我使用它来检查文本中是否存在短语,使用
to_tsquery('simple','sample text')
,但是,我不确定如何准确地计算这些出现的次数。

如果单词在字符串中只包含一次(我在这里假设您的表包含两列,一列带有
id
,另一列带有名为
my_text
的文本列):

如果每个字段的出现次数超过一次,则可以使用此嵌套查询:

SELECT
     id,
     count(matches) as matches
FROM (
     SELECT
          id,
          regexp_matches(my_text, 'the_words_i_am_looking_for', 'g') as matches
     FROM
          my_table
) t
GROUP BY 1

可以找到此函数的语法以及有关字符串模式匹配的更多信息。

我希望计算单个文本字段中的多次出现次数,这将只计算每列一次。例如:假设我在“this is a sample text”中查找“sample text”,我希望它计算一次,但如果它选中另一个条目“示例文本就是示例文本”,我希望它能计数两次。很抱歉出现任何混乱。在您添加了更多详细信息后,我已编辑了我的答案。这看起来像是我在寻找的,谢谢!然后请对答案进行评分并将其标记为已接受!当然,对不起,我将等待我完全实现它。但它正在按照我的要求进行操作。
SELECT
     id,
     count(matches) as matches
FROM (
     SELECT
          id,
          regexp_matches(my_text, 'the_words_i_am_looking_for', 'g') as matches
     FROM
          my_table
) t
GROUP BY 1