短文本、字符串相似度算法
短文本、字符串的相似度计算方法一般是非深层语义的,速度比较快。
string-based, corpus-based, knowledge-based (e.g. wordnet).
常见算法有:
-
LCS, Longest common substring
-
Jaro-Distance, based on the number and order of characters, taking account into spelling deviation
-
Jaro-Winkler Distance, an extention of Jaro distance, introducing a prefix
-
cosine distance, 将字符串以空格切分为词(对英文)或字符(对非空格分隔字符串),统计频次,以词/字符频次作为向量表示字符串,计算向量余弦相似度 (即词袋模型+余弦距离)
-
Euclean distance,类似cosine,不过计算欧氏距离而非余弦距离
-
hamming distance 等长字符串度量
-
edit distance(一般指levenshtein distance),
-
jaccard similarity,常用于度量集合重叠度,也可用于字符串
-
dice distance,常用于度量集合重叠度,也可用于字符串
-
BM25 词级别的算法,需要用到tf-idf
-
N-gram 连续N个词/字符作为基本分析单位
-
LSA(latent semantic analysis)
-
LDA(latent Dirichlet allocation)
-
ESA(explicit semantic analysis)
-
WMD(word mover's distance) (word2vec + earth mover's distance)
-
TF-IDF based.
apache commons-text:1.4下的这些算法说明:
JaroWinkler: 注意到"trump"和"donald trump"相似度为0。(注意包含空格情况)
Cosine:"trump" <--> "realdonaldtrump"相似度为0。中文始终为0(即使完全一样).
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)