
org.reco4j.util.RecommenderPropertiesHandle Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of reco4j-core Show documentation
Show all versions of reco4j-core Show documentation
Reco4j is an open source project aims at developing a recommendation framework based on graph data sources. We choose graph databases for several reasons. They are NoSQL databases, so "schemaless". This means that it is possible to extend the basic data structure with intermediate information, i.e. similarity value between item and so on. Moreover, since every information is expressed with properties, nodes and relations, the recommendation process can be customized to work on every graph.
Reco4j can be used on every graph where "user" and "item" is represented by node and the preferences are modelled as relationship between them.
Current implementation leverage on Neo4j as first graph database integrated in our framework.
The newest version!
/*
* RecommenderPropertiesHandle.java
*
* Copyright (C) 2013 Alessandro Negro
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package org.reco4j.util;
import java.util.Properties;
import org.reco4j.graph.IGraphConfig;
import org.reco4j.recommender.knn.ICollaborativeFilteringRecommenderConfig;
import org.reco4j.recommender.svd.IMFRecommenderConfig;
import org.reco4j.recommender.mahout.IMahoutRecommenderConfig;
import org.reco4j.recommender.svd.IBinaryMFRecommenderConfig;
import org.reco4j.similarity.ICosineSimilarityConfig;
import org.reco4j.similarity.IEuclideanSimilarityConfig;
import org.reco4j.similarity.ISimilarityConfig;
/**
*
* @author Alessandro Negro
*/
public class RecommenderPropertiesHandle
implements
IPropertiesHandle,
IRecommenderConfig, ICollaborativeFilteringRecommenderConfig, IMFRecommenderConfig, IMahoutRecommenderConfig,
ISimilarityConfig, ICosineSimilarityConfig, IEuclideanSimilarityConfig,
IGraphConfig, IBinaryMFRecommenderConfig
{
protected Properties properties;
//Properties name on the properties file
protected final static String PROTERTY_NAME_K_VALUE = "KValue";
protected final static String PROTERTY_NAME_RECOMMENDED_ITEMS = "RecoNumber";
protected final static String PROPERTY_NAME_NODE_IDENTIFIER = "NodeIdentifier";
protected final static String PROPERTY_NAME_NODE_USER_IDENTIFIER = "userIdentifier";
protected final static String PROPERTY_NAME_NODE_ITEM_IDENTIFIER = "itemIdentifier";
protected final static String PROPERTY_NAME_RANK_VALUE = "RankValueIdentifier";
protected final static String PROPERTY_NAME_DISTANCE_ALGORITHM = "DistanceAlgorithm";
protected final static String PROPERTY_NAME_EDGE_RANK = "rankEdgeIdentifier";
protected final static String PROPERTY_NAME_EDGE_TEST_RANK = "testRankEdgeIdentifier";
protected final static String PROPERTY_NAME_EDGE_SIMILARITY = "similarityEdgeIdentifier";
protected final static String PROPERTY_NAME_EDGE_ESTIMATED_RATING = "estimatedRatingIdentifier";
protected final static String PROPERTY_NAME_RECALCULATE_SIMILARITY = "recalculateSimilarity";
protected final static String PROPERTY_NAME_RECOMMENDER_TYPE = "recommenderType";
protected final static String PROPERTY_NAME_MAXFEATURES = "maxFeatures";
protected final static String PROPERTY_NAME_FEATURE_INIT_VALUE = "featureInitValue";
protected final static String PROPERTY_NAME_USER_TYPE = "userType";
protected final static String PROPERTY_NAME_ITEM_TYPE = "itemType";
protected static final String PROPERTY_NAME_MAX_PREFERENCE_VALUE = "maxPreference";
protected static final String PROPERTY_NAME_MIN_PREFERENCE_VALUE = "minPreference";
protected static final String PROPERTY_NAME_NODE_TYPE = "nodeType";
protected static final String PROPERTY_NAME_IS_BINARY = "isBinary";
protected static final String PROPERTY_NAME_SAMPLING_SCHEMA = "samplingSchema";
protected static final String PROPERTY_NAME_EXPLICIT_BYNARY_FEEDBACK = "binaryFeedback";
protected static final String PROPERTY_NAME_MODEL_NAME = "modelName";
protected static final String PROPERTY_NAME_RECOMMENDER_NAME = "recommenderName";
//Default value for properties name on node or edges
protected final static String PROPERTY_NODE_IDENTIFIER = "id"; //Prendere anche da properties file
protected final static String PROPERTY_ITEM_IDENTIFIER = "itemId"; //Prendere anche da properties file
protected final static String PROPERTY_USER_IDENTIFIER = "userId"; //Prendere anche da properties file
protected final static String PROPERTY_RANK_VALUE_NAME = "RankValue"; //Prendere anche da properties file
protected final static String PROPERTY_EDGE_RANK_IDENTIFIER = "rated";
protected final static String PROPERTY_EDGE_TEST_RANK_IDENTIFIER = "ratedTest";
protected final static String PROPERTY_EDGE_SIMILARITY_IDENTIFIER = "similarity";
protected final static String PROPERTY_EDGE_ESTIMATED_RATING_IDENTIFIER = "estimatedRating";
protected final static String PROPERTY_USER_TYPE = "User";
protected final static String PROPERTY_ITEM_TYPE = "Movie";
protected final static String PROPERTY_NODE_TYPE = "type";
protected final static boolean PROPERTY_RECALCULATE_SIMILARITY = false;
protected final static int PROPERTY_RECOMMENDER_TYPE = 1;
protected final static int PROPERTY_MAXFEATURES = 20;
protected final static double PROPERTY_FEATURE_INIT_VALUE = 0.1;
protected final static double PROPERTY_MAX_PREFERENCE_VALUE = 5.0;
protected final static double PROPERTY_MIN_PREFERENCE_VALUE = 1.0;
protected final static boolean PROPERTY_IS_BINARY = false;
protected final static int PROPERTY_SAMPLING_SCHEMA = 0; //DEFAULT DEACTIVATED
protected final static String PROPERTY_EXPLICIT_BINARY_FEEDBACK = "accept";
protected final static String PROPERTY_MODEL_NAME = "default";
protected static final String PROPERTY_RECOMMENDER_NAME = "defaultRecommender";
//Default Value for Recommender
protected static int PROPERTY_K_VALUE = 25;
protected static int PROPERTY_RECO_NUMBER = 10;
//private static RecommenderPropertiesHandle theInstance = new RecommenderPropertiesHandle();
public RecommenderPropertiesHandle(Properties properties)
{
this.properties = properties;
}
// public static RecommenderPropertiesHandle getInstance()
// {
// return theInstance;
// }
@Override
public void setProperties(Properties properties)
{
this.properties = properties;
}
@Override
public int getKValue()
{
int k_value = Integer.parseInt(getProperty(PROTERTY_NAME_K_VALUE, "-1"));
if (k_value > 0)
return k_value;
else
return PROPERTY_K_VALUE; //Default value
}
@Override
public int getRecoNumber()
{
int reco_number_v = Integer.parseInt(getProperty(PROTERTY_NAME_RECOMMENDED_ITEMS, "-1"));
if (reco_number_v > 0)
return reco_number_v;
else
return PROPERTY_RECO_NUMBER; //Default value
}
public String getNodeIdentifierName()
{
return PROPERTY_NODE_IDENTIFIER; //Default value
}
@Override
public String getItemIdentifierName()
{
String rankValueName = getProperty(PROPERTY_NAME_NODE_ITEM_IDENTIFIER, null);
if (rankValueName != null)
return rankValueName;
else
return PROPERTY_ITEM_IDENTIFIER;
}
@Override
public String getUserIdentifierName()
{
String rankValueName = getProperty(PROPERTY_NAME_NODE_USER_IDENTIFIER, null);
if (rankValueName != null)
return rankValueName;
else
return PROPERTY_USER_IDENTIFIER;
}
@Override
public String getEdgeRankValueName()
{
String rankValueName = getProperty(PROPERTY_NAME_RANK_VALUE, null);
if (rankValueName != null)
return rankValueName;
else
return PROPERTY_RANK_VALUE_NAME; //Default value
}
@Override
public String getItemType()
{
String rankValueName = getProperty(PROPERTY_NAME_ITEM_TYPE, null);
if (rankValueName != null)
return rankValueName;
else
return PROPERTY_ITEM_TYPE; //Default value
}
@Override
public String getUserType()
{
String rankValueName = getProperty(PROPERTY_NAME_USER_TYPE, null);
if (rankValueName != null)
return rankValueName;
else
return PROPERTY_USER_TYPE; //Default value
}
@Override
public String getEdgeRankName()
{
String rankValueName = getProperty(PROPERTY_NAME_EDGE_RANK, null);
if (rankValueName != null)
return rankValueName;
else
return PROPERTY_EDGE_RANK_IDENTIFIER; //Default value
}
@Override
public String getEdgeTestRankName()
{
String rankValueName = getProperty(PROPERTY_NAME_EDGE_TEST_RANK, null);
if (rankValueName != null)
return rankValueName;
else
return PROPERTY_EDGE_TEST_RANK_IDENTIFIER; //Default value
}
@Override
public String getEdgeEstimatedRatingName()
{
String rankValueName = getProperty(PROPERTY_NAME_EDGE_ESTIMATED_RATING, null);
if (rankValueName != null)
return rankValueName;
else
return PROPERTY_EDGE_ESTIMATED_RATING_IDENTIFIER; //Default value
}
public String getProperty(String name, String defaultValue)
{
if (properties != null)
{
return properties.getProperty(name, defaultValue);
}
else
{
throw new RuntimeException("Recommender properties is not set!");
}
}
@Override
public int getSimilarityType()
{
int distanceAlg = Integer.parseInt(getProperty(PROPERTY_NAME_DISTANCE_ALGORITHM, "-1"));
if (distanceAlg > 0)
return distanceAlg;
else
return ISimilarityConfig.SIMILARITY_TYPE_EUCLIDEAN; //Default value
}
@Override
public ISimilarityConfig getSimilarityConfig()
{
return this;
}
@Override
public IGraphConfig getGraphConfig()
{
return this;
}
@Override
public String getEdgeSimilarityName()
{
String rankValueName = getProperty(PROPERTY_NAME_EDGE_SIMILARITY, null);
if (rankValueName != null)
return rankValueName;
else
return PROPERTY_EDGE_SIMILARITY_IDENTIFIER; //Default value
}
@Override
public boolean getRecalculateSimilarity()
{
String rankValueName = getProperty(PROPERTY_NAME_RECALCULATE_SIMILARITY, null);
if (rankValueName != null)
return Boolean.valueOf(rankValueName).booleanValue();
else
return PROPERTY_RECALCULATE_SIMILARITY; //Default value
}
@Override
public int getRecommenderType()
{
String recommenderTypeValue = getProperty(PROPERTY_NAME_RECOMMENDER_TYPE, null);
if (recommenderTypeValue != null)
return Integer.valueOf(recommenderTypeValue).intValue();
else
return PROPERTY_RECOMMENDER_TYPE; //Default value
}
@Override
public int getMaxFeatures()
{
String maxFeatureValue = getProperty(PROPERTY_NAME_MAXFEATURES, null);
if (maxFeatureValue != null)
return Integer.valueOf(maxFeatureValue).intValue();
else
return PROPERTY_MAXFEATURES; //Default value
}
@Override
public double getFeatureInitValue()
{
String featureInitValue = getProperty(PROPERTY_NAME_FEATURE_INIT_VALUE, null);
if (featureInitValue != null)
return Double.parseDouble(featureInitValue);
else
return PROPERTY_FEATURE_INIT_VALUE; //Default value
}
@Override
public double getMaxPreferenceValue()
{
String maxPreferenceValue = getProperty(PROPERTY_NAME_MAX_PREFERENCE_VALUE, null);
if (maxPreferenceValue != null)
return Double.parseDouble(maxPreferenceValue);
else
return PROPERTY_MAX_PREFERENCE_VALUE; //Default value
}
@Override
public double getMinPreferenceValue()
{
String minPreferenceValue = getProperty(PROPERTY_NAME_MIN_PREFERENCE_VALUE, null);
if (minPreferenceValue != null)
return Double.parseDouble(minPreferenceValue);
else
return PROPERTY_MIN_PREFERENCE_VALUE; //Default value
}
public String getNodeTypeName()
{
String nodeType = getProperty(PROPERTY_NAME_NODE_TYPE, null);
if (nodeType != null)
return nodeType;
else
return PROPERTY_NODE_TYPE; //Default value
}
@Override
public boolean isBinary()
{
String isBoolean = getProperty(PROPERTY_NAME_IS_BINARY, null);
if (isBoolean != null)
return isBoolean.equalsIgnoreCase("true");
else
return PROPERTY_IS_BINARY; //Default value
}
@Override
public int getSamplingSchemaForNegativeValue()
{
String samplingSchemaStr = getProperty(PROPERTY_NAME_SAMPLING_SCHEMA, null);
if (samplingSchemaStr != null)
return Integer.parseInt(samplingSchemaStr);
else
return PROPERTY_SAMPLING_SCHEMA; //Default value
}
@Override
public String getExplicitBinaryFeedbackName()
{
String explicitBinary = getProperty(PROPERTY_NAME_EXPLICIT_BYNARY_FEEDBACK, null);
if (explicitBinary != null)
return explicitBinary;
else
return PROPERTY_EXPLICIT_BINARY_FEEDBACK; //Default value
}
@Override
public String getModelName()
{
return getProperty(PROPERTY_NAME_MODEL_NAME, PROPERTY_MODEL_NAME);
}
@Override
public String getRecommenderName()
{
return getProperty(PROPERTY_NAME_RECOMMENDER_NAME, PROPERTY_RECOMMENDER_NAME);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy