我正在使用 tsvectors 在我拥有的关键字列表中搜索类似的条目。通过这种方式,我可以认为以下关键字是相同的:
- IT安全治理
- IT安全政府
问题是,由于停用词逻辑,以下条目也被认为是相似的:
- IT环境
- 环境
所以,我想有一种方法来检测哪些记录包含停用词,这样我就可以区别对待它们。我可以在记录中添加一个布尔值,以了解它是否包含停用词。
任何想法 ?
我正在使用 tsvectors 在我拥有的关键字列表中搜索类似的条目。通过这种方式,我可以认为以下关键字是相同的:
问题是,由于停用词逻辑,以下条目也被认为是相似的:
所以,我想有一种方法来检测哪些记录包含停用词,这样我就可以区别对待它们。我可以在记录中添加一个布尔值,以了解它是否包含停用词。
任何想法 ?
您可以使用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)
要查找是否存在停止,您可以查看词位是否为 NULL:
SELECT token
FROM ts_debug('english', 'IT security governance')
WHERE alias IN ('asciiword', 'word')
AND lexemes[1] IS NULL;
token
-------
IT
(1 row)
根据@Laurenz-Albe 的建议,我想出了这个更通用的解决方案;根据此查询返回的值,我可以将带有 stowords 的条目与没有的条目区分开来:
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