package com.formulasearchengine.mathosphere.mlp.rus; import com.formulasearchengine.mathosphere.mlp.rus.RuleBasedPosTagger.PosTag; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVRecord; import org.junit.Before; import org.junit.Test; import java.io.FileReader; import java.util.HashMap; import static org.junit.Assert.assertEquals; public class RuleBasedPosTaggerTest { RuleBasedPosTagger tagger = new RuleBasedPosTagger(); String text = "Вы сейчас строите предсказатель на основе набора окончаний а правила подбираете вручную " + "на основании своих предположений и наблюдений Со словарем этот же набор правил окончание " + "часть речи можно построить автоматически более полно и правильно что и делается в phpmorphy " + "и большинстве других морф анализаторов для русского языка Благо словари для русского языка " + "доступные и хорошие Кроме того раз уж есть словарь то необязательно полагаться только на " + "предсказатель если слово есть в словаре то можно и точный разбор вернуть ну с учетом " + "неустранимой на уровне отдельных слов неоднозначности разбора"; HashMap<String, String> expecteTags; @Before public void setUp() throws Exception { FileReader in = new FileReader(getClass().getResource("exp-tags.csv").getFile()); Iterable<CSVRecord> records = CSVFormat.RFC4180.parse(in); expecteTags = new HashMap<>(); for (CSVRecord record : records) { String word = record.get(0); String type = record.get(1); expecteTags.put(word, type); } } @Test public void testPosTag() { String[] split = text.split("\\s+"); for (String token : split) { String tag = tagger.posTag(token).getPennTag(); assertEquals(expecteTags.get(token), tag); } } @Test public void someTestCases() { assertEquals(PosTag.CONJUCTION, tagger.posTag("и")); assertEquals(PosTag.CONJUCTION, tagger.posTag("поскольку")); assertEquals(PosTag.PREPOSITION, tagger.posTag("причем")); assertEquals(PosTag.PREPOSITION, tagger.posTag("между")); assertEquals(PosTag.VERB, tagger.posTag("называется")); assertEquals(PosTag.VERB, tagger.posTag("делится")); assertEquals(PosTag.ADVERB, tagger.posTag("только")); assertEquals(PosTag.PREPOSITION, tagger.posTag("пусть")); assertEquals(PosTag.NOUN, tagger.posTag("время")); } }