重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
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
给你看看我的思路:把两句话存在两个String里,然后用一个int记String长度,一个int记相同字的个数,最后把两个int一除就出来了。
当然这个是最简单的,只能算相同长度的两句话。
这个相似是要求相似度是多少?建议去重写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");
}
}