/* * ArticleParameters.java * * Copyright (c) 2005-2007 Andrew Krizhanovsky /aka at mail.iias.spb.su/ * Distributed under GNU Public License. */ package com.touchgraph.wikibrowser.parameter; import wikipedia.util.*; import wikipedia.kleinberg.SessionHolder; import java.util.Properties; import java.util.*; /** Store search and result parameters for each article in the wikipedia * to the separate file in the log directory */ public class ArticleParameters extends Parameters implements Constants { private SessionHolder session; /** Language selected for this article */ private String lang; /** Number of articles in the root set */ private int root_set_size; /** Number of articles which will be added to the base set (they refer to * one of the pages in the root base) */ private int increment; /** Number of synonyms to search */ private int n_synonyms; /** The iterative calculations (search synonyms) will be stopped if the change of value is less than epsilon */ private float eps_error; /** The max depth the category's ansectors will be checked for belonging to the blacklist */ private int categories_max_steps; /** Map from language code, e.g. "en" to categories blacklist */ private Map<String,String[]> blacklist_category; /** List of synonyms for this word rated by user */ private List<String> rated_synonyms; /** The result path will be * dir."/".article.".params" */ public ArticleParameters(String dir, String article, SessionHolder s) { super(article+".params", "Article properties"); this.setFolder(dir); blacklist_category = new HashMap<String,String[]>(); rated_synonyms = new ArrayList<String>(); System.out.print("Loading article parameters... "); session = s; getParameters(); System.out.println("OK."); } protected void setDefaults(Properties defaults) { defaults.put("root_set_size", new Integer(ROOT_SET_SIZE).toString()); defaults.put("increment", new Integer(INCREMENT).toString()); defaults.put("n_synonyms", new Integer(N_SYNONYMS).toString()); defaults.put("eps_error", new Float(EPS_ERROR).toString()); defaults.put("categories_max_steps", new Integer(CATEGORIES_MAX_STEPS).toString()); defaults.put("lang", LANG_CODE[0]); String[] c = null; for(int i=0; i<LANG_CODE.length; i++) { if(LANG_CODE[i].equalsIgnoreCase("en")) { c = BLACKLIST_CATEGORY_EN; } else { if (LANG_CODE[i].equalsIgnoreCase("eo")) { c = BLACKLIST_CATEGORY_EO; } else { if (LANG_CODE[i].equalsIgnoreCase("ru")) { //c = BLACKLIST_CATEGORY_RU; //Encodings.FromTo(NODE_RU, "UTF8", "Cp1251"); c = new String[BLACKLIST_CATEGORY_RU.length]; for(int j=0; j<BLACKLIST_CATEGORY_RU.length; j++) { c[j] = session.connect.enc.EncodeFromJava(BLACKLIST_CATEGORY_RU[j]); } } } } defaults.put("blacklist_category_" + LANG_CODE[i], StringUtil.join("|", c)); } } protected void updateSettingsFromProperties() { int i; try { root_set_size = Integer.parseInt(properties.getProperty("root_set_size")); increment = Integer.parseInt(properties.getProperty("increment")); n_synonyms = Integer.parseInt(properties.getProperty("n_synonyms")); eps_error = Float.parseFloat(properties.getProperty("eps_error")); categories_max_steps = Integer.parseInt(properties.getProperty("categories_max_steps")); // get (update) blacklist_category for the language of the current word for(i=0; i<LANG_CODE.length; i++) { String s = properties.getProperty("blacklist_category_" + LANG_CODE[i]); blacklist_category.put(LANG_CODE[i], StringUtil.split("|", s)); } rated_synonyms.clear(); String s = properties.getProperty("rated_synonyms"); if(null != s && 0 < s.length()) { rated_synonyms.addAll( Arrays.asList(StringUtil.split("|", s)) ); } } catch (NumberFormatException e) { // we don't care if the property was of the wrong format, // they've all got default values. So catch the exception // and keep going. } } protected void updatePropertiesFromSettings() { properties.put("root_set_size", new Integer(root_set_size).toString()); properties.put("increment", new Integer(increment).toString()); properties.put("n_synonyms", new Integer(n_synonyms).toString()); properties.put("eps_error", new Float(eps_error).toString()); properties.put("categories_max_steps", new Integer(categories_max_steps).toString()); properties.put("rated_synonyms", getRatedSynonymsAsString()); properties.put("lang", lang); String[] s = blacklist_category.get(lang); if(null != s) { properties.put("blacklist_category_" + lang, StringUtil.join("|", s)); } } public void setLang(String s) { List<String> l = Arrays.asList(LANG_CODE); if(!l.contains(s)) { System.out.println("Error in ArticleParameters.setLang("+s+")"); } lang = s; } public String getLang() { return lang; } public String[] getCategoryBlackList() { return blacklist_category.get(lang); } public void setCategoryBlackList(String[] blacklist) { blacklist_category.put(lang, blacklist); } private String getRatedSynonymsAsString() { String s = ""; if(null != rated_synonyms && 0 < rated_synonyms.size()) { s = StringUtil.join("|", (String[])rated_synonyms.toArray(new String[0])); } return s; } public List<String> getRatedSynonyms() { return rated_synonyms; } public void setRatedSynonyms(List<String> s){ rated_synonyms = s; } public void setRootSetSize(int root_set_size) { this.root_set_size = root_set_size; } public int getRootSetSize() { return root_set_size; } public void setIncrement(int increment) { this.increment = increment; } public int getIncrement() { return increment; } public void setNSynonym(int n_synonyms) { this.n_synonyms = n_synonyms; } public int getNSynonyms() { return n_synonyms; } public void setEpsError(float eps_error) { this.eps_error = eps_error; } public float getEpsError() { return eps_error; } public void setCategoriesMaxSteps(int categories_max_steps) { this.categories_max_steps = categories_max_steps; } public int getCategoriesMaxSteps() { return categories_max_steps; } }