如何在elki中定义字符串的客户距离函数?

时间:2017-07-20 08:08:41

标签: java cluster-analysis distance elki

我正在使用elki 0.7来聚类推文(文字,日期,作者......)。

在第一步中,我想整理推文文本。

我写了一个简单的距离函数,将来我想自定义它。

public class Distance extends AbstractPrimitiveDistanceFunction<String> {
@Override
    public double distance(String str1, String str2) {
        int row1 = rowNumber.get(str1),
                row2 = rowNumber.get(str2);
        return 1 - similarity[row1][row2];
}
@Override
    public SimpleTypeInformation<? super String> getInputTypeRestriction() {
       return VectorFieldTypeInformation.typeRequest(String.class, 2, 2);
    }

}

相似度是一个计算推文标准化相似度的数组(使用tf-idf)。 现在我想运行群集但是SimpleTypeInformation函数有错误。

The type of <V>typeRequest(Class<? super V>,int,int) is erroneous
   where V is a type-variable:
    V extends FeatureVector<?> declared in method <V>typeRequest(Class<? super V>,int,int)

incompatible types: inferred type does not conform to upper bound(s)
inferred: String
    upper bound(s): String,FeatureVector<?>

有人有想法吗?

1 个答案:

答案 0 :(得分:3)

https://elki-project.github.io/dev/typeinformation

类型信息是自动类型匹配所必需的。

VectorFieldTypeInformation仅用 向量字段。现在,您声称您的String是一个二维向量字段,并且应该给出编译错误。

您的数据是字符串,而不是字符串的矢量字段;所以你需要为简单对象选择适当的TypeInformation子类:SimpleTypeInformation<String>就是你想要的。

您的代码使用预先计算的距离矩阵。 ELKI中有类,为此用例更好地进行了优化。