word分词提供了多种文本相似度计算方式:
方式一:余弦相似度,通过计算两个向量的夹角余弦值来评估他们的相似度
实现类:org.apdplat.word.analysis.CosineTextSimilarity
用法如下:
String text1 = "我爱购物"; String text2 = "我爱读书"; String text3 = "他是黑客"; TextSimilarity textSimilarity = new CosineTextSimilarity(); double score1pk1 = textSimilarity.similarScore(text1, text1); double score1pk2 = textSimilarity.similarScore(text1, text2); double score1pk3 = textSimilarity.similarScore(text1, text3); double score2pk2 = textSimilarity.similarScore(text2, text2); double score2pk3 = textSimilarity.similarScore(text2, text3); double score3pk3 = textSimilarity.similarScore(text3, text3); System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1); System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2); System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3); System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2); System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3); System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
运行结果如下:
我爱购物 和 我爱购物 的相似度分值:1.0 我爱购物 和 我爱读书 的相似度分值:0.67 我爱购物 和 他是黑客 的相似度分值:0.0 我爱读书 和 我爱读书 的相似度分值:1.0 我爱读书 和 他是黑客 的相似度分值:0.0 他是黑客 和 他是黑客 的相似度分值:1.0
方式二:简单共有词,通过计算两篇文档共有的词的总字符数除以最长文档字符数来评估他们的相似度
实现类:org.apdplat.word.analysis.SimpleTextSimilarity
用法如下:
String text1 = "我爱购物"; String text2 = "我爱读书"; String text3 = "他是黑客"; TextSimilarity textSimilarity = new SimpleTextSimilarity(); double score1pk1 = textSimilarity.similarScore(text1, text1); double score1pk2 = textSimilarity.similarScore(text1, text2); double score1pk3 = textSimilarity.similarScore(text1, text3); double score2pk2 = textSimilarity.similarScore(text2, text2); double score2pk3 = textSimilarity.similarScore(text2, text3); double score3pk3 = textSimilarity.similarScore(text3, text3); System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1); System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2); System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3); System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2); System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3); System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
运行结果如下:
我爱购物 和 我爱购物 的相似度分值:1.0 我爱购物 和 我爱读书 的相似度分值:0.5 我爱购物 和 他是黑客 的相似度分值:0.0 我爱读书 和 我爱读书 的相似度分值:1.0 我爱读书 和 他是黑客 的相似度分值:0.0 他是黑客 和 他是黑客 的相似度分值:1.0
方式三:编辑距离,通过计算两个字串之间由一个转成另一个所需的最少编辑操作次数来评估他们的相似度
实现类:org.apdplat.word.analysis.EditDistanceTextSimilarity
用法如下:
String text1 = "我爱购物"; String text2 = "我爱读书"; String text3 = "他是黑客"; Similarity textSimilarity = new EditDistanceTextSimilarity(); double score1pk1 = textSimilarity.similarScore(text1, text1); double score1pk2 = textSimilarity.similarScore(text1, text2); double score1pk3 = textSimilarity.similarScore(text1, text3); double score2pk2 = textSimilarity.similarScore(text2, text2); double score2pk3 = textSimilarity.similarScore(text2, text3); double score3pk3 = textSimilarity.similarScore(text3, text3); System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1); System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2); System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3); System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2); System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3); System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
运行结果如下:
我爱购物 和 我爱购物 的相似度分值:1.0 我爱购物 和 我爱读书 的相似度分值:0.5 我爱购物 和 他是黑客 的相似度分值:0.0 我爱读书 和 我爱读书 的相似度分值:1.0 我爱读书 和 他是黑客 的相似度分值:0.0 他是黑客 和 他是黑客 的相似度分值:1.0
方式四:SimHash + 汉明距离,先使用SimHash把不同长度的文本映射为等长文本,然后再计算等长文本的汉明距离
实现类:org.apdplat.word.analysis.SimHashPlusHammingDistanceTextSimilarity
用法如下:
String text1 = "我爱购物"; String text2 = "我爱读书"; String text3 = "他是黑客"; TextSimilarity textSimilarity = new SimHashPlusHammingDistanceTextSimilarity(); double score1pk1 = textSimilarity.similarScore(text1, text1); double score1pk2 = textSimilarity.similarScore(text1, text2); double score1pk3 = textSimilarity.similarScore(text1, text3); double score2pk2 = textSimilarity.similarScore(text2, text2); double score2pk3 = textSimilarity.similarScore(text2, text3); double score3pk3 = textSimilarity.similarScore(text3, text3); System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1); System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2); System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3); System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2); System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3); System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
运行结果如下:
我爱购物 和 我爱购物 的相似度分值:1.0 我爱购物 和 我爱读书 的相似度分值:0.95 我爱购物 和 他是黑客 的相似度分值:0.83 我爱读书 和 我爱读书 的相似度分值:1.0 我爱读书 和 他是黑客 的相似度分值:0.86 他是黑客 和 他是黑客 的相似度分值:1.0
方式五:Jaccard相似性系数,通过计算两个集合交集的大小除以并集的大小来评估他们的相似度
实现类:org.apdplat.word.analysis.JaccardTextSimilarity
用法如下:
String text1 = "我爱购物"; String text2 = "我爱读书"; String text3 = "他是黑客"; TextSimilarity textSimilarity = new JaccardTextSimilarity(); double score1pk1 = textSimilarity.similarScore(text1, text1); double score1pk2 = textSimilarity.similarScore(text1, text2); double score1pk3 = textSimilarity.similarScore(text1, text3); double score2pk2 = textSimilarity.similarScore(text2, text2); double score2pk3 = textSimilarity.similarScore(text2, text3); double score3pk3 = textSimilarity.similarScore(text3, text3); System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1); System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2); System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3); System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2); System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3); System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
运行结果如下:
我爱购物 和 我爱购物 的相似度分值:1.0 我爱购物 和 我爱读书 的相似度分值:0.5 我爱购物 和 他是黑客 的相似度分值:0.0 我爱读书 和 我爱读书 的相似度分值:1.0 我爱读书 和 他是黑客 的相似度分值:0.0 他是黑客 和 他是黑客 的相似度分值:1.0
方式六:欧几里得距离(Euclidean Distance),通过计算两点间的距离来评估他们的相似度
实现类:org.apdplat.word.analysis.EuclideanDistanceTextSimilarity
用法如下:
String text1 = "我爱购物"; String text2 = "我爱读书"; String text3 = "他是黑客"; TextSimilarity textSimilarity = new EuclideanDistanceTextSimilarity(); double score1pk1 = textSimilarity.similarScore(text1, text1); double score1pk2 = textSimilarity.similarScore(text1, text2); double score1pk3 = textSimilarity.similarScore(text1, text3); double score2pk2 = textSimilarity.similarScore(text2, text2); double score2pk3 = textSimilarity.similarScore(text2, text3); double score3pk3 = textSimilarity.similarScore(text3, text3); System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1); System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2); System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3); System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2); System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3); System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
运行结果如下:
我爱购物 和 我爱购物 的相似度分值:1.0 我爱购物 和 我爱读书 的相似度分值:0.41 我爱购物 和 他是黑客 的相似度分值:0.29 我爱读书 和 我爱读书 的相似度分值:1.0 我爱读书 和 他是黑客 的相似度分值:0.29 他是黑客 和 他是黑客 的相似度分值:1.0
方式七:曼哈顿距离(Manhattan Distance),通过计算两个点在标准坐标系上的绝对轴距总和来评估他们的相似度
实现类:org.apdplat.word.analysis.ManhattanDistanceTextSimilarity
用法如下:
String text1 = "我爱购物"; String text2 = "我爱读书"; String text3 = "他是黑客"; TextSimilarity textSimilarity = new ManhattanDistanceTextSimilarity(); double score1pk1 = textSimilarity.similarScore(text1, text1); double score1pk2 = textSimilarity.similarScore(text1, text2); double score1pk3 = textSimilarity.similarScore(text1, text3); double score2pk2 = textSimilarity.similarScore(text2, text2); double score2pk3 = textSimilarity.similarScore(text2, text3); double score3pk3 = textSimilarity.similarScore(text3, text3); System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1); System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2); System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3); System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2); System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3); System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
运行结果如下:
我爱购物 和 我爱购物 的相似度分值:1.0 我爱购物 和 我爱读书 的相似度分值:0.33 我爱购物 和 他是黑客 的相似度分值:0.14 我爱读书 和 我爱读书 的相似度分值:1.0 我爱读书 和 他是黑客 的相似度分值:0.14 他是黑客 和 他是黑客 的相似度分值:1.0
相关推荐
该资源主要参考我的博客:word2vec词向量训练及中文文本相似度计算 http://blog.csdn.net/eastmount/article/details/50637476 其中包括C语言的Word2vec源代码(从官网下载),自定义爬取的三大百科(百度百科、互动...
word分词文本相似度计算.docx
中文文本预处理&Word2Vec 1. 首先运行文本预处理.py 包括数据导入、匹配清洗、分词等 2. 然后运行词向量训练.py 利用word2vec,计算文本相似度
本文实例讲述了Python实现简单的文本相似度分析操作。分享给大家供大家参考,具体如下: ...首先引入分词API库jieba、文本相似度库gensim import jieba from gensim import corpora,models,similarities 以下
用来得到TXT文本中词语的相关性的深度学习模型,需要分词,text8为样例,运行脚本可以直接开始训练。最后得到.bin模型
根据文本相似度实现问答的聊天机器人(弱智版) 项目介绍 这是根据工作需求写的一个简易版本的聊天机器人,主要目的是根据问题从知识库中匹配相应的答案,从而帮助使用者去更方便的查询到一些知识性内容。 模块简介 ...
将提供中文分词,词性标注,命名实体识别,关键词提取,文本摘要,新词发现,文本相似度,计算器,数字转换,拼音转换,繁简转换等常见的NLP功能。目录安装注意事项默认不安装nlg-yongzhuo, 如果需要该功能自行安装;...
词相似度计算词林编码法相似度汉语语义法相似度知网词相似度字面编辑距离法初步相似度计算简单而言相似度句子相似度计算词性和词序结合法编辑距离算法Gregor编辑距离法优化编辑距离法文本相似度计算余弦相似度编辑...
word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。能通过...
一个作业的需求:根据已知的多个文本的分词频率 利用余弦相似度以及向量点积计算多个文本与其中某个文本的相似度。 代码中是先从excel中获取分词频率的数据 进而 利用两种方式进行相似度计算 最后将相似度的值 ...
文本相似度(10种算法) 判定句子是有意义的人话的可能性 支持应用统计语言模型(即隐含马尔可夫)(二元模型、三元模型) 部分文件功能 word分词器的API可打开 word-1.3 API.html查看 运行demo-word查看分词效果 运行...
包括亲测能够跑的代码和文档。文档包括整个系统的介绍、算法原理介绍(分词、文本相似度)。值得初学者学习。
词向量训练,加载,词语相似度计算,语义运算,查询,KMEANS聚类 文档语义相似度计算 语料库工具 部分默认模型训练自小型语料库,鼓励用户自行训练。模块所有提供训练接口,语料可参考98年人民日报语料库。 在提供...
它将term转换成向量形式,可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。 word2vec计算的是余弦值,距离范围为0-1之间,值越大代表两个词关联度越高。...
NLU相似度用于用一对句子对任务进行建模的各种基线模型:语义文本相似度(STS),自然语言推理(NLI),释义识别(PI),问题回答(QA)。1.描述该存储库包含一些模型,这些模型可以学习为自然语言理解任务检测句子...
采用这个gensim库中的word2vec函数,输入是一个分词后的嵌套语料列表,输出一个词嵌入矩阵。 模型原理 参见:这篇文章 同时更加建议去看看吴恩达深度学习序列模型部分,介绍得深入浅出,网易云课堂和B站都有资源。...
vec:用词向量计算相似度,并对词性乘以不同的权重,得到句子相似度 all:调试模式,把以上几种模式的结果都显示出来,方便对比和调试 inputtxt 可输入的特殊文本命令: -zsk 显示当前知识库 -s -1 查看上一个...
典型相关分析matlab实现代码HanLP: Han Language Processing 汉语言处理包 ...词向量训练、加载、词语相似度计算、语义运算、查询、KMeans聚类 文档语义相似度计算 语料库工具 分词语料预处理 词频词性
典型相关分析matlab实现代码HanLP: Han Language Processing 汉语言处理包 ...词向量训练、加载、词语相似度计算、语义运算、查询、KMeans聚类 文档语义相似度计算 语料库工具 分词语料预处理 词频词性
情感分析-文本分类-语料及模型、一个拍照做题程序、世界各国大规模人名库、一个利用有趣中文语料库 qingyun 训练出来的中文聊天机器人、中文聊天机器人seqGAN、省市区镇行政区划数据带拼音标注、教育行业新闻语料库...