/* * Seldon -- open source prediction engine * ======================================= * * Copyright 2011-2015 Seldon Technologies Ltd and Rummble Ltd (http://www.seldon.io/) * * ******************************************************************************************** * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * ******************************************************************************************** */ package io.seldon.semvec; import pitt.search.semanticvectors.CompoundVectorBuilder; import pitt.search.semanticvectors.FlagConfig; import pitt.search.semanticvectors.LuceneUtils; import pitt.search.semanticvectors.VectorStore; import pitt.search.semanticvectors.vectors.Vector; public class VectorStorePredictor { private VectorStore queryVecStore; private VectorStore searchVecStore; private LuceneUtils luceneUtils; private FlagConfig flagConfig = FlagConfig.getFlagConfig(null); Vector queryVector; public VectorStorePredictor(String queryTerm, VectorStore queryVecStore, VectorStore searchVecStore, LuceneUtils luceneUtils) { this.queryVecStore = queryVecStore; this.searchVecStore = searchVecStore; this.luceneUtils = luceneUtils; queryVector = CompoundVectorBuilder.getQueryVectorFromString(queryVecStore, luceneUtils, flagConfig, queryTerm); } public String getPrediction(String searchTerm,String[] suffixes) { String bestSuffix = null; double bestScore = 0; if (queryVector != null) { for(String suffix : suffixes) { String term = searchTerm +"_"+suffix; Vector vec = CompoundVectorBuilder.getQueryVectorFromString(searchVecStore, luceneUtils, flagConfig, term); if (vec != null) { // old SV 2.2 code //float simScore = VectorUtils.scalarProduct(queryVector, vec); double simScore = queryVector.measureOverlap(vec); if (simScore > bestScore) { bestSuffix = suffix; bestScore = simScore; } } } } if (bestScore > 0.15) return bestSuffix; else return null; } }