package wikokit.base.wikt.sql;
import wikokit.base.wikt.util.POSText;
import wikokit.base.wikipedia.language.LanguageType;
import wikokit.base.wikt.constant.POS;
import wikokit.base.wikt.constant.Relation;
import wikokit.base.wikt.word.WRelation;
import wikokit.base.wikt.multi.ru.WRelationRu;
import wikokit.base.wikipedia.sql.Connect;
//import wikipedia.sql.UtilSQL;
import java.util.Map;
//import java.util.Collection;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
public class TRelationTest {
Connect conn, enwikt_parsed_conn, ruwikt_parsed_conn;
TPOS pos;
TLang lang;
TPage page;
String page_title, page_title2, wiki_text_str, str_wiki_text_wikified;
TRelationType relation_type;
TWikiText wiki_text;
TLangPOS lang_pos;
TMeaning meaning;
String car_text, car_meaning_summary;
String hrunk_text, hrunk_meaning_summary1, hrunk_meaning_summary2;
public TRelationTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
ruwikt_parsed_conn = new Connect();
ruwikt_parsed_conn.Open(Connect.RUWIKT_HOST,Connect.RUWIKT_PARSED_DB,Connect.RUWIKT_USER,Connect.RUWIKT_PASS,LanguageType.ru);
enwikt_parsed_conn = new Connect();
enwikt_parsed_conn.Open(Connect.ENWIKT_HOST,Connect.ENWIKT_PARSED_DB,Connect.ENWIKT_USER,Connect.ENWIKT_PASS,LanguageType.ru);
conn = ruwikt_parsed_conn;
//conn = enwikt_parsed_conn;
//UtilSQL.deleteAllRecordsResetAutoIncrement(conn, "page");
TLang.recreateTable(conn); // once upon a time: create Wiktionary parsed db
TLang.createFastMaps(conn); // once upon a time: use Wiktionary parsed db
TPOS.recreateTable(conn); // once upon a time: create Wiktionary parsed db
TPOS.createFastMaps(conn); // once upon a time: use Wiktionary parsed db
TRelationType.recreateTable(conn);
TRelationType.createFastMaps(conn);
page_title = conn.enc.EncodeFromJava("car_test"); // test_TRelation
// insert page, get page_id
int word_count = 7;
int wiki_link_count = 13;
boolean is_in_wiktionary = true;
String redirect_target = null;
page = TPage.get(conn, page_title);
if(null == page) {
TPage.insert(conn, page_title, word_count, wiki_link_count,
is_in_wiktionary, redirect_target);
page = TPage.get(conn, page_title);
assertTrue(null != page);
}
// add "automobile"
page_title2 = "automobile_test";
TPage.insert(conn, page_title2, word_count, wiki_link_count,
is_in_wiktionary, redirect_target);
// get lang
int lang_id = TLang.getIDFast(LanguageType.os); //227;
lang = TLang.getTLangFast(lang_id);
assertTrue(null != lang);
assertEquals(LanguageType.os, lang.getLanguage());
// get POS
pos = TPOS.get(POS.noun);
assertTrue(null != pos);
// get relation_type
relation_type = TRelationType.get(conn, Relation.synonymy);
assertTrue(null != relation_type);
// insert wiki_text
wiki_text_str = "test_TWikiText_TRelation";
str_wiki_text_wikified = "[[test_TWikiText_TRelation]]";
wiki_text = TWikiText.insert(conn, wiki_text_str, str_wiki_text_wikified);
if(null == wiki_text)
wiki_text = TWikiText.get(conn, wiki_text_str);
assertTrue(null != wiki_text);
// insert lang_pos
int etymology_n = 0;
String lemma = "";
lang_pos = TLangPOS.insert(conn, page, lang, pos, etymology_n, lemma);
assertTrue(null != lang_pos);
// insert meaning
int meaning_n = 1;
meaning = TMeaning.insert(conn, lang_pos, meaning_n, wiki_text);
assertTrue(null != meaning);
car_text = "=== Произношение ===\n" +
"==== Значение ====\n" +
"==== Синонимы ====\n" +
"# [[carriage_test]]\n" +
"# [[automobile_test]]\n" +
"# -\n" +
"# -\n" +
"# -\n" +
"\n" +
"==== Антонимы ====\n" +
"\n" +
"==== Гиперонимы ====\n" +
"# [[vehicle_test]]\n" +
"# -\n" +
"# -\n" +
"# -\n" +
"# -\n" +
"\n" +
"==== Гипонимы ====\n" +
"# -\n" +
"# [[truck_test]], [[van_test]], [[bus_test]]\n" +
"# -\n" +
"\n" +
"===Родственные слова===\n";
car_meaning_summary = null;
hrunk_text =
"# Definition hrunk 1.\n" +
"# Definition hrunk 2.\n" +
"\n" +
"====Synonyms====\n" +
"* (''flrink with cumplus_test''): [[flrink_test]], [[pigglehick_test]]\n" +
"* (''furp_test''): [[furp_test]], [[whoodleplunk_test]]";
hrunk_meaning_summary1 = "flrink with cumplus_test";
hrunk_meaning_summary2 = "furp_test";
}
@After
public void tearDown() {
// delete temporary records
String[] pages_test = {
"carriage_test", "automobile_test",
"vehicle_test",
"truck_test", "van_test", "bus_test"};
for(String p: pages_test) {
TWikiText wiki_text2 = TWikiText.get(conn, p); // 1. get WikiText by pages_test
if(null != wiki_text2)
TWikiText.deleteWithWords(conn, wiki_text2);
TPage.delete(conn, p);
}
TPage.delete (conn, page_title);
TPage.delete (conn, page_title2);
TLangPOS.delete (conn, page);
TMeaning.delete (conn, meaning);
TWikiText.delete(conn, wiki_text_str);
//UtilSQL.deleteAllRecordsResetAutoIncrement(conn, "page");
//UtilSQL.deleteAllRecordsResetAutoIncrement(conn, "relation");
//UtilSQL.deleteAllRecordsResetAutoIncrement(conn, "meaning");
//UtilSQL.deleteAllRecordsResetAutoIncrement(conn, "wiki_text");
//UtilSQL.deleteAllRecordsResetAutoIncrement(conn, "wiki_text_words");
conn.Close();
}
@Test
public void testStoreToDB() {
System.out.println("storeToDB");
//Connect conn = ruwikt_parsed_conn;
LanguageType wikt_lang = LanguageType.ru; // Russian Wiktionary
//String page_title = "car";
POSText pt = new POSText(POS.noun, car_text);
Map<Relation, WRelation[]> m_relations = WRelationRu.parse(wikt_lang, page_title, pt);
assertNotNull(m_relations);
assertTrue(m_relations.size() > 0);
assertTrue(m_relations.containsKey(Relation.synonymy));
// let's check second meaning (i.e. [1]):
// synonyms: [[automobile]]
// hyponyms: [[truck]], [[van]], [[bus]]
TRelation.storeToDB(conn, meaning, 1, m_relations);
TRelation[] trelation = TRelation.get(conn, meaning); //TRelationType trelation_synonymy = TRelationType.getRelationFast(Relation.synonymy);
assertNotNull(trelation);
assertEquals(4, trelation.length);
for(TRelation t : trelation)
TRelation.delete(conn, t);
}
@Test
public void testCount() {
System.out.println("count");
//Connect conn = ruwikt_parsed_conn;
LanguageType wikt_lang = LanguageType.ru; // Russian Wiktionary
POSText pt = new POSText(POS.noun, car_text);
Map<Relation, WRelation[]> m_relations = WRelationRu.parse(wikt_lang, page_title, pt);
assertNotNull(m_relations);
assertTrue(m_relations.size() > 0);
assertTrue(m_relations.containsKey(Relation.synonymy));
// let's check second meaning (i.e. [1]):
// synonyms: [[automobile]]
// hyponyms: [[truck]], [[van]], [[bus]]
TRelation.storeToDB(conn, meaning, 1, m_relations);
int trelation_number = TRelation.count(conn, meaning);
assertEquals(4, trelation_number);
TRelation[] trelation = TRelation.get(conn, meaning);
for(TRelation t : trelation)
TRelation.delete(conn, t);
}
@Test
public void testInsert_ru() {
System.out.println("insert_ang_get_and_delete_ru");
//Connect conn = ruwikt_parsed_conn;
TRelation relation0 = TRelation.insert(conn, meaning, wiki_text,
relation_type, car_meaning_summary);
assertTrue(null != relation0);
TRelation[] array_rel = TRelation.get(conn, meaning);
assertTrue(null != array_rel);
assertEquals(1, array_rel.length);
assertNull(array_rel[0].getMeaningSummary()); // == car_meaning_summary
TRelation.delete(conn, relation0);
array_rel = TRelation.get(conn, meaning);
assertEquals(0, array_rel.length);
}
// test an insertion of not null value of meaning_summary
// hrunk_text, hrunk_meaning_summary1, hrunk_meaning_summary2
@Test
public void testInsert_not_null_meaning_summary_en() {
System.out.println("insert_not_null_meaning_summary_en");
//Connect conn = ruwikt_parsed_conn;
TRelation relation0 = TRelation.insert(conn, meaning, wiki_text,
relation_type, hrunk_meaning_summary1);
assertTrue(null != relation0);
TRelation[] array_rel = TRelation.get(conn, meaning);
assertTrue(null != array_rel);
assertEquals(1, array_rel.length);
String sum0 = array_rel[0].getMeaningSummary();
assertTrue(sum0.equalsIgnoreCase(hrunk_meaning_summary1));
TRelation.delete(conn, relation0);
array_rel = TRelation.get(conn, meaning);
assertEquals(0, array_rel.length);
}
@Test
public void testGetByID_ru() {
System.out.println("getByID_ru");
//Connect conn = ruwikt_parsed_conn;
TRelation r = TRelation.insert( conn, meaning, wiki_text, relation_type,
car_meaning_summary);
assertTrue(null != r);
TRelation r2 = TRelation.getByID(conn, r.getID());
assertTrue(null != r2);
assertEquals(wiki_text_str, r2.getWikiText().getText());
TRelation.delete(conn, r);
}
//public static Relation getRelationType (Connect connect,String word1,String word2) {
@Test
public void testGetRelationType () {
System.out.println("getRelationType _ru");
//Connect conn = ruwikt_parsed_conn;
LanguageType wikt_lang = LanguageType.ru; // Russian Wiktionary
POSText pt = new POSText(POS.noun, car_text);
Map<Relation, WRelation[]> m_relations = WRelationRu.parse(wikt_lang, page_title, pt);
// let's check second meaning (i.e. [1]):
// synonyms: [[automobile]]
// hyponyms: [[truck]], [[van]], [[bus]]
TRelation.storeToDB(conn, meaning, 1, m_relations);
Relation r;
r = TRelation.getRelationType(conn, "car_test", "car_test");
assertNull(r);
r = TRelation.getRelationType(conn, "car_test", "absent word");
assertNull(r);
r = TRelation.getRelationType(conn, "automobile_test", "car_test");
assertEquals(Relation.synonymy, r);
r = TRelation.getRelationType(conn, "car_test", "van_test");
assertEquals(Relation.hyponymy, r);
TRelation[] trelation = TRelation.get(conn, meaning);
for(TRelation t : trelation)
TRelation.delete(conn, t);
}
}