Regex 计算PostgreSQL中字符串中一组不同子字符串的出现次数

Regex 计算PostgreSQL中字符串中一组不同子字符串的出现次数,regex,postgresql,Regex,Postgresql,我有一个包含大量文本信息的数据库,我想计算特定术语在给定文本字段中出现的次数。我知道如何在Python中实现这一点,但由于我计划在空间上对此进行记录,我正在寻找一种方法,将此分析存储在postgres服务器的视图中 有很多资源可以在单个重复字符串上执行此操作。问题是,这些方法依赖于代理计算方法,例如,通过减去子字符串的长度并返回差值除以子字符串的长度。由于多个子字符串的长度不同,这些方法会中断 所以,如果我对这个句子的否定词感兴趣的话,草地就被侵蚀了。这牧场容易被洪水淹没。田地产量很少,我可能想

我有一个包含大量文本信息的数据库,我想计算特定术语在给定文本字段中出现的次数。我知道如何在Python中实现这一点,但由于我计划在空间上对此进行记录,我正在寻找一种方法,将此分析存储在postgres服务器的视图中

有很多资源可以在单个重复字符串上执行此操作。问题是,这些方法依赖于代理计算方法,例如,通过减去子字符串的长度并返回差值除以子字符串的长度。由于多个子字符串的长度不同,这些方法会中断

所以,如果我对这个句子的否定词感兴趣的话,草地就被侵蚀了。这牧场容易被洪水淹没。田地产量很少,我可能想统计一下“侵蚀”、“易受侵蚀”和“产量很少”的发生率,在本例中为3

由于我最终可能会遇到很多这样的术语,因此我希望避免对每个子字符串重复这些术语,使用第一个链接中针对单个子字符串建议的方法,即:

length(str) - length(*replace(str, replaceStr))
  / length(replaceStr)

非常感谢您的输入。

这将计算以下术语出现在列中的频率:

SELECT id, col,
       cardinality(
          regexp_split_to_array(
             col,
             '(erode|prone to|yield little)'
          )
       ) - 1
FROM atable;

说明:regexp\u split\u to\u数组使用模式作为分隔符将字符串切碎,并将结果作为数组返回,基数计算数组中的元素数。

非常聪明。regexp_split_to_数组的成本可能仍然会超过两个低级的replace`等,因为regexp函数很昂贵。@gislipals你是什么意思?这将取决于输入字符串。“倾向于”tom是否也会与您的模式“倾向于”匹配?你需要仔细定义匹配项,否则会有令人惊讶的结果。