Example usage for org.apache.commons.math3.linear OpenMapRealVector setEntry

List of usage examples for org.apache.commons.math3.linear OpenMapRealVector setEntry

Introduction

In this page you can find the example usage for org.apache.commons.math3.linear OpenMapRealVector setEntry.

Prototype

@Override
public void setEntry(int index, double value) throws OutOfRangeException 

Source Link

Usage

From source file:org.lambda3.indra.core.lucene.LuceneVectorSpace.java

@Override
public Map<String, RealVector> getNearestVectors(AnalyzedTerm term, int topk, Filter filter) {
    TermQuery query = new TermQuery(new Term(term.getFirstToken()));

    try {//from w w w .  jav  a  2 s  . c  o  m
        TopDocs topDocs = termsSearcher.search(query, 1);

        if (topDocs.totalHits == 1) {
            Document doc = termsSearcher.doc(topDocs.scoreDocs[0].doc);
            String[] indexes = doc.getValues(INDEXES_FIELD);
            RealVector termVector = BinaryCodecs.unmarshall(doc.getBinaryValue(VECTOR_FIELD).bytes, true, -1);

            Map<String, RealVector> candidates = collectVectors(Arrays.asList(indexes), INDEXES_FIELD);
            Map<String, Double> results = new ConcurrentHashMap<>();

            candidates.entrySet().stream().parallel().forEach(e -> {
                double score = func.sim(termVector, e.getValue(), true);
                results.put(e.getKey(), score);
            });

            LinkedHashMap<String, Double> sortedResults = MapUtils.entriesSortedByValues(results);

            Map<String, RealVector> nearest = new LinkedHashMap<>();
            int count = 0;
            for (String key : sortedResults.keySet()) {
                Map<Integer, Double> mapVector = RealVectorUtil.vectorToMap(candidates.get(key));
                int size = (int) getMetadata().dimensions;
                OpenMapRealVector vector = new OpenMapRealVector(size);

                for (int index : mapVector.keySet()) {
                    vector.setEntry(index, mapVector.get(index));
                }
                nearest.put(key, vector);
            }

            return nearest;
        }
    } catch (IOException e) {
        logger.error(e.getMessage());
        //TODO throw new expection here.
    }

    return null;
}