コサイン類似度コード実装
2115 ワード
package hlzhou;
import java.util.ArrayList;
import java.util.List;
public class ComputerDecision {
List<Integer> vector1 = new ArrayList<Integer>();
List<Integer> vector2 = new ArrayList<Integer>();
public ComputerDecision(String string1, String string2) {
//
String[] vector1String = string1.trim().replaceAll("\\s+", " ").split(" ");
String[] vector2String = string2.trim().replaceAll("\\s+", " ").split(" ");
for (String string : vector1String) {
vector1.add(Integer.parseInt(string));
}
for (String string : vector2String) {
vector2.add(Integer.parseInt(string));
}
}
//
public double sim() {
double result = 0;
result = pointMulti(vector1, vector2) / sqrtMulti(vector1, vector2);
return result;
}
private double sqrtMulti(List<Integer> vector1, List<Integer> vector2) {
double result = 0;
result = squares(vector1) * squares(vector2);
result = Math.sqrt(result);
return result;
}
//
private double squares(List<Integer> vector) {
double result = 0;
for (Integer integer : vector) {
result += integer * integer;
}
return result;
}
//
private double pointMulti(List<Integer> vector1, List<Integer> vector2) {
double result = 0;
for (int i = 0; i < vector1.size(); i++) {
result += vector1.get(i) * vector2.get(i);
}
return result;
}
public static void main(String[] args) {
String string = "0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0";
String string2 = "0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0";
ComputerDecision computerDecition = new ComputerDecision(string,
string2);
System.out.println(computerDecition.sim());
}
}