/* WTRelation.java - high-level functions for manipulations with semantic
* relations in Wiktionary.
*
* Copyright (c) 2009-2011 Andrew Krizhanovsky <andrew.krizhanovsky at gmail.com>
* Distributed under EPL/LGPL/GPL/AL/BSD multi-license.
*/
package wikokit.base.wikt.api;
import wikokit.base.wikt.sql.TLangPOS;
import wikokit.base.wikt.sql.TPage;
import wikokit.base.wikt.sql.TRelation;
import wikokit.base.wikt.sql.TMeaning;
import wikokit.base.wikipedia.sql.Connect;
import wikokit.base.wikt.constant.Relation;
import java.util.List;
import java.util.ArrayList;
/** High-level functions for semantic relations in Wiktionary.
*/
public class WTRelation {
private final static String[] NULL_STRING_ARRAY = new String[0];
/** Gets list of semantic relations by page_title and language.
*
* One element in result String[] corresponds to one list of semantic
* relations of one meanings. With empty "" elements for absent relations.
*
* @return zero length array, if there is no at all relations of this kind
*/
public static String[] getForEachMeaningByPageLang(Connect connect,
TLangPOS lang_pos, //LanguageType lang,
Relation rel_type) {
TPage tpage = lang_pos.getPage();
if(null == tpage)
return NULL_STRING_ARRAY;
List<String> relations_lists = new ArrayList<String>();
boolean b_relation = false;
TMeaning[] mm = TMeaning.get(connect, lang_pos);
for(TMeaning m : mm) {
TRelation[] rels = TRelation.get(connect, m);
String list = "";
for(TRelation r : rels) {
if(r.getRelationType() == rel_type) {
list = list + r.getWikiText().getText() + ", ";
b_relation = true; // at least one relation exists.
}
}
int len = list.length();
if(len > 0)
relations_lists.add(list.substring(0, len - 2));
else
relations_lists.add(""); // corresponds to the absent list: "# - "
}
if(!b_relation)
return NULL_STRING_ARRAY;
assert(relations_lists.size() > 0);
return (String[])relations_lists.toArray(NULL_STRING_ARRAY);
}
/** Gets the number of semantic relations by page_title and language. The sum
* of relations for each type of semantic relation, for all meanings.
*
* @return 0, if there is no at all relations of this kind
*/
public static int getNumberByPageLang(Connect connect,
TLangPOS lang_pos) {
int n_rels = 0;
TMeaning[] mm = TMeaning.get(connect, lang_pos);
for(TMeaning m : mm)
n_rels += TRelation.count(connect, m);
return n_rels;
}
}