Oracle APEX中对比两个varchar2字段获取文本相似度百分比方案咨询
Oracle APEX 文本相似度匹配实现方案
方案一:直接使用Oracle内置UTL_MATCH包(推荐)
Oracle 11g及以上版本默认自带UTL_MATCH工具包,无需额外部署组件即可直接实现文本相似度计算,返回0-100的整数百分比,完全适配你的需求。包内提供两类常用计算函数,可根据场景选择:
UTL_MATCH.JARO_WINKLER_SIMILARITY(文本1, 文本2):适合短文本模糊匹配,对单词顺序相近的文本匹配精度更高UTL_MATCH.EDIT_DISTANCE_SIMILARITY(文本1, 文本2):基于编辑距离计算,适合字符拼写差异为主的场景
示例查询代码
直接在APEX的SQL查询或者PL/SQL逻辑中使用如下代码,其中:v_symptom为APEX中的绑定变量:
SELECT id, UTL_MATCH.JARO_WINKLER_SIMILARITY(Symptom_Descr, :v_symptom) AS similarity_percent FROM SYMPTOMS ORDER BY similarity_percent DESC;
如果需要过滤低相似度记录,可添加WHERE条件:
SELECT id, UTL_MATCH.JARO_WINKLER_SIMILARITY(Symptom_Descr, :v_symptom) AS similarity_percent FROM SYMPTOMS WHERE UTL_MATCH.JARO_WINKLER_SIMILARITY(Symptom_Descr, :v_symptom) > 10 ORDER BY similarity_percent DESC;
方案二:自定义PL/SQL相似度函数
如果内置函数的匹配精度无法满足业务需求,可自行实现基于词袋模型的余弦相似度计算,适配长文本或者语义匹配要求更高的场景:
- 第一步:编写分词函数,将输入文本按分隔符拆分为独立单词集合
- 第二步:过滤停用词(可选),比如the、a等无意义的常用词
- 第三步:计算两个文本的词频向量,输出向量的余弦相似度并转换为百分比格式
内容的提问来源于stack exchange,提问作者user13768246
相关产品推荐
相关产品推荐

