检测字段中是否存在停用词

时间:2018-08-01 06:47:59

标签: postgresql stop-words tsvector

我正在使用tsvectors在我拥有的关键字列表中搜索相似的条目。这样,我可以认为以下关键字是相同的:

  • IT安全治理
  • 安全政府

问题在于,由于停用词逻辑的原因,以下条目也被视为相似:

  • IT环境
  • 环境

因此,我想提供一种方法来检测哪些记录包含停用词,以便可以对它们进行不同的处理。 我可以在记录中添加一个布尔值,以了解它是否包含停用词。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用ts_debug查找由全文搜索生成的词素:

SELECT array_agg(lexemes[1]) FILTER (WHERE lexemes[1] IS NOT NULL)
FROM ts_debug('english', 'IT security governance')
WHERE alias IN ('asciiword', 'word');

   array_agg    
----------------
 {secur,govern}
(1 row)

要查找是否存在止损,可以查看lexeme是否为NULL:

SELECT token
FROM ts_debug('english', 'IT security governance')
WHERE alias IN ('asciiword', 'word')
  AND lexemes[1] IS NULL;

 token 
-------
 IT
(1 row)

答案 1 :(得分:0)

基于@ Laurenz-Albe的建议,我提出了这个更通用的解决方案。根据此查询返回的值,我可以将带有密码的条目与没有密码的条目区分开:

select count(*) FROM ts_debug('english', 'IT security governance')
where array_length(lexemes,1) = 0

select count(*) FROM ts_debug('english', 'advanced security governance')
where array_length(lexemes,1) = 0