【发布时间】:2020-04-03 18:38:22
【问题描述】:
我关注此主题并使用 MemoryIDMigrator 为我的产品获取长 ID: Mahout : To read a custom input file
但我不能像这样初始化 IDMigrator,因为父构造函数需要先出现:
public MemoryIDMigrator memoryIDMigrator;
public CustomFileDataModel(File dataFile) throws IOException {
this.memoryIDMigrator = new MemoryIDMigrator();
super(dataFile);
}
@Override
protected long readItemIDFromString(String stringID) {
long result = this.memoryIDMigrator.toLongID(stringID);
this.memoryIDMigrator.storeMapping(result, stringID);
return result;
}
我怎样才能给这个参数来取回我的字符串 ID ?我需要这样的东西:
List<RecommendedItem> recommendations = recommender.recommend(2, 5);
for (RecommendedItem recommendation : recommendations) {
System.out.println(memoryIDMigrator.toStringID(recommendation.getItemID());
}
【问题讨论】:
-
其实这是 Mahout 的问题。它在内部使用数字 id 来处理几乎所有事情。预计您将提供自己的从 Mahout ID 到您的 ID 的翻译,反之亦然。我建议使用 BiMap 之类的东西,它是一个 2 向哈希图。您可以使用一组 (YourId, MahoutId) 对对其进行初始化,然后从其中一个映射到另一个。在 Mahout (Mahout Samsara) 的 Scala 版本中,有一个 BiDictionary 类可用于此目的。
标签: java maven mahout-recommender