List of usage examples for org.apache.mahout.cf.taste.model PreferenceArray getUserID
long getUserID(int i);
From source file:com.anjuke.romar.mahout.persistence.FilePreferenceSource.java
License:Apache License
@Override public void compact() { // ????//from ww w.j a v a 2 s .co m final long version = getCurrentVersion() - 1; if (version < 0) { return; } File latestSnapshotFile = getLatestSnapshotFile(); if (latestSnapshotFile != null && getSnapshotFileVersion(latestSnapshotFile) == version) { return; } synchronized (_snapshotWriterLock) { PrintWriter snapshotWriter = createWriter(getSnapshotFile(version)); try { final List<File> logFileList = getLogFileListUntilVersion(version); List<File> fileToIt = new ArrayList<File>(logFileList); if (latestSnapshotFile != null) { fileToIt.add(0, latestSnapshotFile); } PreferenceIterator it = new LogFileIterator(fileToIt); FastByIDMap<PreferenceArray> data = new FastByIDMap<PreferenceArray>(); while (it.hasNext()) { Preference pref = it.next(); if (it.getType() == PreferenceType.ADD) { Util.applyAdd(data, pref); } else if (it.getType() == PreferenceType.DELETE) { Util.applyRemove(data, pref); } } for (Entry<Long, PreferenceArray> entry : data.entrySet()) { PreferenceArray array = entry.getValue(); for (int i = 0, length = array.length(); i < length; i++) { long userID = array.getUserID(i); long itemID = array.getItemID(i); float value = array.getValue(i); snapshotWriter.print(userID); snapshotWriter.print(','); snapshotWriter.print(itemID); snapshotWriter.print(','); snapshotWriter.println(value); } } snapshotWriter.flush(); snapshotWriter.close(); removeFile(); } finally { snapshotWriter.close(); } } }
From source file:lib.similarity.AbstractUnboundedSimilarity.java
License:Apache License
@Override public final double itemSimilarity(long itemID1, long itemID2) throws TasteException { DataModel dataModel = getDataModel(); PreferenceArray xPrefs = dataModel.getPreferencesForItem(itemID1); PreferenceArray yPrefs = dataModel.getPreferencesForItem(itemID2); int xLength = xPrefs.length(); int yLength = yPrefs.length(); if (xLength == 0 || yLength == 0) { return Double.NaN; }//www. j a v a 2 s .c o m long xIndex = xPrefs.getUserID(0); long yIndex = yPrefs.getUserID(0); int xPrefIndex = 0; int yPrefIndex = 0; // No, pref inferrers and transforms don't appy here. I think. SimilarityAccumulator accum = getSimilarityAccumulator(); while (true) { int compare = xIndex < yIndex ? -1 : xIndex > yIndex ? 1 : 0; if (compare == 0) { // Both users expressed a preference for the item double x = xPrefs.getValue(xPrefIndex); double y = yPrefs.getValue(yPrefIndex); accum.processPrefPair(x, y); } if (compare <= 0) { if (++xPrefIndex == xLength) { break; } xIndex = xPrefs.getUserID(xPrefIndex); } if (compare >= 0) { if (++yPrefIndex == yLength) { break; } yIndex = yPrefs.getUserID(yPrefIndex); } } double result; result = accum.computeResult(); if (similarityTransform != null) { result = similarityTransform.transformSimilarity(itemID1, itemID2, result); } return result; }