|
@@ -38,11 +38,11 @@ public class SimilarityLogicImpl implements SimilarityLogic{
|
|
if(usersVector == null) {
|
|
if(usersVector == null) {
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
- Long[] ids = (Long[])usersVector.keySet().toArray();
|
|
|
|
|
|
+ Object[] ids = usersVector.keySet().toArray();
|
|
for(int i=0; i<usersVector.size(); i++) {
|
|
for(int i=0; i<usersVector.size(); i++) {
|
|
for(int j = i+1; j<usersVector.size(); j++) {
|
|
for(int j = i+1; j<usersVector.size(); j++) {
|
|
- long userId1 = ids[i];
|
|
|
|
- long userId2 = ids[j];
|
|
|
|
|
|
+ long userId1 = (Long)ids[i];
|
|
|
|
+ long userId2 = (Long)ids[j];
|
|
double tempSimilarity = getSimilarity(usersVector.get(userId1), usersVector.get(userId2));
|
|
double tempSimilarity = getSimilarity(usersVector.get(userId1), usersVector.get(userId2));
|
|
result.add(new SimilarityResultVO(null,null,userId1, userId2, tempSimilarity));
|
|
result.add(new SimilarityResultVO(null,null,userId1, userId2, tempSimilarity));
|
|
}
|
|
}
|
|
@@ -69,12 +69,11 @@ public class SimilarityLogicImpl implements SimilarityLogic{
|
|
}
|
|
}
|
|
int[] userVector = usersVector.get(userId);
|
|
int[] userVector = usersVector.get(userId);
|
|
for(Long id: usersVector.keySet()) {
|
|
for(Long id: usersVector.keySet()) {
|
|
- if(id.equals(caseId)) {
|
|
|
|
- continue;
|
|
|
|
|
|
+ if(!id.equals(userId)) {
|
|
|
|
+ double tempSimilarity = getSimilarity(userVector, usersVector.get(id));
|
|
|
|
+ SimilarityResultVO similarityResultVO = new SimilarityResultVO(null, null, caseId, id, tempSimilarity);
|
|
|
|
+ result.add(similarityResultVO);
|
|
}
|
|
}
|
|
- double tempSimilarity = getSimilarity(userVector, usersVector.get(id));
|
|
|
|
- SimilarityResultVO similarityResultVO = new SimilarityResultVO(null, null, caseId, id, tempSimilarity);
|
|
|
|
- result.add(similarityResultVO);
|
|
|
|
}
|
|
}
|
|
Ordering ordering = Ordering.natural();
|
|
Ordering ordering = Ordering.natural();
|
|
result = ordering.greatestOf(result,10 );
|
|
result = ordering.greatestOf(result,10 );
|
|
@@ -138,6 +137,9 @@ public class SimilarityLogicImpl implements SimilarityLogic{
|
|
}
|
|
}
|
|
|
|
|
|
private double getSimilarity(int[] vector1, int[] vector2) {
|
|
private double getSimilarity(int[] vector1, int[] vector2) {
|
|
|
|
+ if(vector1 == null || vector2 == null) {
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
int size = vector1.length;
|
|
int size = vector1.length;
|
|
double result = 0;
|
|
double result = 0;
|
|
int index = 0;
|
|
int index = 0;
|
|
@@ -145,7 +147,7 @@ public class SimilarityLogicImpl implements SimilarityLogic{
|
|
result += vector1[index]^vector2[index];
|
|
result += vector1[index]^vector2[index];
|
|
index++;
|
|
index++;
|
|
}
|
|
}
|
|
- result = result/size;
|
|
|
|
|
|
+ result = 1 - result/size;
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|