如何检查数据库中出现的文本单词及其频率



我有一个长文本和一个充当字典的数据库表,其中包含列term、entity_type和main_name。

我想将文本中的单词与术语列进行比较,并恢复文本中出现的术语、它们的频率、它们的entity_type和它们的main_name。

我可以把文本中的每个单词都循环一遍,但太长了。有什么方法可以优化这个过程吗?

首先,Mike Organek建议使用类似的查询将文本拆分到表中

select distinct upper(w) as word 
from regexp_split_to_table(:your_text, '[^w]+') w;

然后内部将其与表连接,并使您的统计数据

with words_in_text as
(
select distinct upper(w) as word
from regexp_split_to_table(:your_text, '[^w]+') w
)
select tt.term, count(*) as frequency, tt.entity_type, tt.main_name
from words_in_text wit
inner join the_table tt 
on tt.term = wit.word
group by tt.term, tt.entity_type, tt.main_name;

请注意,如果termthe_table的主键,则只能按term分组。

db fiddle

最新更新