Skip to content

Commit

Permalink
文本相似度
Browse files Browse the repository at this point in the history
  • Loading branch information
ysc committed May 19, 2015
1 parent ecbcd2a commit ee2ec64
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 15 deletions.
48 changes: 39 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -521,35 +521,65 @@ word分词提供了两种文本相似度计算方式:

实现类:org.apdplat.word.analysis.CosineTextSimilarity

用法如下:

String text1 = "我爱学习";
String text2 = "我爱读书";
String text3 = "他是黑客";
TextSimilarity textSimilarity = new CosineTextSimilarity();
System.out.println(text1+" 和 "+text1+" 的相似度分值:"+textSimilarity.similarScore(text1, text1));
System.out.println(text1+" 和 "+text2+" 的相似度分值:"+textSimilarity.similarScore(text1, text2));
System.out.println(text2+" 和 "+text2+" 的相似度分值:"+textSimilarity.similarScore(text2, text2));
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
我爱读书 和 我爱读书 的相似度分值:1.0
我爱学习 和 我爱读书 的相似度分值:0.4
我爱学习 和 他是黑客 的相似度分值:0.0
我爱读书 和 我爱读书 的相似度分值:1.0
我爱读书 和 他是黑客 的相似度分值:0.0
他是黑客 和 他是黑客 的相似度分值:1.0

方式二:简单共有词,通过计算两篇文档有多少个相同的词来评估他们的相似度

实现类:org.apdplat.word.analysis.SimpleTextSimilarity

用法如下:

String text1 = "我爱学习";
String text2 = "我爱读书";
TextSimilarity textSimilarity = new CosineTextSimilarity();
System.out.println(text1+" 和 "+text1+" 的相似度分值:"+textSimilarity.similarScore(text1, text1));
System.out.println(text1+" 和 "+text2+" 的相似度分值:"+textSimilarity.similarScore(text1, text2));
System.out.println(text2+" 和 "+text2+" 的相似度分值:"+textSimilarity.similarScore(text2, 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.4
我爱学习 和 他是黑客 的相似度分值:0.0
我爱读书 和 我爱读书 的相似度分值:1.0
我爱读书 和 他是黑客 的相似度分值:0.0
他是黑客 和 他是黑客 的相似度分值:1.0

###分词算法效果评估:

Expand Down
16 changes: 13 additions & 3 deletions src/main/java/org/apdplat/word/analysis/CosineTextSimilarity.java
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,19 @@ protected double scoreImpl(Map<Word, AtomicInteger> frequency1, Map<Word, Atomic
public static void main(String[] args) {
String text1 = "我爱学习";
String text2 = "我爱读书";
String text3 = "他是黑客";
TextSimilarity textSimilarity = new CosineTextSimilarity();
System.out.println(text1+" 和 "+text1+" 的相似度分值:"+textSimilarity.similarScore(text1, text1));
System.out.println(text1+" 和 "+text2+" 的相似度分值:"+textSimilarity.similarScore(text1, text2));
System.out.println(text2+" 和 "+text2+" 的相似度分值:"+textSimilarity.similarScore(text2, text2));
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);
}
}
16 changes: 13 additions & 3 deletions src/main/java/org/apdplat/word/analysis/SimpleTextSimilarity.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,19 @@ protected double scoreImpl(Map<Word, AtomicInteger> frequency1, Map<Word, Atomic
public static void main(String[] args) {
String text1 = "我爱学习";
String text2 = "我爱读书";
String text3 = "他是黑客";
TextSimilarity textSimilarity = new CosineTextSimilarity();
System.out.println(text1+" 和 "+text1+" 的相似度分值:"+textSimilarity.similarScore(text1, text1));
System.out.println(text1+" 和 "+text2+" 的相似度分值:"+textSimilarity.similarScore(text1, text2));
System.out.println(text2+" 和 "+text2+" 的相似度分值:"+textSimilarity.similarScore(text2, text2));
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);
}
}

0 comments on commit ee2ec64

Please sign in to comment.