コサイン類似度コード実装


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());
	}
}