diff --git a/languagetool-language-modules/uk/src/main/java/org/languagetool/tagging/uk/CompoundTagger.java b/languagetool-language-modules/uk/src/main/java/org/languagetool/tagging/uk/CompoundTagger.java index 8d1be7171a66..7a1d1c6a00ed 100644 --- a/languagetool-language-modules/uk/src/main/java/org/languagetool/tagging/uk/CompoundTagger.java +++ b/languagetool-language-modules/uk/src/main/java/org/languagetool/tagging/uk/CompoundTagger.java @@ -49,7 +49,7 @@ class CompoundTagger { private static final Pattern EXTRA_TAGS = Pattern.compile(":bad"); private static final Pattern EXTRA_TAGS_DROP = Pattern.compile(":(comp.|np|ns|slang|rare|xp[1-9]|&predic|&insert)"); private static final Pattern NOUN_SING_V_ROD_REGEX = Pattern.compile("noun.*?:[mfn]:v_rod.*"); - private static final Pattern NOUN_V_NAZ_REGEX = Pattern.compile("noun.*?:.:v_naz.*"); +// private static final Pattern NOUN_V_NAZ_REGEX = Pattern.compile("noun.*?:.:v_naz.*"); private static final Pattern SING_REGEX_F = Pattern.compile(":[mfn]:"); private static final Pattern O_ADJ_PATTERN = Pattern.compile(".*(о|[чшщ]е)"); private static final Pattern DASH_PREFIX_LAT_PATTERN = Pattern.compile("[a-zA-Z]{3,}"); @@ -325,6 +325,12 @@ else if( "ти".equals(rightWord) if( leftWord.equalsIgnoreCase("по") && rightWord.endsWith("ськи") ) { rightWord += "й"; } + + // Пенсильванія-авеню + + if( Character.isUpperCase(leftWord.charAt(0)) && LemmaHelper.CITY_AVENU.contains(rightWord) ) { + return cityAvenueMatch(word); + } List rightWdList = wordTagger.tag(rightWord); if( rightWdList.isEmpty() ) @@ -389,15 +395,6 @@ else if( rightWord.endsWith("ський") ) { return getNvPrefixNounMatch(word, rightAnalyzedTokens, leftWord); } - // Пенсильванія-авеню - - if( Character.isUpperCase(leftWord.charAt(0)) && LemmaHelper.CITY_AVENU.contains(rightWord) ) { - if( leftWdList.isEmpty() ) - return null; - - return cityAvenueMatch(word, leftAnalyzedTokens); - } - // don't allow: Донець-кий, зовнішньо-економічний, мас-штаби @@ -444,14 +441,15 @@ else if( rightWord.endsWith("ський") ) { @Nullable - private List cityAvenueMatch(String word, List leftAnalyzedTokens) { - List newAnalyzedTokens = new ArrayList<>(leftAnalyzedTokens.size()); + private List cityAvenueMatch(String word) { + List newAnalyzedTokens = new ArrayList<>(); - for (AnalyzedToken analyzedToken : leftAnalyzedTokens) { - String posTag = analyzedToken.getPOSTag(); - if( NOUN_V_NAZ_REGEX.matcher(posTag).matches() ) { - newAnalyzedTokens.add(new AnalyzedToken(word, posTag.replaceFirst("v_naz", "nv"), word)); - } + for(String vidm: PosTagHelper.VIDMINKY_MAP.keySet()) { + if( vidm.equals("v_kly") ) + continue; + + String posTag = "noun:inanim:f:" + vidm + ":nv"; + newAnalyzedTokens.add(new AnalyzedToken(word, posTag, word)); } return newAnalyzedTokens.isEmpty() ? null : newAnalyzedTokens; diff --git a/languagetool-language-modules/uk/src/test/java/org/languagetool/tagging/uk/UkrainianTaggerTest.java b/languagetool-language-modules/uk/src/test/java/org/languagetool/tagging/uk/UkrainianTaggerTest.java index 1c07bc9e1b85..5ded9a117c07 100644 --- a/languagetool-language-modules/uk/src/test/java/org/languagetool/tagging/uk/UkrainianTaggerTest.java +++ b/languagetool-language-modules/uk/src/test/java/org/languagetool/tagging/uk/UkrainianTaggerTest.java @@ -197,8 +197,9 @@ public void testDynamicTaggingFullTagMatch() throws IOException { TestTools.myAssert("пів-України", "пів-України/[пів-України]noun:inanim:f:v_dav:prop|пів-України/[пів-України]noun:inanim:f:v_mis:prop|пів-України/[пів-України]noun:inanim:f:v_naz:prop" +"|пів-України/[пів-України]noun:inanim:f:v_oru:prop|пів-України/[пів-України]noun:inanim:f:v_rod:prop|пів-України/[пів-України]noun:inanim:f:v_zna:prop", tokenizer, tagger); - TestTools.myAssert("Пенсильванія-авеню", "Пенсильванія-авеню/[Пенсильванія-авеню]noun:inanim:f:nv:prop", tokenizer, tagger); - + TestTools.myAssert("Пенсильванія-авеню", "Пенсильванія-авеню/[Пенсильванія-авеню]noun:inanim:f:v_dav:nv|Пенсильванія-авеню/[Пенсильванія-авеню]noun:inanim:f:v_mis:nv|Пенсильванія-авеню/[Пенсильванія-авеню]noun:inanim:f:v_naz:nv|Пенсильванія-авеню/[Пенсильванія-авеню]noun:inanim:f:v_oru:nv|Пенсильванія-авеню/[Пенсильванія-авеню]noun:inanim:f:v_rod:nv|Пенсильванія-авеню/[Пенсильванія-авеню]noun:inanim:f:v_zna:nv", tokenizer, tagger); + TestTools.myAssert("Уолл-стрит", "Уолл-стрит/[Уолл-стрит]noun:inanim:f:v_dav:nv|Уолл-стрит/[Уолл-стрит]noun:inanim:f:v_mis:nv|Уолл-стрит/[Уолл-стрит]noun:inanim:f:v_naz:nv|Уолл-стрит/[Уолл-стрит]noun:inanim:f:v_oru:nv|Уолл-стрит/[Уолл-стрит]noun:inanim:f:v_rod:nv|Уолл-стрит/[Уолл-стрит]noun:inanim:f:v_zna:nv", tokenizer, tagger); + // full tag match