字符串相似度算法

相似度算法

Jaccard Similarity Coefficient、JaroWinkler 、Cosine Similarity、Levenshtein 距离编辑算法案例。

  • Jaccard相似性系数衡量两个集合的相似程度,通过计算两个集合的交集大小除以并集大小得出。适用于处理文本、推荐系统、生物信息学等领域
  • Cosine Similarity 余弦相似度用于度量两个向量之间的夹角余弦值,适用于文本相似性、信息检索和推荐系统等领域。它将向量投影到多维空间中,衡量它们的方向相似程度。
  • Levenshtein 将一个字符串转换为另一个字符串所需的最小编辑操作数,包括插入、删除和替换。常用于拼写纠错、基因序列比对等领域。
  • Jaro-Winkler距离衡量两个字符串的相似性,考虑字符匹配和位置,适用于姓名匹配、数据清洗等领域。

一、java实现

1.1 引入Maven依赖

 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-text</artifactId><version>1.10.0</version></dependency>

1.2 Java测试类

import org.apache.commons.text.similarity.CosineDistance;
import org.apache.commons.text.similarity.JaccardDistance;
import org.apache.commons.text.similarity.JaroWinklerDistance;
import org.apache.commons.text.similarity.LevenshteinDistance;public class EditDistanceTest {private Map<String, String> testData(){String goalName = "Dexter Morgan";HashMap<String, String> data = Maps.newHashMap();data.put("Jackson Morgan", goalName);data.put("Dex Morgan", goalName);data.put("Deter Morgan", goalName);data.put("Morgan", goalName);data.put("Morgan Dexter", goalName);data.put("MorganDexter", goalName);data.put("Dexter Morgan", goalName);data.put("DexterMorgan", goalName);data.put("DexterMorgan ", goalName);return data;}@Testpublic void testEditDistance(){for (Map.Entry<String, String> entry : testData().entrySet()) {//最后得分越高说明相似度越大, 0分表示没有任何相似度,1分则代表完全匹配System.out.printf("JaroWinklerDistance [%s],[%s]相似度 ===> [%s]%n", entry.getKey(), entry.getValue(),  (1-new JaroWinklerDistance().apply(entry.getKey(), entry.getValue())));//余弦相似度用于度量两个向量之间的夹角余弦值,适用于文本相似性、信息检索和推荐系统等领域。它将向量投影到多维空间中,衡量它们的方向相似程度。System.out.printf("CosineDistance 余弦相似度[%s],[%s]相似度 ===> [%s]%n", entry.getKey(), entry.getValue(),  (1- new CosineDistance().apply(entry.getKey(), entry.getValue())));//Jaccard相似性系数衡量两个集合的相似程度,通过计算两个集合的交集大小除以并集大小得出。适用于处理文本、推荐系统、生物信息学等领域。System.out.printf("JaccardDistance 杰卡德系数[%s],[%s]相似度 ===> [%s]%n", entry.getKey(), entry.getValue(),   (1-new JaccardDistance().apply(entry.getKey(), entry.getValue())));//两个字串之间,由一个转成另一个所需的最少编辑操作次数。允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。Integer editLen = new LevenshteinDistance().apply(entry.getKey(), entry.getValue());System.out.printf("LevenshteinDistance 莱文斯坦距离[%s],[%s]相似度 ===> [%s]%n%n", entry.getKey(), entry.getValue(),    1 - (double)editLen / Math.max(entry.getKey().length() , entry.getValue().length()));}}}

运行结果

JaroWinklerDistance [Dex Morgan],[Dexter Morgan]相似度 ===> [0.8994871794871795]
CosineDistance 余弦相似度[Dex Morgan],[Dexter Morgan]相似度 ===> [0.4999999999999999]
JaccardDistance 杰卡德系数[Dex Morgan],[Dexter Morgan]相似度 ===> [0.9090909090909091]
LevenshteinDistance 莱文斯坦距离[Dex Morgan],[Dexter Morgan]相似度 ===> [0.7692307692307692]JaroWinklerDistance [Deter Morgan],[Dexter Morgan]相似度 ===> [0.9794871794871796]
CosineDistance 余弦相似度[Deter Morgan],[Dexter Morgan]相似度 ===> [0.4999999999999999]
JaccardDistance 杰卡德系数[Deter Morgan],[Dexter Morgan]相似度 ===> [0.9090909090909091]
LevenshteinDistance 莱文斯坦距离[Deter Morgan],[Dexter Morgan]相似度 ===> [0.9230769230769231]JaroWinklerDistance [Morgan],[Dexter Morgan]相似度 ===> [0.4145299145299146]
CosineDistance 余弦相似度[Morgan],[Dexter Morgan]相似度 ===> [0.7071067811865475]
JaccardDistance 杰卡德系数[Morgan],[Dexter Morgan]相似度 ===> [0.5454545454545454]
LevenshteinDistance 莱文斯坦距离[Morgan],[Dexter Morgan]相似度 ===> [0.46153846153846156]JaroWinklerDistance [DexterMorgan],[Dexter Morgan]相似度 ===> [0.9846153846153847]
CosineDistance 余弦相似度[DexterMorgan],[Dexter Morgan]相似度 ===> [0.0]
JaccardDistance 杰卡德系数[DexterMorgan],[Dexter Morgan]相似度 ===> [0.9090909090909091]
LevenshteinDistance 莱文斯坦距离[DexterMorgan],[Dexter Morgan]相似度 ===> [0.9230769230769231]JaroWinklerDistance [Jackson Morgan],[Dexter Morgan]相似度 ===> [0.5128205128205128]
CosineDistance 余弦相似度[Jackson Morgan],[Dexter Morgan]相似度 ===> [0.4999999999999999]
JaccardDistance 杰卡德系数[Jackson Morgan],[Dexter Morgan]相似度 ===> [0.4666666666666667]
LevenshteinDistance 莱文斯坦距离[Jackson Morgan],[Dexter Morgan]相似度 ===> [0.5]JaroWinklerDistance [DexterMorgan ],[Dexter Morgan]相似度 ===> [0.9692307692307692]
CosineDistance 余弦相似度[DexterMorgan ],[Dexter Morgan]相似度 ===> [0.0]
JaccardDistance 杰卡德系数[DexterMorgan ],[Dexter Morgan]相似度 ===> [1.0]
LevenshteinDistance 莱文斯坦距离[DexterMorgan ],[Dexter Morgan]相似度 ===> [0.8461538461538461]JaroWinklerDistance [Dexter Morgan],[Dexter Morgan]相似度 ===> [1.0]
CosineDistance 余弦相似度[Dexter Morgan],[Dexter Morgan]相似度 ===> [0.9999999999999998]
JaccardDistance 杰卡德系数[Dexter Morgan],[Dexter Morgan]相似度 ===> [1.0]
LevenshteinDistance 莱文斯坦距离[Dexter Morgan],[Dexter Morgan]相似度 ===> [1.0]JaroWinklerDistance [MorganDexter],[Dexter Morgan]相似度 ===> [0.38247863247863245]
CosineDistance 余弦相似度[MorganDexter],[Dexter Morgan]相似度 ===> [0.0]
JaccardDistance 杰卡德系数[MorganDexter],[Dexter Morgan]相似度 ===> [0.9090909090909091]
LevenshteinDistance 莱文斯坦距离[MorganDexter],[Dexter Morgan]相似度 ===> [0.0]JaroWinklerDistance [Morgan Dexter],[Dexter Morgan]相似度 ===> [0.41346153846153855]
CosineDistance 余弦相似度[Morgan Dexter],[Dexter Morgan]相似度 ===> [0.9999999999999998]
JaccardDistance 杰卡德系数[Morgan Dexter],[Dexter Morgan]相似度 ===> [1.0]
LevenshteinDistance 莱文斯坦距离[Morgan Dexter],[Dexter Morgan]相似度 ===> [0.07692307692307687]

二、MySQL实现

2.1 Levenshtein(莱文斯坦距离)算法实现

自定义levenshtein函数

CREATE FUNCTION `levenshtein`(s1 varchar(255), s2 varchar(255)) RETURNS int(11)DETERMINISTIC
BEGINDECLARE s1_len, s2_len, i, j, c, c_temp, cost INT;DECLARE s1_char CHAR;DECLARE cv0, cv1 text;SET s1_len = CHAR_LENGTH(s1), s2_len = CHAR_LENGTH(s2), cv1 = 0x00, j = 1, i = 1, c = 0;IF s1 = s2 THENRETURN 0;ELSEIF s1_len = 0 THENRETURN s2_len;ELSEIF s2_len = 0 THENRETURN s1_len;ELSEWHILE j <= s2_lenDOSET cv1 = CONCAT(cv1, UNHEX(HEX(j))), j = j + 1;END WHILE;WHILE i <= s1_lenDOSET s1_char = SUBSTRING(s1, i, 1), c = i, cv0 = UNHEX(HEX(i)), j = 1;WHILE j <= s2_lenDOSET c = c + 1;IF s1_char = SUBSTRING(s2, j, 1) THENSET cost = 0;ELSESET cost = 1;END IF;SET c_temp = CONV(HEX(SUBSTRING(cv1, j, 1)), 16, 10) + cost;IF c > c_temp THEN SET c = c_temp; END IF;SET c_temp = CONV(HEX(SUBSTRING(cv1, j + 1, 1)), 16, 10) + 1;IF c > c_temp THENSET c = c_temp;END IF;SET cv0 = CONCAT(cv0, UNHEX(HEX(c))), j = j + 1;END WHILE;SET cv1 = cv0, i = i + 1;END WHILE;END IF;RETURN c;
END

自定义levenshtein_ratio百分比函数

CREATE FUNCTION `levenshtein_ratio`(s1 varchar(255), s2 varchar(255)) RETURNS int(11)DETERMINISTIC
BEGINDECLARE s1_len, s2_len, max_len INT;SET s1_len = LENGTH(s1), s2_len = LENGTH(s2);IF s1_len > s2_len THENSET max_len = s1_len;ELSESET max_len = s2_len;END IF;RETURN ROUND((1 - LEVENSHTEIN(s1, s2) / max_len) * 100);
END

使用方式(查询lastname是 jackson的 top10, 按照相似度倒排)

select levenshtein_ratio('jackson', last_name), last_name, first_name, full_name
from t_list_detail
where levenshtein_ratio('jackson', last_name) >= 40
order by levenshtein_ratio('jackson', last_name) desc
limit 10;

三、扩展:100余种相似性算法

算法简介应用场景
Jaccard相似性系数(Jaccard Similarity Coefficient)相似性系数衡量两个集合的相似程度,通过计算两个集合的交集大小除以并集大小得出。处理文本、推荐系统、生物信息学等领域。
余弦相似度(Cosine Similarity)用于度量两个向量之间的夹角余弦值,它将向量投影到多维空间中,衡量它们的方向相似程度。适用于文本相似性、信息检索和推荐系统等领域。
编辑距离(Edit Distance,Levenshtein Distance)编辑距离计算将一个字符串转换为另一个字符串所需的最小编辑操作数,包括插入、删除和替换。常用于拼写纠错、基因序列比对等领域。
汉明距离(Hamming Distance)汉明距离用于比较等长字符串,衡量两个字符串在相同位置上不同字符的数量。主要应用于错误检测和纠正码、信息编码等领域。
TF-IDF(Term Frequency-Inverse Document Frequency)TF-IDF用于衡量文本中某个词对于整个语料库的重要性,结合了词频和逆文档频率。信息检索、文本分类等领域有广泛应用。
Smith-Waterman算法Smith-Waterman算法是一种用于局部序列比对的动态规划算法常用于生物信息学中的DNA和蛋白质序列比对,能够找到相似片段而不仅仅是全局相似性。
Dice系数Dice系数衡量两个集合的相似程度,通过计算两个集合的交集大小的两倍除以它们的总大小之和。主要应用于图像分割、文本聚类等领域。
SimRankSimRank基于图结构,衡量两个节点之间的相似性,考虑到它们相连的节点以及这些相连节点之间的相似性。主要用于图数据、社交网络分析等领域。
Bert相似性算法基于预训练的Transformer模型Bert,可以通过计算两个文本之间某些层的输出相似度来衡量文本相似性适用于多种自然语言处理任务。
Monge-Elkan算法Monge-Elkan算法基于一种分块匹配策略,将字符串分成多个子串,计算子串之间的相似度适用于字符串匹配、信息检索等领域。
Damerau-Levenshtein距离Damerau-Levenshtein距离是编辑距离的扩展,除了插入、删除、替换操作,还包括相邻字符交换操作适用于拼写纠错等领域。
Rabin-Karp算法Rabin-Karp算法使用哈希函数来在文本中寻找一个模式串,可以快速定位可能的匹配位置适用于文本搜索、字符串匹配等领域。
Jaro-Winkler距离Jaro-Winkler距离衡量两个字符串的相似性,考虑字符匹配和位置适用于姓名匹配、数据清洗等领域。
Soundex算法Soundex算法将单词映射到一组代表其发音的字符,用于在文本中查找发音相似的词主要用于名字和姓氏匹配
BWT-索引(Burrows-Wheeler Transform)BWT-索引通过将字符串转换为其Burrows-Wheeler变换,并构建索引以支持模式匹配和搜索在压缩和字符串搜索领域有应用
时序字符串相似性(Time Series String Similarity)时序字符串相似性算法结合时间序列和字符串信息用于时间序列数据分析、模式匹配和相似性计算。
知识增强在字符串相似性中的应用(Knowledge Enhancement for String Similarity)知识增强在字符串相似性中的应用方法通过整合外部知识库来提升相似性计算的准确性和语义理知识增强在字符串相似性中的应用方法通过整合外部知识库来提升相似性计算的准确性和语义理解
复杂网络相似性复杂网络相似性算法基于图结构,将字符串转化为网络节点,并通过网络特性来衡量字符串相似性适用于网络分析和社交网络等领域
SkipGram模型SkipGram模型是一种词向量表示方法,通过预测上下文来学习词之间的关系适用于衡量词语之间的语义相似性
基于注意力机制的字符串相似性(Attention-based String Similarity)基于注意力机制的字符串相似性算法通过计算字符级别的注意力权重,捕捉字符串中的关键信息适用于文本匹配和语义表示
混合模型在字符串相似性中的应用(Hybrid Models for String Similarity)混合模型在字符串相似性中的应用方法通过融合多种模型来平衡性能和准确性适用于多样性数据和任务
基于自监督学习的字符串相似性(Self-Supervised String Similarity)基于自监督学习的字符串相似性算法通过设计自监督任务来学习字符串表示适用于无监督场景下的文本匹配和相似性计算
字符串频谱分析(String Spectral Analysis)字符串频谱分析方法将字符串转化为频谱形式,通过频谱特征来计算字符串之间的相似性适用于信号处理和模式识别
图卷积网络在字符串相似性中的应用(Graph Convolutional Networks for String Similarity)图卷积网络在字符串相似性中的应用方法将字符串表示为图结构,并通过卷积操作来计算相似性适用于图数据和关系挖掘
FuzzyWuzzyFuzzyWuzzy是Python库,提供了多种模糊字符串匹配算法,如Levenshtein距离、部分字符串匹配等适用于拼写纠错、数据清洗等任务
Locality Sensitive Hashing (LSH)局部敏感哈希是一种用于高维数据相似性搜索的技术,通过哈希函数将相似的数据映射到相同的桶中适用于大规模数据处理
字符串卷积(String Convolution)字符串卷积是一种将两个字符串转化为多维向量,并进行卷积运算来衡量相似性的方法适用于文本分类和信息检索
计数-最小哈希(Count-Min Hashing)计数-最小哈希是一种用于频率统计和近似相似性计算的方法适用于大规模数据处理和推荐系统
主题模型(Topic Model)主题模型是一种用于文本分析的方法,通过将文本表示为主题的分布来衡量文本之间的相似性适用于文本聚类和推荐系统
概率有限状态自动机(Probabilistic Finite State Automaton)概率有限状态自动机是一种可以处理概率和不确定性的自动机模型适用于字符串识别、语音识别等领域
高阶近似匹配(High-Order Approximate Matching)高阶近似匹配算法通过考虑多个字符之间的关系来进行模糊匹配适用于模糊匹配和序列比对
主动学习在字符串相似性中的应用(Active Learning for String Similarity)主动学习在字符串相似性中的应用方法通过策略性地选择样本来增强模型适用于数据稀缺场景和标注成本较高的情况
网络嵌入在字符串相似性中的应用(Network Embedding for String Similarity)网络嵌入在字符串相似性中的应用方法通过将字符串映射到网络嵌入空间来计算相似性适用于关系分析和数据挖掘
生成对抗网络在字符串相似性中的应用(Generative Adversarial Networks for String Similarity)生成对抗网络在字符串相似性中的应用方法通过对抗训练来提升字符串表示和相似性计算的性能适用于生成和匹配任务
编辑脚本(Edit Script)编辑脚本是一个记录从一个字符串转换为另一个字符串的编辑操作序列的表示方法常用于序列比对和版本控制
基于知识图谱的相似性计算(Knowledge Graph-based Similarity)基于知识图谱的相似性计算算法利用实体关系和属性信息来计算字符串之间的相似性适用于知识图谱匹配和数据链接
词法相似性匹配(Lexical Similarity Matching)词法相似性匹配算法通过考虑词汇相似性来计算字符串之间的相似性适用于词汇分析和自然语言处理
Sørensen-Dice系数Sørensen-Dice系数是Dice系数的一种变体,衡量两个集合的相似程度通过计算两个集合的交集大小的两倍除以它们的总大小之和的平均
点云字符串匹配(PointCloud String Matching)点云字符串匹配算法将字符串转化为点云形式,通过点云匹配来计算字符串相似性适用于图像处理和文本检索
半监督学习在字符串相似性中的应用(Semi-Supervised Learning for String Similarity)半监督学习在字符串相似性中的应用方法通过利用有限标注数据和大量未标注数据来提升相似性计算的性能适用于数据稀缺场景
字符串分类器融合(String Classifier Fusion)字符串分类器融合方法将多个字符串分类器的输出进行融合,以提高分类和相似性计算的性能适用于文本分类和匹配任务
多模态字符串相似性(Multimodal String Similarity)多模态字符串相似性算法结合多种模态数据(文本、图像等)来计算字符串之间的相似性适用于多源数据和多模态任务
NGRASTNGRAST(Next Generation Rapid Sequence Similarity Tool)是一种用于高速DNA序列比对的算法借助于哈希函数和Bloom过滤器来提高匹配效率
进化算法在字符串相似性中的应用(Evolutionary Algorithms for String Similarity)进化算法在字符串相似性中的应用方法通过模拟自然进化过程来优化字符串匹配和相似性计算适用于复杂优化问题
多粒度字符串相似性(Multi-Granularity String Similarity)多粒度字符串相似性算法考虑多个不同粒度的特征来计算相似性从而捕捉字符串的多样性特征
字符串核函数(String Kernel)字符串核函数通过将字符串映射到高维空间,通过核方法衡量它们的相似性常用于文本分类、信息检索等领域
Trigram相似性Trigram相似性基于字符级别的N-gram模型,将文本切分成三个字符一组的片段用于衡量文本相似性
滑动窗口匹配滑动窗口匹配是一种基于窗口大小的方法,用于在文本中寻找模式串的位置适用于字符串搜索和文本处理
近邻链接(Nearest-Neighbor Join)近邻链接是一种数据库连接方法,基于相似性度量将两个表中的行连接起来适用于数据挖掘和关联分析
基于概率有限状态自动机的匹配(Probabilistic Finite State Automaton Matching)基于概率有限状态自动机的匹配算法结合自动机和概率模型,用于模式匹配和字符串搜索适用于语音识别和文本匹配
Hamming树Hamming树是一种用于快速计算Hamming距离的数据结构,通过在每一层划分字符集合来加速匹配计算常用于DNA序列比对等领域
缺失数据处理在字符串相似性中的应用(Missing Data Handling for String Similarity)缺失数据处理在字符串相似性中的应用方法通过处理缺失数据来提高相似性计算的鲁棒性和性能适用于实际数据场景
预训练模型在字符串相似性中的应用(Pretrained Models for String Similarity)预训练模型在字符串相似性中的应用方法通过在大规模数据上预训练模型,然后微调来提升相似性计算的性能适用于少样本和多任务场景
RagelRagel是一个用于构建有限状态机的工具,常用于文本解析和字符串匹配可以生成高效的匹配器用于文本分析等任务
Fingerprinting指纹算法将字符串映射为一组固定长度的哈希值,用于文本去重、查重等场景如Simhash算法、Minhash算法等
字符串重构(String Reconstruction)字符串重构方法通过从碎片信息中重建原始字符串用于文本恢复、信息提取和密码学等领域
基于位置的字符串相似性基于位置的字符串相似性算法考虑字符在字符串中的位置信息,通过位置对齐来衡量字符串的相似程度适用于基因序列比对等领域
集成学习在字符串相似性中的应用(Ensemble Learning for String Similarity)集成学习在字符串相似性中的应用方法通过整合多个基础模型来提升相似性计算的准确性和稳定性适用于多样性数据
Fuzzy String Matching模糊字符串匹配通过考虑字符替换、插入、删除等操作来衡量字符串的相似性适用于容错匹配、拼写纠错等场景
参数化后缀树(Parameterized Suffix Tree)参数化后缀树是一种用于字符串搜索和模式匹配的数据结构通过将模式串加入到后缀树中来实现高效匹配
深度字符串嵌入(Deep String Embedding)深度字符串嵌入方法利用神经网络模型,将字符串映射到低维向量空间适用于文本相似性计算和特征提取
加权字符串编辑距离(Weighted String Edit Distance)加权字符串编辑距离考虑不同字符之间的权重,适用于文本匹配和语音识别等领域能够更准确地衡量相似性
字符串语义编码(String Semantic Encoding)字符串语义编码通过结合字符级别和词级别的表示,捕捉字符串的语义信息适用于文本聚类和主题建模
Pattern HunterPattern Hunter是一种多模式匹配算法,使用预处理步骤和散列技术来加速模式匹配适用于大规模文本搜索
Wu-Manber算法Wu-Manber算法是一种用于多模式匹配的快速算法,适用于在文本中同时匹配多个模式串如敏感词过滤
Skip-gram with Negative Sampling (SGNS)Skip-gram with Negative Sampling是词向量训练的一种方法,通过对负样本进行采样来学习词语之间的关系适用于词向量表示和文本相似性计算
Gotoh算法Gotoh算法是一种局部序列比对算法,引入了Affine Gap模型来处理序列间的间隔用于蛋白质序列比对和DNA序列比对等领域
BLOSUM矩阵BLOSUM(Blocks Substitution Matrix)矩阵是一种用于衡量蛋白质序列相似性的评分矩阵常用于蛋白质比对和结构预测领域
线性散列字符串匹配(Linear Hashing String Matching)线性散列字符串匹配算法通过哈希函数和散列桶来加速模式匹配适用于大规模数据处理和文本搜索
Smith-Waterman-Gotoh算法SW-Gotoh算法在Smith-Waterman算法基础上优化,引入了Affine Gap模型,提供更准确的局部序列比对适用于生物信息学领域
Anagram算法Anagram算法用于判断两个字符串是否是字母重排后得到的,通过对字符进行排序或计数适用于文本处理、词汇分析等领域
动态规划在字符串匹配中的优化(Dynamic Programming Optimization for String Matching)动态规划在字符串匹配中的优化方法通过减少重复计算来提高匹配效率常用于序列比对和编辑距离计算
BioPythonBioPython是一个用于生物信息学分析的Python库,其中包含了多种字符串比对算法如Smith-Waterman、Needleman-Wunsch等
在线学习在字符串相似性中的应用(Online Learning for String Similarity)在线学习在字符串相似性中的应用方法通过逐步更新模型来适应新数据适用于数据流和实时匹配场景
Smith-Waterman-Cox算法SW-Cox算法是Smith-Waterman算法的扩展,考虑了序列间的线性空隙和线性惩罚,用于更精细的序列比对特别适用于生物信息学中的蛋白质比对
Winnowing算法Winnowing算法通过选择散列值的最小值来提取文本的指纹,用于文本查重和抄袭检测适用于互联网内容分析等领域
字符串特征选择(String Feature Selection)字符串特征选择方法通过选择最具有信息量的特征来进行相似性计算适用于维度高的数据和模型解释性要求
N-gram模型N-gram模型将文本切分成连续的n个字符或词用于衡量文本之间的相似性。常用于语言模型、文本分类等自然语言处理任务
指导性聚类在字符串相似性中的应用(Guided Clustering for String Similarity)指导性聚类在字符串相似性中的应用方法通过加入外部信息来引导聚类过程提高聚类的准确性和解释性
特征哈希法(Feature Hashing)特征哈希法通过哈希函数将字符串特征映射到固定大小的特征空间用于高维特征表示和文本分类
基于遗传算法的字符串匹配(Genetic Algorithm-based String Matching)基于遗传算法的字符串匹配方法通过模拟生物遗传过程来优化字符串匹配和相似性计算适用于复杂优化问题
Bitap算法Bitap算法用于模式串匹配,通过位运算和动态规划来实现适用于模糊匹配、正则表达式匹配等领域
Diff算法(Myers差分算法)Diff算法是一种用于比较两个字符串之间的差异的算法,基于Myers差分算法常用于版本控制和文本差异比较
解码器-编码器结构在字符串相似性中的应用(Decoder-Encoder Architecture for String Similarity)解码器-编码器结构在字符串相似性中通过解码器和编码器的协同工作来捕捉字符串关系适用于序列生成和相似性计算
不确定性建模在字符串相似性中的应用(Uncertainty Modeling for String Similarity)不确定性建模在字符串相似性中的应用方法通过引入不确定性估计来处理噪声和不确定数据提高相似性计算的鲁棒性
模糊集理论在字符串相似性中的应用(Fuzzy Set Theory for String Similarity)模糊集理论在字符串相似性中的应用方法通过考虑不确定性和模糊性来计算相似性适用于模糊数据和不确定性问题
Longest Common Subsequence (LCS)最长公共子序列是一种动态规划算法,用于计算两个序列的最长公共子序列适用于DNA序列比对、版本控制等领域
随机投影在字符串相似性中的应用(Random Projection for String Similarity)随机投影在字符串相似性中的应用方法通过随机映射来降低数据维度提高相似性计算的效率和准确性
SuperString Graph超级字符串图是一种基于图论的方法,将一组字符串表示为一个有向图通过计算最短超级字符串来衡量字符串的相似性
字符串对齐方法(String Alignment)字符串对齐方法通过考虑字符之间的对齐关系来计算字符串相似性适用于序列比对和文本匹配等领域
Rabin-Scott模型Rabin-Scott模型是一种自动机模型,用于模式匹配和字符串搜索可以高效地查找多个模式在文本中的位置
多序列比对多序列比对算法用于比较多个序列之间的相似性,通过考虑多个序列的关系来实现更精确的比对常用于生物信息学领域
迁移学习在字符串相似性中的应用(Transfer Learning for String Similarity)迁移学习在字符串相似性中的应用方法利用从其他任务学到的模型来提升字符串相似性计算的性能适用于数据稀缺场景
压缩字符串比对压缩字符串比对算法利用压缩技术来加速字符串比对,通过在压缩域中寻找相似性适用于大规模数据处理和数据压缩
Tversky系数Tversky系数是一种通用的集合相似性度量,可以通过调整参数来加权考虑交集和差集用于文本分类、推荐系统等领域
基于图的字符串相似性(Graph-based String Similarity)基于图的字符串相似性算法将字符串映射到图结构,并通过图算法来计算相似性适用于文本聚类和关系挖掘
局部灵活对齐(Partial Flexible Alignment)局部灵活对齐是一种在序列比对中允许不完全匹配的方法通过考虑部分匹配和相似性来捕捉序列之间的相似性
RapidMinerRapidMiner是一款数据挖掘和机器学习工具,其中包含各种字符串相似性匹配算法,如编辑距离、余弦相似度等用于文本分析、数据挖掘等领域
Shingling方法Shingling方法将文本转化为一组k个相邻的词或字符,然后计算它们的相似性常用于文本去重、抄袭检测等任务
基于语义的字符串相似性(Semantic-based String Similarity)基于语义的字符串相似性算法利用词向量或知识图谱来捕捉字符串之间的语义关系适用于文本相似性计算和推荐系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/88519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CleanMyMac X版本4.14.2中文版新功能介绍

CleanMyMac X版本4.14.2中文版是一款专业的Mac清理工具&#xff0c;只需要一键智能清理&#xff0c;便能让Mac恢复原始的性能&#xff0c;是MAC系统非常好用的工具。CleanMyMac X自身拥有一个安全数据库&#xff0c;它是一个项目列表&#xff0c;拥有一定的规格&#xff0c;可以…

CPU访问一个虚拟地址的整体流程

一、虚拟地址转换成物理地址 涉及到的部件&#xff1a; MMU&#xff1a;虚拟地址—MMU—>物理地址。MMU会控制整个流程&#xff08;查快表、查慢表等等&#xff09;TLB快表&#xff1a;组号&#xff08;若为组相联TLB&#xff09;、TLB标记、有效位、页框号页表&#xff08…

数据结构与算法(C语言版)P6---队列

1、队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除操作的特殊线性表&#xff0c;队列具有__先进先出__FIFO&#xff08;First In First Out&#xff09; 入队列&#xff1a;进行插入操作的一端称为__队尾__。 出队列&#xff1a;…

正则表达式语法与应用案例

正则表达式语法 正则表达式&#xff08;Regular Expression&#xff0c;缩写为Regex或RegExp&#xff09;的语法主要包括以下几个方面&#xff1a; 单个字符匹配&#xff1a;可以使用普通字符、元字符、字符集和反义字符来匹配一个单个字符。重复匹配&#xff1a;使用量词元字…

Cpp/Qt-day040920Qt

目录 时钟 头文件&#xff1a;Widget.h: 源文件:Widget.c: 效果图&#xff1a; 思维导图 时钟 头文件&#xff1a;Widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPaintEvent> #include <QPainter> #include <QTime>…

性能测试 —— 性能测试常见的测试指标 !

一、什么是性能测试 先看下百度百科对它的定义&#xff0c;性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。 我们可以认为性能测试是&#xff1a;通过在测试环境下对系统或构件的性能进行探测&#xff0c;用以验证在生产环…

Java爬虫教程:从入门到精通

引言&#xff1a; 在互联网时代&#xff0c;海量的数据被存储在各种网页中。而Java作为一门强大的编程语言&#xff0c;具备丰富的网络编程能力&#xff0c;可以帮助开发者高效地获取和处理网络数据。本教程将带您从入门到精通&#xff0c;学习如何使用Java编写爬虫程序&#…

安防视频/集中云存储平台EasyCVR(V3.3)部分通道显示离线该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

it运维监控主要做什么

IT运维监控已成为企业经营的重要组成部分。为了保证全面高效的运行&#xff0c;提升企业的经营效率和服务水平&#xff0c;主要从事对企业的IT基础设施进行监控和管理。所以&#xff0c;IT运维监控的关键是什么&#xff1f; IT运维监控的主要任务是确保IT基础设施的正常使用。它…

Gitee使用用户名密码登录一直错误/IDEA连接gitee仓库密码错误

天坑,注册的时候名字带了大写,用户名自动给你变成小写 真正的用户名在个人主页里面看,是后面的字符,才是真正的用户名.排查了一个小时密码问题,真的坑

百度SEO优化不稳定的原因分析(提升网站排名的稳定性)

百度SEO优化不稳定介绍蘑菇号-www.mooogu.cn SEO不稳定是指网站在搜索引擎中的排名不稳定&#xff0c;随着时间的推移会发生变化。这种情况可能会出现在网站页面结构、内容质量、外链质量等方面存在缺陷或不合理之处。因此&#xff0c;优化SEO非常重要&#xff0c;可以提高网站…

Gateway网关

网关GateWay 官方文档&#xff1a;https://docs.spring.io/spring-cloud-gateway/docs/3.1.2/reference/html/#gateway-how-it-works 核心概念 路由: 网关的核心数据结构&#xff0c;定义了网关如何处理请求. 一条路由信息包含路由的唯一标识ID,目的地URI, 一组断言&#xf…

融云 CallPlus + X,通话场景一站式解决方案

融云近期上线的 CallPlus SDK&#xff0c;针对音视频呼叫场景单独设计后端服务 Call Server&#xff0c;信令延时低至 150ms&#xff0c;确保各端计时准确、一致&#xff1b;上线了音视频通话互转、灵活的多人通话、通话记录管理能力等功能。关注【融云全球互联网通信云】了解更…

regsvr32 initpki.dll找不到指定模块要怎么解决?教你快速修复initpki.dll文件

当你尝试在 Windows 操作系统中注册 DLL 文件时&#xff0c;可能会遇到错误消息&#xff1a;“regsvr32 initpki.dll找不到指定模块”。它通常是由于一个或多个 DLL 文件缺失或损坏所导致的。这是一个常见的错误&#xff0c;并且可以遇到在 Windows 7、Windows 8 和 Windows 10…

点餐小程序的制作流程详解

随着移动互联网的发展&#xff0c;越来越多的消费者开始使用手机进行点餐&#xff0c;这也促使了点餐小程序的兴起。如果您是一位商家&#xff0c;想要开发一个属于自己的点餐小程序&#xff0c;那么不妨尝试一下以下的DIY教程吧&#xff01; 首先&#xff0c;我们需要找一个专…

Android存储权限完美适配(Android11及以上适配)

一、Bug简述 一个很普通的需求&#xff0c;需要下载图片到本地&#xff0c;我的三个测试机&#xff08;荣耀Android10&#xff0c;红米 11 和小米Android 13都没有问题&#xff09;。 然后&#xff0c;主角登场了&#xff0c;测试的三星Android 13 死活拉不起存储权限弹窗。 …

2010年408计组真题步骤解析

12&#xff0e;下列选项中&#xff0c;能缩短程序执行时间的措施是 D Ⅰ&#xff0e;提高 CPU 时钟频率 Ⅱ&#xff0e;优化数据通路结构 Ⅲ&#xff0e;对程序进行编译优化 A&#xff0e;仅Ⅰ和Ⅱ B&#xff0e;仅Ⅰ和Ⅲ C&#xff0e;仅Ⅱ和Ⅲ D&#xff0e;Ⅰ、Ⅱ和Ⅲ 解析&…

【文件操作——详细讲解】

1. 为什么使用文件&#xff1f;&#x1f9d0; 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数…

H3C ER G2系列路由器敏感信息泄露漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、产品介绍 H3C ER2200G2是H3C推出的新一代高性能企业级路由器&#…

NPDP证书,为什么这么多人考?

NPDP证书至2016年引进国内&#xff0c;考试人数就持续增长&#xff0c;不仅是新产品开发唯一 的职业证书&#xff0c;在产品管理这一领域的知名度也在前列&#xff0c;那么这个证书的作用在哪里呢&#xff1f; 想考npdp证书&#xff0c;npdp干货可下载&#xff1a; 1、就业范围…