package wikokit.base.wikt.multi.ru; import java.util.Map; //import java.util.regex.Pattern; 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.*; import wikokit.base.wikipedia.language.LanguageType; import wikokit.base.wikt.constant.Label; import wikokit.base.wikt.constant.Relation; import wikokit.base.wikt.util.POSText; import wikokit.base.wikt.word.WRelation; import wikokit.base.wikt.constant.POS; import wikokit.base.wikt.multi.ru.name.LabelRu; import wikokit.base.wikt.util.LabelsWikiText; public class WRelationRuTest { public static String samolyot_text, kolokolchik_text, empty_relation, empty_hyphen_relation, empty_hyphen2_relation; public WRelationRuTest() { } @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { } @Before public void setUp() { samolyot_text = "==== Значение ====\n" + "# летательный [[аппарат]] тяжелее [[воздух]]а с жёстким [[крыло]]м и собственным [[мотор]]ом {{пример|Самолёт-истребитель.}} {{пример|Военный cамолёт.}} {{пример|Эскадрилья самолётов.}}\n" + "\n" + "==== Синонимы ====\n" + "# [[аэроплан]], [[воздушный лайнер]]\n" + "\n" + "==== Антонимы ====\n" + "# -\n" + "\n" + "==== Гиперонимы ====\n" + "# [[авиация]], [[транспорт]]\n" + "\n" + "==== Гипонимы ====\n" + "# [[штурмовик]], [[истребитель]], [[экранолёт]], [[экраноплан]], [[моноплан]], [[биплан]], [[триплан]], [[многоплан]], [[аэробус]]\n" + "\n" + "==== Согипонимы ====\n" + "# [[планер]], [[махолёт]], [[мускулолёт]], [[дельтаплан]], [[параплан]]; [[турболёт]]; [[вертолёт]], [[автожир]], [[винтокрыл]]; [[атомолёт]]\n" + "\n" + "==== Холонимы ====\n" + "# [[эскадрилья]]\n" + "\n" + "==== Меронимы ====\n" + "# [[авиапушка]], [[фюзеляж]], [[крыло]], [[двигатель]], [[винт]]\n" + "\n" + "=== Родственные слова ===\n"; empty_relation = "==== Значение ====\n" + "# some definition {{пример|some example.}}\n" + "\n" + "==== Синонимы ====\n" + "#  \n" + "\n" + "=== Родственные слова ===\n"; empty_hyphen_relation = "==== Значение ====\n" + "# some definition {{пример|some example.}}\n" + "# definition 2 {{пример|}}\n" + "# def 3 {{пример|}}\n" + "\n" + "==== Синонимы ====\n" + "#{{-}}\n" + "#{{-}}\n" + "# [[synonym 2]]\n" + "\n" + "=== Родственные слова ===\n"; empty_hyphen2_relation = "==== Значение ====\n" + "# some definition {{пример|some example.}}\n" + "# definition 2 {{пример|}}\n" + "# def 3 {{пример|}}\n" + "\n" + "==== Синонимы ====\n" + "# [[synonym 2]]\n" + "#{{-}}\n" + "#{{-}}\n" + "\n" + "=== Родственные слова ===\n"; kolokolchik_text = "===Произношение===\n" + "====Значение====\n" + "====Синонимы====\n" + "# [[кандия]] (церк.)\n" + "# -\n" + "# -\n" + "\n" + "====Антонимы====\n" + "# -\n" + "# -\n" + "# -\n" + "\n" + "====Гиперонимы====\n" + "# [[звонок]], [[колокол]]\n" + "# [[инструмент]]\n" + "# [[цветок]], [[растение]]\n" + "\n" + "====Гипонимы====\n" + "# [[бубенчик]]\n" + "# -\n" + "# [[колокольчик средний]]\n" + "\n" + "==== Холонимы ====\n" + "# [[самозвон]]\n" + "# -\n" + "# -\n" + "\n" + "==== Меронимы ====\n" + "# [[язычок]]\n" + "# [[пластинка]], [[ящик]]\n" + "# -\n" + "\n" + "===Родственные слова===\n"; } @After public void tearDown() { } @Test public void testParse_3_line_synonyms() { System.out.println("parse_kolokolchik_3_line_synonyms"); WRelation[] r; LanguageType wikt_lang = LanguageType.ru; // Russian Wiktionary String page_title = "колокольчик"; POSText pt = new POSText(POS.noun, kolokolchik_text); Map<Relation, WRelation[]> result = WRelationRu.parse(wikt_lang, page_title, pt); assertTrue(result.size() > 0); assertTrue(result.containsKey(Relation.synonymy)); // ====Синонимы==== // # [[кандия]] (церк.) // # - // # - r = result.get(Relation.synonymy); assertEquals(3, r.length); LabelsWikiText[] synonym_row_0 = r[0].get(); assertEquals(1, synonym_row_0.length); assertTrue(synonym_row_0[0].getWikiText().getVisibleText().equalsIgnoreCase("кандия")); assertTrue(synonym_row_0[0].getWikiText().getWikiWords()[0].getWordLink().equalsIgnoreCase("кандия")); // antonymy assertFalse(result.containsKey(Relation.antonymy)); r = result.get(Relation.antonymy); assertNull(r); // ====Гиперонимы==== hypernymy // # [[звонок]], [[колокол]] // # [[инструмент]] // # [[цветок]], [[растение]] assertTrue(result.containsKey(Relation.hypernymy)); r = result.get(Relation.hypernymy); assertEquals(3, r.length); LabelsWikiText[] hypernymy_row_1 = r[1].get(); assertEquals(1, hypernymy_row_1.length); assertTrue(hypernymy_row_1[0].getWikiText().getVisibleText().equalsIgnoreCase("инструмент")); // ====Гипонимы==== hyponymy //# [[бубенчик]] //# - //# [[колокольчик средний]] r = result.get(Relation.hyponymy); assertEquals(3, r.length); assertEquals(null, r[1]); // ==== Холонимы ==== holonymy // # [[самозвон]] // # - // # - r = result.get(Relation.holonymy); assertEquals(3, r.length); assertEquals(1, r[0].get().length); // ==== Меронимы ==== meronymy // # [[язычок]] // # [[пластинка]], [[ящик]] // # - r = result.get(Relation.meronymy); assertEquals(3, r.length); LabelsWikiText[] meronymy_row_1 = r[1].get(); assertEquals(2, meronymy_row_1.length); assertTrue(meronymy_row_1[0].getWikiText().getVisibleText().equalsIgnoreCase("пластинка")); assertTrue(meronymy_row_1[1].getWikiText().getWikiWords()[0].getWordLink().equalsIgnoreCase("ящик")); } @Test public void testParse_one_line_synonyms() { System.out.println("parse_samolyot_one_line_synonyms"); WRelation[] r; LanguageType wikt_lang = LanguageType.ru; // Russian Wiktionary String page_title = "самолёт"; POSText pt = new POSText(POS.noun, samolyot_text); Map<Relation, WRelation[]> result = WRelationRu.parse(wikt_lang, page_title, pt); assertTrue(result.size() > 0); // ==== Синонимы ==== // # [[аэроплан]], [[воздушный лайнер]] assertTrue(result.containsKey(Relation.synonymy)); r = result.get(Relation.synonymy); assertEquals(1, r.length); LabelsWikiText[] synonym_row_0 = r[0].get(); assertEquals(2, synonym_row_0.length); assertTrue(synonym_row_0[0].getWikiText().getVisibleText().equalsIgnoreCase("аэроплан")); assertTrue(synonym_row_0[1].getWikiText().getWikiWords()[0].getWordLink().equalsIgnoreCase("воздушный лайнер")); // ==== Антонимы ==== // # - assertFalse(result.containsKey(Relation.antonymy)); // ==== Гиперонимы ==== // # [[авиация]], [[транспорт]] assertTrue(result.containsKey(Relation.hypernymy)); r = result.get(Relation.hypernymy); assertEquals(1, r.length); LabelsWikiText[] hypernymy_row_0 = r[0].get(); assertEquals(2, hypernymy_row_0.length); assertTrue(hypernymy_row_0[0].getWikiText().getVisibleText().equalsIgnoreCase("авиация")); assertTrue(hypernymy_row_0[1].getWikiText().getWikiWords()[0].getWordLink().equalsIgnoreCase("транспорт")); // ==== Гипонимы ==== // # [[штурмовик]], [[истребитель]], [[экранолёт]], [[экраноплан]], [[моноплан]], [[биплан]], [[триплан]], [[многоплан]], [[аэробус]] assertTrue(result.containsKey(Relation.hyponymy)); r = result.get(Relation.hyponymy); assertEquals(1, r.length); LabelsWikiText[] hyponymy_row_0 = r[0].get(); assertEquals(9, hyponymy_row_0.length); assertTrue(hyponymy_row_0[0].getWikiText().getVisibleText().equalsIgnoreCase("штурмовик")); assertTrue(hyponymy_row_0[8].getWikiText().getWikiWords()[0].getWordLink().equalsIgnoreCase("аэробус")); // ==== Холонимы ==== holonymy // # [[эскадрилья]] r = result.get(Relation.holonymy); assertEquals(1, r.length); assertEquals(1, r[0].get().length); LabelsWikiText[] holonymy_row_0 = r[0].get(); assertTrue(holonymy_row_0[0].getWikiText().getVisibleText().equalsIgnoreCase("эскадрилья")); assertTrue(holonymy_row_0[0].getWikiText().getWikiWords()[0].getWordLink().equalsIgnoreCase("эскадрилья")); } // test that "#  " is an empty_relation @Test public void testParse_empty_synonyms() { System.out.println("parse_empty_synonyms"); WRelation[] r; LanguageType wikt_lang = LanguageType.ru; // Russian Wiktionary String page_title = "empty_relation"; POSText pt = new POSText(POS.noun, empty_relation); Map<Relation, WRelation[]> result = WRelationRu.parse(wikt_lang, page_title, pt); // ====Синонимы==== // #   assertEquals(0, result.size()); } // test that "#{{-}}" is an empty_relation @Test public void testParse_empty_hyphen() { System.out.println("parse_empty_hyphen_in_synonyms"); WRelation[] r; POSText pt; Map<Relation, WRelation[]> result; LanguageType wikt_lang = LanguageType.ru; // Russian Wiktionary String page_title = "empty_relation"; // test 1. pt = new POSText(POS.noun, empty_hyphen_relation); result = WRelationRu.parse(wikt_lang, page_title, pt); // ====Синонимы==== // #{{-}} // #{{-}} // # [[some synonyms]] assertEquals(1, result.size()); r = result.get(Relation.synonymy); assertEquals(3, r.length); assertNull(r[0]); assertNull(r[1]); assertNotNull(r[2]); // test 2. pt = new POSText(POS.noun, empty_hyphen2_relation); result = WRelationRu.parse(wikt_lang, page_title, pt); // ====Синонимы==== // # [[some synonyms]] // #{{-}} // #{{-}} assertEquals(1, result.size()); r = result.get(Relation.synonymy); assertEquals(3, r.length); assertNotNull(r[0]); assertNull(r[1]); assertNull(r[2]); } // ///////////////////////////////////////////////////// // Context labels in synonyms (parseOneLine function) // @see http://ru.wiktionary.org/wiki/Викисловарь:Правила_оформления_статей#Оформление_семантических_отношений // @see http://ru.wiktionary.org/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C:%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D1%82%D0%B0%D1%82%D0%B5%D0%B9#.D0.9E.D1.84.D0.BE.D1.80.D0.BC.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D1.81.D0.B5.D0.BC.D0.B0.D0.BD.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D1.85_.D0.BE.D1.82.D0.BD.D0.BE.D1.88.D0.B5.D0.BD.D0.B8.D0.B9 // non-wikified label @Test public void testParseOneLine_non_wikified_synset() { System.out.println("ParseOneLine_non_wikified_synset"); String page_title, text; WRelation result; page_title = "baba"; text = "# ata"; result = WRelationRu.parseOneLine(page_title, text); LabelsWikiText[] lwt_array = result.get(); assertEquals(0, lwt_array.length); } // one wikified and one non-wikified labels @Test public void testParseOneLine_semi_wikified_synset() { System.out.println("ParseOneLine_semi_wikified_synset"); String page_title, text; WRelation result; page_title = "АУГ"; text = "# [[вооружение]]; ударная группировка"; result = WRelationRu.parseOneLine(page_title, text); LabelsWikiText[] lwt_array = result.get(); assertEquals(1, lwt_array.length); // 1) [[вооружение]] assertEquals(0, lwt_array[0].getLabels().length); assertEquals("вооружение", lwt_array[0].getWikiText().getVisibleText()); } // # [[ремень]], [[поясок]]; частичн.: [[гайтан]]; устар.: [[кушак]], [[обвязка]] @Test public void testParseOneLine_labels_as_text() { System.out.println("ParseOneLine_labels_as_text"); String page_title, text; WRelation result; Label la; page_title = "пояс"; text = "# [[ремень]], [[поясок]]; частичн.: [[гайтан]]; устар.: [[кушак]], [[обвязка]]"; result = WRelationRu.parseOneLine(page_title, text); LabelsWikiText[] lwt_array = result.get(); assertEquals(5, lwt_array.length); // 1) [[ремень]] assertEquals(0, lwt_array[0].getLabels().length); // 2) [[поясок]] assertEquals(0, lwt_array[1].getLabels().length); // 3) частичн.: [[гайтан]] assertEquals("гайтан", lwt_array[2].getWikiText().getVisibleText()); Label[] labels_gaitan = lwt_array[2].getLabels(); assertEquals(1, labels_gaitan.length); la = labels_gaitan[0]; assertEquals(LabelRu.partial.getShortName(), la.getShortName()); // частичн. // 4) устар.: [[кушак]] assertEquals("кушак", lwt_array[3].getWikiText().getVisibleText()); Label[] labels_kushak = lwt_array[3].getLabels(); assertEquals(1, labels_kushak.length);// устар. la = labels_kushak[0]; assertEquals(LabelRu.obsolete.getShortName(), la.getShortName()); // 5) устар.: [[обвязка]] assertEquals("обвязка", lwt_array[4].getWikiText().getVisibleText()); Label[] labels_obvyazka = lwt_array[4].getLabels(); assertEquals(1, labels_obvyazka.length);// устар. la = labels_obvyazka[0]; assertEquals(LabelRu.obsolete.getShortName(), la.getShortName()); } // # [[Питер]] (разг.), [[град Петров]] (поэт., высок.) @Test public void testParseOneLine_labels_in_brackets() { System.out.println("ParseOneLine_labels_in_brackets"); String page_title, text; WRelation result; Label la; page_title = "Санкт-Петербург"; text = "# [[Питер]] (разг.), [[град Петров]] (поэт., высок.)"; result = WRelationRu.parseOneLine(page_title, text); LabelsWikiText[] lwt_array = result.get(); assertEquals(2, lwt_array.length); // 1) [[Питер]] (разг.) assertEquals("Питер", lwt_array[0].getWikiText().getVisibleText()); Label[] labels_Piter = lwt_array[0].getLabels(); assertEquals(1, labels_Piter.length); la = labels_Piter[0]; assertEquals(LabelRu.colloquial.getShortName(), la.getShortName());// разг. // 2) [[град Петров]] (поэт., высок.) assertEquals("град Петров", lwt_array[1].getWikiText().getVisibleText()); Label[] labels_grad = lwt_array[1].getLabels(); assertEquals(2, labels_grad.length);// поэт., высок. assertEquals(LabelRu.poetic.getShortName(), labels_grad[0].getShortName());// поэт. assertEquals(LabelRu.high_register.getShortName(), labels_grad[1].getShortName());// высок. } // # [[маскаре]] (вариант: [[маскарэ]]), [[поророка]] @Test public void testParseOneLine_unknown_labels_in_brackets() { System.out.println("ParseOneLine_labels_in_brackets"); String page_title, text; WRelation result; Label la; page_title = "бор"; text = "# [[маскаре]] (вариант: [[маскарэ]]), [[поророка]]"; result = WRelationRu.parseOneLine(page_title, text); LabelsWikiText[] lwt_array = result.get(); assertEquals(2, lwt_array.length); // 1) [[маскаре]] (вариант: [[маскарэ]]) assertEquals("маскаре", lwt_array[0].getWikiText().getVisibleText()); Label[] labels_maskare = lwt_array[0].getLabels(); assertEquals(1, labels_maskare.length); la = labels_maskare[0]; assertEquals("вариант: [[маскарэ]]", la.getShortName());// this is unknown label // 2) [[поророка]] assertEquals("поророка", lwt_array[1].getWikiText().getVisibleText()); Label[] labels_pororoka = lwt_array[1].getLabels(); assertEquals(0, labels_pororoka.length); } // # {{груб.|-}}: [[копыто]]; {{п.|-}}, {{груб.|-}}: [[ходуля|ходули]]; {{помета|частичн.}}: [[лапа]], [[щупальце]] @Test public void testParseOneLine_labels_in_templates() { System.out.println("ParseOneLine_labels_in_templates"); String page_title, text; WRelation result; Label la; page_title = "нога"; text = "# {{груб.|-}}: [[копыто]]; {{п.|-}}, {{груб.|-}}: [[ходуля|ходули]]; {{помета|частичн.}}: [[лапа]], [[щупальце]]"; result = WRelationRu.parseOneLine(page_title, text); LabelsWikiText[] lwt_array = result.get(); assertEquals(4, lwt_array.length);// 1) груб., 2) переносное, грубое, 3) частичн. 4) частичн. // 1) {{груб.|-}}: [[копыто]] assertEquals("копыто", lwt_array[0].getWikiText().getVisibleText()); Label[] labels_kopwto = lwt_array[0].getLabels(); assertEquals(1, labels_kopwto.length); la = labels_kopwto[0]; assertEquals(LabelRu.acerbity.getShortName(), la.getShortName());// груб. // 2) {{п.|-}}, {{груб.|-}}: [[ходуля|ходули]] assertEquals("ходули", lwt_array[1].getWikiText().getVisibleText()); Label[] labels_hoduli = lwt_array[1].getLabels(); assertEquals(2, labels_hoduli.length);// п., груб. assertEquals(LabelRu.figuratively.getShortName(), labels_hoduli[0].getShortName());// п. assertEquals(LabelRu.acerbity.getShortName(), labels_hoduli[1].getShortName());// груб. // 3) "лапа" // {{помета|частичн.}}: [[лапа]], [[щупальце]] assertEquals("лапа", lwt_array[2].getWikiText().getVisibleText()); Label[] labels_lapa = lwt_array[2].getLabels(); assertEquals(1, labels_lapa.length);// частичн. assertEquals(LabelRu.partial.getShortName(), labels_lapa[0].getShortName());// частичн. // 4) "щупальце" // {{помета|частичн.}}: [[лапа]], [[щупальце]] assertEquals("щупальце", lwt_array[3].getWikiText().getVisibleText()); Label[] labels_shupaltse = lwt_array[3].getLabels(); assertEquals(1, labels_shupaltse.length);// частичн. assertEquals(LabelRu.partial.getShortName(), labels_shupaltse[0].getShortName());// частичн. } // # [[копыто]] ({{груб.|-}}); [[ходуля|ходули]] ({{п.|-}}, {{груб.|-}}) @Test public void testParseOneLine_labels_in_templates_in_brackets() { System.out.println("ParseOneLine_labels_in_templates_in_brackets"); String page_title, text; WRelation result; Label la; page_title = "нога"; text = "# [[копыто]] ({{груб.|-}}); [[ходуля|ходули]] ({{п.|-}}, {{груб.|-}})"; result = WRelationRu.parseOneLine(page_title, text); LabelsWikiText[] lwt_array = result.get(); assertEquals(2, lwt_array.length);// 1) груб., 2) переносное, грубое // 1) {{груб.|-}}: [[копыто]] assertEquals("копыто", lwt_array[0].getWikiText().getVisibleText()); Label[] labels_kopwto = lwt_array[0].getLabels(); assertEquals(1, labels_kopwto.length); la = labels_kopwto[0]; assertEquals(LabelRu.acerbity.getShortName(), la.getShortName());// груб. // 2) {{п.|-}}, {{груб.|-}}: [[ходуля|ходули]] assertEquals("ходули", lwt_array[1].getWikiText().getVisibleText()); Label[] labels_hoduli = lwt_array[1].getLabels(); assertEquals(2, labels_hoduli.length);// п., груб. assertEquals(LabelRu.figuratively.getShortName(), labels_hoduli[0].getShortName());// п. assertEquals(LabelRu.acerbity.getShortName(), labels_hoduli[1].getShortName());// груб. } // eo context labels in synonyms // ///////////////////////////////////////////////////// }