/* WRelation.java - corresponds to semantic relations level of Wiktionary word. * * Copyright (c) 2009 Andrew Krizhanovsky <andrew.krizhanovsky at gmail.com> * Distributed under GNU General Public License. */ package wikokit.base.wikt.word; import wikokit.base.wikt.util.WikiText; import wikokit.base.wikt.constant.Relation; import wikokit.base.wikt.multi.ru.WRelationRu; import wikokit.base.wikt.multi.en.WRelationEn; import wikokit.base.wikipedia.language.LanguageType; import wikokit.base.wikt.util.POSText; import java.util.Map; import java.util.HashMap; import wikokit.base.wikt.util.LabelsWikiText; /** Semantic relations of Wiktionary word. * * See http://en.wiktionary.org/wiki/Wiktionary:Semantic_relations */ public class WRelation { /** Kind of semantic relation, e.g. synonymy, antonymy, etc... */ //private Relation semantic_relation; /** List of words (phrases) with context labels, * e.g. two phrases: "[[служба]]; частичн.: [[пост]]", * one phrase can have several labels. */ private LabelsWikiText[] phrases; //old: private WikiText[] phrases; // In some Wiktionaries (e.g. Russian): // "near synonyms" are split by comma, far synonyms are split by semicolon // private int[] phrases_number_which_end_by_semicolon // todo /** Summary of the definition for which synonyms are being given, * e.g. "flrink with cumplus" or "furp" in text * <PRE> * * (''flrink with cumplus''): [[flrink]], [[pigglehick]] * * (''furp''): [[furp]], [[whoodleplunk]] * </PRE> * * Disadvantage: the summary "flrink with cumplus" is repeated twice * in table for "flrink" and "pigglehick". * * Comment: is used in English Wiktionary, see http://en.wiktionary.org/wiki/Wiktionary:Entry_layout_explained#Synonyms * It is not used in Russian Wiktionary (NULL in database). */ private String meaning_summary; //private final static WRelation[] NULL_WRELATION_ARRAY = new WRelation[0]; private final static Map<Relation, WRelation[]> NULL_MAP_RELATION_WRELATION_ARRAY = new HashMap<Relation, WRelation[]>(); public WRelation(String _meaning_summary, LabelsWikiText[] _phrases) { phrases = _phrases; meaning_summary = _meaning_summary; } /** Gets array of relations (word or phrases). */ public LabelsWikiText[] get() { return phrases; } /** Gets a summary of the semantic relation meaning (e.g. title of list of synonyms). */ public String getMeaningSummary() { return meaning_summary; } /** Frees memory recursively. */ public void free () { // WikiText wt if(null != phrases) { for(int i=0; i<phrases.length; i++) { phrases[i].free(); phrases[i] = null; } phrases = null; } } /** Parses text (related to the semantic relations, e.g. synonymy), * creates and fills array of related words (WRelation) for each meaning of a word. * * @param wikt_lang language of Wiktionary * @param page_title word which are described in this article 'text' * @param lang_section language of this section of an article * @param pt POSText defines POS stored in pt.text * @return */ public static Map<Relation, WRelation[]> parse ( LanguageType wikt_lang, String page_title, LanguageType lang_section, POSText pt) { // ==== Level IV. Synonyms, Antonyms, ... ==== Map<Relation, WRelation[]> wr = NULL_MAP_RELATION_WRELATION_ARRAY; LanguageType l = wikt_lang; // get synonym context labels, get synonyms, etc. if(l == LanguageType.ru) { wr = WRelationRu.parse(wikt_lang, page_title, pt); } else if(l == LanguageType.en) { wr = WRelationEn.parse(wikt_lang, page_title, pt); //} //else if(code.equalsIgnoreCase( "simple" )) { // return WordSimple; // todo // ... } else { throw new NullPointerException("Null LanguageType"); } return wr; } }