问题描述: A:我和小明是好朋友 B: 小明和我也是好朋友
step1:分词(不用考虑)-->简化为两个string 类型的数组
step2: 转化为 向量模型
step3:利用 余弦公式求解 (A*B) / (|A|*|B|)
package ja.S;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
// 1.合并成新数组
// 2,求并集
// 3,循环,按照并集中的顺序,求个数
// 4.循环求除数和被除数-->公式 求出cos
/**
* @Description: 输入两个数组,各自转化为一个空间向量,求出余弦相似值cos值
* @author makai
* @date 2016年9月20日 下午1:43:14
*/
public class Cos {
public static int[] returnA(String[] newStr,String[] a){
int [] mew_a=new int[newStr.length];
for(int i=0;i<newStr.length;i++){
int cou=0;//各个元素出现的次数,顺序是按照 合并后数组中的字母顺序
for(int j=0;j<a.length;j++){
if(a[j]==newStr[i]){
cou++;
}
mew_a[i]=cou;
}System.out.print(cou+",");
}
return mew_a;
}
public static void main(String[] args) {
String [] a={"a","b","c","d","f","b","c","e"};
String [] b={"a","f","b","c","d","g","f","b","c","e"};
String[] result=new String[a.length+b.length];
for(int i=0;i<a.length;i++){
result[i]=a[i];
}
for(int k=0;k<b.length;k++){
result[a.length+k]=b[k];
}
List<String> list = new ArrayList<String>();
for(int i=0;i<result.length;i++){//去重
if(!list.contains(result[i])){
list.add(result[i]);
}
}
String[] newStr = list.toArray(new String[1]);
/* for(String s:newStr){
System.out.print(s+",");
}*/
int[] aa=returnA(newStr,a);
int[] bb=returnA(newStr,b);
int m=0;
int n1=0;
int n2=0;
for(int i=0;i<bb.length;i++){
m+=aa[i]*bb[i];
n1+=(aa[i])*(aa[i]);
n2+=(bb[i])*(bb[i]);
}
System.out.println("m:"+m);
System.out.println("n1:"+n1);
System.out.println("n2:"+n2);
System.out.println(m/( (Math.sqrt(n1)) *(Math.sqrt(n2)) ));//向量余弦公式
}
}