在我们日常的开发中,有时候不可避免的需要判断两个中文句子的相似度,如多语翻译项目的句子库录入需要判断当前输入的句子是否在库中已有相似的句子,在Tag相关性的时候需要给出相关文章等等,应用场景非常之多,不知道大家有没有好的方式来判断,我这里给出我的SQL实现和Java实现,供大家参考:
PL/SQL判断句子相似度:
- CREATE OR REPLACE FUNCTION ld
-
(p_source_string IN VARCHAR2,
-
p_target_string IN VARCHAR2)
-
RETURN NUMBER
- DETERMINISTIC
-
AS
- v_length_of_source NUMBER := NVL (LENGTH (p_source_string), 0);
- v_length_of_target NUMBER := NVL (LENGTH (p_target_string), 0);
-
TYPE mytabtype IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
- column_to_left mytabtype;
- current_column mytabtype;
- v_cost NUMBER := 0;
-
BEGIN
-
IF v_length_of_source = 0 THEN
-
RETURN v_length_of_target;
-
ELSIF v_length_of_target = 0 THEN
-
RETURN v_length_of_source;
-
ELSE
-
FOR j IN 0 .. v_length_of_target LOOP
- column_to_left(j) := j;
-
END LOOP;
-
FOR i IN 1.. v_length_of_source LOOP
- current_column(0) := i;
-
FOR j IN 1 .. v_length_of_target LOOP
- IF SUBSTR (p_source_string, i, 1) =
- SUBSTR (p_target_string, j, 1)
-
THEN v_cost := 0;
-
ELSE v_cost := 1;
-
END IF;
- current_column(j) := LEAST (current_column(j-1) + 1,
- column_to_left(j) + 1,
- column_to_left(j-1) + v_cost);
-
END LOOP;
-
FOR j IN 0 .. v_length_of_target LOOP
- column_to_left(j) := current_column(j);
-
END LOOP;
-
END LOOP;
-
END IF;
-
RETURN current_column(v_length_of_target);
-
END ld;
CREATE OR REPLACE FUNCTION ld -- Levenshtein distance
(p_source_string IN VARCHAR2,
p_target_string IN VARCHAR2)
RETURN NUMBER
DETERMINISTIC
AS
v_length_of_source NUMBER := NVL (LENGTH (p_source_string), 0);
v_length_of_target NUMBER := NVL (LENGTH (p_target_string), 0);
TYPE mytabtype IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
column_to_left mytabtype;
current_column mytabtype;
v_cost NUMBER := 0;
BEGIN
IF v_length_of_source = 0 THEN
RETURN v_length_of_target;
ELSIF v_length_of_target = 0 THEN
RETURN v_length_of_source;
ELSE
FOR j IN 0 .. v_length_of_target LOOP
column_to_left(j) := j;
END LOOP;
FOR i IN 1.. v_length_of_source LOOP
current_column(0) := i;
FOR j IN 1 .. v_length_of_target LOOP
IF SUBSTR (p_source_string, i, 1) =
SUBSTR (p_target_string, j, 1)
THEN v_cost := 0;
ELSE v_cost := 1;
END IF;
current_column(j) := LEAST (current_column(j-1) + 1,
column_to_left(j) + 1,
column_to_left(j-1) + v_cost);
END LOOP;
FOR j IN 0 .. v_length_of_target LOOP
column_to_left(j) := current_column(j);
END LOOP;
END LOOP;
END IF;
RETURN current_column(v_length_of_target);
END ld;
JAVA判断句子相似度代码:
-
-
-
-
-
-
public static double getSimilar(String ora,String dest){
-
double ff=0.0;
- Sentence oraSen = SplitWord.splitWord(ora);
- Sentence desSen = SplitWord.splitWord(dest);
-
if(oraSen!=null&&desSen!=null){
- HashSet<String> oraS=oraSen.toWord();
- HashSet<String> desS=desSen.toWord();
-
if(oraS!=null && desS!=null){
-
int q=0,s=0,r=0;
- Iterator<String> ite=oraS.iterator();
-
while(ite.hasNext()){
- Object o=ite.next();
-
if(desS.contains(o)) ++q;
- }
- s=oraS.size()-q;
- r=desS.size()-s;
-
return 2.00*q/ (2*q+1*r+1*s);
- }
-
return 1;
- }
-
return ff;
- }
/*
* 相似度公式:Kq*q/(Kq*q+Kr*r+Ks*s) (Kq > 0 , Kr>=0,Ka>=0)
* 设q是字符串1和字符串2中都存在的单词的总数,s是字符串1中存在,字符串2中不存在的单词总数,
* r是字符串2中存在,字符串1中不存在的单词总数,t是字符串1和字符串2中都不存在的单词总数。
*/
public static double getSimilar(String ora,String dest){
double ff=0.0;
Sentence oraSen = SplitWord.splitWord(ora);
Sentence desSen = SplitWord.splitWord(dest);
if(oraSen!=null&&desSen!=null){
HashSet<String> oraS=oraSen.toWord();
HashSet<String> desS=desSen.toWord();
if(oraS!=null && desS!=null){
int q=0,s=0,r=0;
Iterator<String> ite=oraS.iterator();
while(ite.hasNext()){
Object o=ite.next();
if(desS.contains(o)) ++q;
}
s=oraS.size()-q;
r=desS.size()-s;
return 2.00*q/ (2*q+1*r+1*s);
}
return 1;
}
return ff;
}
大家不知道在处理中文句子相似度的时候有没有更好的方法呢?
分享到:
相关推荐
python基于TensorFlow+LSTM实现的中文句子相似度计算源码.zip python基于TensorFlow+LSTM实现的中文句子相似度计算源码.zip python基于TensorFlow+LSTM实现的中文句子相似度计算源码.zip 【资源介绍】 Ubuntu:16.04...
中文句子 相似度计算算法 计算句子的相似度
易语言源码易语言文本相似度判断模块源码.rar 易语言源码易语言文本相似度判断模块源码.rar 易语言源码易语言文本相似度判断模块源码.rar 易语言源码易语言文本相似度判断模块源码.rar 易语言源码易语言文本...
中文匹配2条句子,相似度越高句子越趋同!通过分词器分词后比较更符合实际运用情况。 可用,直接下载运行。C#中文文本匹配,字符串匹配,中文词语匹配,计算2个句子相似度 中文匹配C#中文文本匹配,字符串匹配,中文...
IKAnalyzer中文分词,计算句子相似度
资源介绍:。易语言文本相似度判断模块源码例程程序演示了文本比较的过程。点评:易语言文本相似度判断模块源码是易语言文本应用例程。资源作者:。资源界面:。资源下载:。
本文主要有四篇句子相似度论文 (pdf版) 多特征融合的句子语义相似度计算方法 基于多特征融合的产品评论语句相似度计算 基于多特征融合的句子相似度计算方法 基于改进编辑距离的字符串相似度求解算法
句子相似检索,在自然语言处理领域具有非常广泛的应用背景。信息过滤技术中的句子模糊匹配,基于实例的机器翻译的源语言检索。
实现句子相似度计算,实现了两种,一个是词形相似度一个是词序相似度
paddle_nlp_之词或者句子相似度计算.zip
基于句子相似度矩阵构建图结构实现文本摘要任务——数据集基于句子相似度矩阵构建图结构实现文本摘要任务——数据集基于句子相似度矩阵构建图结构实现文本摘要任务——数据集基于句子相似度矩阵构建图结构实现文本...
易语言源码易语言文本相似度算法源码.rar 易语言源码易语言文本相似度算法源码.rar 易语言源码易语言文本相似度算法源码.rar 易语言源码易语言文本相似度算法源码.rar 易语言源码易语言文本相似度算法源码.rar ...
句子相似度数据,可用于评估词向量、句向量的优劣,句子成对出现,有人工的相似度打分
基于知识图谱的问答系统,BERT做命名实体识别和句子相似度 Introduction 本项目主要由两个重要的点组成,一是基于BERT的命名实体识别,二是基于BERT的句子相似度计算,本项目将这两个模块进行融合,构建基于BERT的...
易语言文本相似度判断模块源码,文本相似度判断模块,文本相似度判断,逐字分割
基于siamese-lstm的中文句子相似度计算 环境搭建 Ubuntu:16.04(64bit) Anaconda:2-4.4.0(python 2.7) - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功...
易语言源码易语言相似度对比源码.rar 易语言源码易语言相似度对比源码.rar 易语言源码易语言相似度对比源码.rar 易语言源码易语言相似度对比源码.rar 易语言源码易语言相似度对比源码.rar 易语言源码易语言...
基于torch transformers 直接加载bert预训练模型计算句子相似度
为提高信息检索中检索结果的查准率,提出了基于句法分析以及带权路径长度的句子相似度计算方法。该方法首先对用户问句进行了分词、词性标注以及句法分析处理,并根据处理后的结果对该句进行了关键词提取、加权和同义...