Example usage for org.apache.mahout.cf.taste.model PreferenceArray getUserID

List of usage examples for org.apache.mahout.cf.taste.model PreferenceArray getUserID

Introduction

In this page you can find the example usage for org.apache.mahout.cf.taste.model PreferenceArray getUserID.

Prototype

long getUserID(int i);

Source Link

Usage

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;
}