我需要使用开源软件mahout开展项目。一个示例程序 如下。
import org.apache.mahout.cf.taste.common.Refreshable;
import org.apache.mahout.cf.taste.impl.common.FastIDSet;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;
public class GenderItemSimilarity implements ItemSimilarity {
private final FastIDSet men;
private final FastIDSet women;
public GenderItemSimilarity(FastIDSet men, FastIDSet women) {
this.men = men;
this.women = women;
}
public double itemSimilarity(long profileID1, long profileID2) {
Boolean profile1IsMan = isMan(profileID1);
if (profile1IsMan == null) {
return 0.0;
}
Boolean profile2IsMan = isMan(profileID2);
if (profile2IsMan == null) {
return 0.0;
}
return profile1IsMan == profile2IsMan ? 1.0 : -1.0;
}
public double[] itemSimilarities(long itemID1, long[] itemID2s) {
double[] result = new double[itemID2s.length];
for (int i = 0; i < itemID2s.length; i++) {
result[i] = itemSimilarity(itemID1, itemID2s[i]);
}
return result;
}
private Boolean isMan(long profileID) {
if (men.contains(profileID)) {
return Boolean.TRUE;
}
if (women.contains(profileID)) {
return Boolean.FALSE;
}
return null;
}
public void refresh(Collection<Refreshable> alreadyRefreshed) {
// do nothing
}
}
eclipse编译器提供错误消息,例如
GenderItemSimilarity类型必须实现继承的抽象方法ItemSimilarity.allSimilarItemIDs(long)
在我看来,此错误消息表明存在类ItemSimilarity,其具有allSimilarItemIDs(long)的方法。但是,目前的程序没有这种方法。我的分析是否正确?添加这种方法会解决这个问题吗?
答案 0 :(得分:1)
你是对的,ItemSimilarity
类声明了一个名为allSimilarItemIDs
的抽象方法。在实现此类时,必须在类中为该抽象方法定义方法体。
答案 1 :(得分:0)
从错误消息我们可以理解,ItemSimilarity接口有一个名为allSimilarItemIDs(long)的方法,我们也需要处理它。
只需通过添加简单的print语句实现此方法进行测试。 如果它解决了这个问题,那么我们就可以很容易地理解问题是什么了。
答案 2 :(得分:0)
这是Mahout in Action一书的摘录。 (我是作者。)我不认为这是本书附带的完整,最新的源代码。确保获得最新的,目前不是在Manning,而是在Github生活(并将生活)。