java代码相似性的计算 java相似度算法

请问各位高手 计算两句话的cosin相似度 用java代码如何实现?

给你看看我的思路:把两句话存在两个String里,然后用一个int记String长度,一个int记相同字的个数,最后把两个int一除就出来了。

创新互联成立以来不断整合自身及行业资源、不断突破观念以使企业策略得到完善和成熟,建立了一套“以技术为基点,以客户需求中心、市场为导向”的快速反应体系。对公司的主营项目,如中高端企业网站企划 / 设计、行业 / 企业门户设计推广、行业门户平台运营、App定制开发手机网站制作设计、微信网站制作、软件开发、西云机房等实行标准化操作,让客户可以直观的预知到从创新互联可以获得的服务效果。

当然这个是最简单的,只能算相同长度的两句话。

如何计算多个文本的相似度java程序,利用向量

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.4

我爱学习 和 他是黑客 的相似度分值: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

求大神指导如何用JAVA计算出一个List里的相似信息

这个相似是要求相似度是多少?建议去重写TestMessage类的equals和hash方法。

package com;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.apache.commons.lang.StringUtils;

class TestMessage{

private int messageId;

private String message;

public String getMessage() {

return message;

}

public void setMessage(String message) {

this.message = message;

}

public int getMessageId() {

return messageId;

}

public void setMessageId(int messageId) {

this.messageId = messageId;

}

@Override

public int hashCode() {

if(null == this.message){

return super.hashCode();

}else{

return this.message.hashCode();

}

}

@Override

public boolean equals(Object obj) {

if(null == obj){

return false;

}else if(obj instanceof TestMessage){

TestMessage tempObj = (TestMessage)obj;

return StringUtils.equalsIgnoreCase(message, tempObj.getMessage());

}else{

return false;

}

}

}

public class Test {

public static void main(String[] args) {

ListTestMessage list1 = new ArrayListTestMessage();

TestMessage yq1 = new TestMessage();

yq1.setMessageId(11);

yq1.setMessage("this is a test message");

TestMessage yq2 = new TestMessage();

yq2.setMessageId(12);

yq2.setMessage("this is a test message");

TestMessage yq3 = new TestMessage();

yq3.setMessageId(13);

yq3.setMessage("hello world");

TestMessage yq4 = new TestMessage();

yq4.setMessageId(14);

yq4.setMessage("this is a test message");

list1.add(yq1);

list1.add(yq2);

list1.add(yq3);

list1.add(yq4);

MapTestMessage,ListTestMessage data = new HashMapTestMessage,ListTestMessage();

for(int i=0;ilist1.size();i++){

TestMessage key = list1.get(i);

if(!data.containsKey(key)){

data.put(key, new ArrayListTestMessage());

}else{

continue;

}

ListTestMessage temp = data.get(key);

for(int j=i+1;jlist1.size();j++){

TestMessage value = list1.get(j);

if(temp.contains(value)){

continue;

}else{

temp.add(value);

}

}

}

System.out.println("OK");

}

}


分享标题:java代码相似性的计算 java相似度算法
文章路径:http://scyanting.com/article/dosppcp.html