lucene-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mikemcc...@apache.org
Subject lucene-solr:master: LUCENE-7287: add UkrainianMorfologikAnalyzer, a dictionary-based analyzer for the Ukrainian language
Date Tue, 21 Jun 2016 09:23:55 GMT
Repository: lucene-solr
Updated Branches:
  refs/heads/master b338a0c0f -> 6ef174f52


LUCENE-7287: add UkrainianMorfologikAnalyzer, a dictionary-based analyzer for the Ukrainian
language


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/6ef174f5
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/6ef174f5
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/6ef174f5

Branch: refs/heads/master
Commit: 6ef174f52737b37e8b0625208ccc7cc64c3bd5b0
Parents: b338a0c
Author: Mike McCandless <mikemccand@apache.org>
Authored: Tue Jun 21 05:03:15 2016 -0400
Committer: Mike McCandless <mikemccand@apache.org>
Committed: Tue Jun 21 05:03:15 2016 -0400

----------------------------------------------------------------------
 lucene/CHANGES.txt                              |    4 +
 .../uk/UkrainianMorfologikAnalyzer.java         |  154 +++
 .../apache/lucene/analysis/uk/package-info.java |   21 +
 .../org/apache/lucene/analysis/uk/stopwords.txt | 1269 ++++++++++++++++++
 .../apache/lucene/analysis/uk/ukrainian.dict    |  Bin 0 -> 1707759 bytes
 .../apache/lucene/analysis/uk/ukrainian.info    |   10 +
 .../analysis/uk/TestUkrainianAnalyzer.java      |   65 +
 7 files changed, 1523 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ef174f5/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 0c5df66..a401964 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -27,6 +27,10 @@ New Features
   recording key/values from a provided iterable based on when the
   commit actually takes place (Mike McCandless)
 
+* LUCENE-7287: UkrainianMorfologikAnalyzer is a new dictionary-based
+  analyzer for the Ukrainian language (Andriy Rysin via Mike
+  McCandless)
+
 Bug Fixes
 
 * LUCENE-6662: Fixed potential resource leaks. (Rishabh Patel via Adrien Grand)

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ef174f5/lucene/analysis/morfologik/src/java/org/apache/lucene/analysis/uk/UkrainianMorfologikAnalyzer.java
----------------------------------------------------------------------
diff --git a/lucene/analysis/morfologik/src/java/org/apache/lucene/analysis/uk/UkrainianMorfologikAnalyzer.java
b/lucene/analysis/morfologik/src/java/org/apache/lucene/analysis/uk/UkrainianMorfologikAnalyzer.java
new file mode 100644
index 0000000..aa501d2
--- /dev/null
+++ b/lucene/analysis/morfologik/src/java/org/apache/lucene/analysis/uk/UkrainianMorfologikAnalyzer.java
@@ -0,0 +1,154 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.lucene.analysis.uk;
+
+
+import java.io.IOException;
+import java.io.Reader;
+import java.nio.charset.StandardCharsets;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.CharArraySet;
+import org.apache.lucene.analysis.LowerCaseFilter;
+import org.apache.lucene.analysis.StopFilter;
+import org.apache.lucene.analysis.StopwordAnalyzerBase;
+import org.apache.lucene.analysis.TokenStream;
+import org.apache.lucene.analysis.Tokenizer;
+import org.apache.lucene.analysis.WordlistLoader;
+import org.apache.lucene.analysis.charfilter.MappingCharFilter;
+import org.apache.lucene.analysis.charfilter.NormalizeCharMap;
+import org.apache.lucene.analysis.miscellaneous.SetKeywordMarkerFilter;
+import org.apache.lucene.analysis.morfologik.MorfologikFilter;
+import org.apache.lucene.analysis.snowball.SnowballFilter;
+import org.apache.lucene.analysis.standard.StandardFilter;
+import org.apache.lucene.analysis.standard.StandardTokenizer;
+import org.apache.lucene.util.IOUtils;
+
+import morfologik.stemming.Dictionary;
+
+/**
+ * A dictionary-based {@link Analyzer} for Ukrainian.
+ */
+public final class UkrainianMorfologikAnalyzer extends StopwordAnalyzerBase {
+  private final CharArraySet stemExclusionSet;
+  
+  /** File containing default Ukrainian stopwords. */
+  public final static String DEFAULT_STOPWORD_FILE = "/org/apache/lucene/analysis/uk/stopwords.txt";
+  
+  /**
+   * Returns an unmodifiable instance of the default stop words set.
+   * @return default stop words set.
+   */
+  public static CharArraySet getDefaultStopSet(){
+    return DefaultSetHolder.DEFAULT_STOP_SET;
+  }
+  
+  /**
+   * Atomically loads the DEFAULT_STOP_SET in a lazy fashion once the outer class 
+   * accesses the static final set the first time.;
+   */
+  private static class DefaultSetHolder {
+    static final CharArraySet DEFAULT_STOP_SET;
+
+    static {
+      try {
+        DEFAULT_STOP_SET = WordlistLoader.getSnowballWordSet(IOUtils.getDecodingReader(SnowballFilter.class,

+            DEFAULT_STOPWORD_FILE, StandardCharsets.UTF_8));
+      } catch (IOException ex) {
+        // default set should always be present as it is part of the
+        // distribution (JAR)
+        throw new RuntimeException("Unable to load default stopword set");
+      }
+    }
+  }
+
+  /**
+   * Builds an analyzer with the default stop words: {@link #DEFAULT_STOPWORD_FILE}.
+   */
+  public UkrainianMorfologikAnalyzer() {
+    this(DefaultSetHolder.DEFAULT_STOP_SET);
+  }
+  
+  /**
+   * Builds an analyzer with the given stop words.
+   * 
+   * @param stopwords a stopword set
+   */
+  public UkrainianMorfologikAnalyzer(CharArraySet stopwords) {
+    this(stopwords, CharArraySet.EMPTY_SET);
+  }
+
+  /**
+   * Builds an analyzer with the given stop words. If a non-empty stem exclusion set is
+   * provided this analyzer will add a {@link SetKeywordMarkerFilter} before
+   * stemming.
+   * 
+   * @param stopwords a stopword set
+   * @param stemExclusionSet a set of terms not to be stemmed
+   */
+  public UkrainianMorfologikAnalyzer(CharArraySet stopwords, CharArraySet stemExclusionSet)
{
+    super(stopwords);
+    this.stemExclusionSet = CharArraySet.unmodifiableSet(CharArraySet.copy(stemExclusionSet));
+  }
+
+  @Override
+  protected Reader initReader(String fieldName, Reader reader) {
+    NormalizeCharMap.Builder builder = new NormalizeCharMap.Builder();
+    builder.add("\u2019", "'");
+    builder.add("\u02BC", "'");
+    builder.add("\u0301", "");
+    NormalizeCharMap normMap = builder.build();
+
+    reader = new MappingCharFilter(normMap, reader);
+    return reader;
+  }
+
+  /**
+   * Creates a
+   * {@link org.apache.lucene.analysis.Analyzer.TokenStreamComponents}
+   * which tokenizes all the text in the provided {@link Reader}.
+   * 
+   * @return A
+   *         {@link org.apache.lucene.analysis.Analyzer.TokenStreamComponents}
+   *         built from an {@link StandardTokenizer} filtered with
+   *         {@link StandardFilter}, {@link LowerCaseFilter}, {@link StopFilter}
+   *         , {@link SetKeywordMarkerFilter} if a stem exclusion set is
+   *         provided and {@link MorfologikFilter} on the Ukrainian dictionary.
+   */
+  @Override
+  protected TokenStreamComponents createComponents(String fieldName) {
+    Tokenizer source = new StandardTokenizer();
+    TokenStream result = new StandardFilter(source);
+    result = new LowerCaseFilter(result);
+    result = new StopFilter(result, stopwords);
+
+    if (stemExclusionSet.isEmpty() == false) {
+      result = new SetKeywordMarkerFilter(result, stemExclusionSet);
+    }
+
+    result = new MorfologikFilter(result, getDictionary());
+    return new TokenStreamComponents(source, result);
+  }
+
+  private static Dictionary getDictionary() {
+    try {
+      return Dictionary.read(UkrainianMorfologikAnalyzer.class.getResource("/org/apache/lucene/analysis/uk/ukrainian.dict"));
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ef174f5/lucene/analysis/morfologik/src/java/org/apache/lucene/analysis/uk/package-info.java
----------------------------------------------------------------------
diff --git a/lucene/analysis/morfologik/src/java/org/apache/lucene/analysis/uk/package-info.java
b/lucene/analysis/morfologik/src/java/org/apache/lucene/analysis/uk/package-info.java
new file mode 100644
index 0000000..d6bd8c7
--- /dev/null
+++ b/lucene/analysis/morfologik/src/java/org/apache/lucene/analysis/uk/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Analyzer for Ukrainian.
+ */
+package org.apache.lucene.analysis.uk;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ef174f5/lucene/analysis/morfologik/src/resources/org/apache/lucene/analysis/uk/stopwords.txt
----------------------------------------------------------------------
diff --git a/lucene/analysis/morfologik/src/resources/org/apache/lucene/analysis/uk/stopwords.txt
b/lucene/analysis/morfologik/src/resources/org/apache/lucene/analysis/uk/stopwords.txt
new file mode 100644
index 0000000..651776b
--- /dev/null
+++ b/lucene/analysis/morfologik/src/resources/org/apache/lucene/analysis/uk/stopwords.txt
@@ -0,0 +1,1269 @@
+а
+аби
+абиде
+абиколи
+абикуди
+абихто
+абикого
+абикому
+абиким
+абичий
+абичийого
+абичиєму
+абичийому
+абичиїм
+абичия
+абичиєї
+абичиїй
+абичию
+абичиєю
+абичиє
+абичиї
+абичиїх
+абичиїми
+абищо
+абичого
+абичому
+абичим
+абиякий
+абиякого
+абиякому
+абияким
+абиякім
+абияка
+абиякої
+абиякій
+абияку
+абиякою
+абияке
+абиякі
+абияких
+абиякими
+або
+абощо
+авжеж
+авось
+ага
+адже
+аж
+ажень
+але
+амінь
+ані
+аніде
+аніж
+анізащо
+анікогісінько
+аніколи
+аніскільки
+аніхто
+анікого
+анікому
+аніким
+анічогісінько
+аніщо
+анічого
+анічому
+анічим
+аніякий
+аніякого
+аніякому
+аніяким
+аніякім
+аніяка
+аніякої
+аніякій
+аніяку
+аніякою
+аніяке
+аніякі
+аніяких
+аніякими
+аніякісенький
+аніякісенького
+аніякісенькому
+аніякісеньким
+аніякісенькім
+аніякісенька
+аніякісенької
+аніякісенькій
+аніякісеньку
+аніякісенькою
+аніякісеньке
+аніякісенькі
+аніякісеньких
+аніякісенькими
+аніякісінький
+аніякісінького
+аніякісінькому
+аніякісіньким
+аніякісінькім
+аніякісінька
+аніякісінької
+аніякісінькій
+аніякісіньку
+аніякісінькою
+аніякісіньке
+аніякісінькі
+аніякісіньких
+аніякісінькими
+ану
+ато
+атож
+ач
+ачей
+аякже
+б
+ба
+багато
+багатьох
+багатьом
+багатьма
+без
+би
+біля
+бо
+бодай
+бути
+будь
+будьмо
+будьте
+є
+єси
+суть
+буду
+будеш
+буде
+будем
+будемо
+будете
+будуть
+був
+була
+було
+були
+буцім
+буцімто
+в
+ваш
+вашого
+вашому
+вашим
+вашім
+ваша
+вашої
+вашій
+вашу
+вашою
+ваше
+ваші
+ваших
+вашими
+ввесь
+всього
+всьому
+всім
+вся
+всієї
+всій
+всю
+всією
+все
+всі
+всіх
+всіма
+вві
+весь
+вздовж
+ви
+вас
+вам
+вами
+ві
+від
+відколи
+відповідно
+відтепер
+відтоді
+він
+його
+нього
+йому
+ним
+нім
+ньому
+власне
+властиво
+внаслідок
+вона
+її
+неї
+їй
+нею
+ній
+вони
+їх
+них
+їм
+ними
+воно
+вподовж
+впоперек
+впродовж
+всілякий
+всілякого
+всілякому
+всіляким
+всілякім
+всіляка
+всілякої
+всілякій
+всіляку
+всілякою
+всіляке
+всілякі
+всіляких
+всілякими
+вслід
+всупереч
+всюди
+всякий
+всякого
+всякому
+всяким
+всякім
+всяка
+всякої
+всякій
+всяку
+всякою
+всяке
+всякі
+всяких
+всякими
+всяк
+втім
+гаразд
+ге
+геть
+де
+дедалі
+деінде
+декілька
+декількох
+декільком
+декількома
+деколи
+декотрий
+декотрого
+декотрому
+декотрим
+декотрім
+декотра
+декотрої
+декотрій
+декотру
+декотрою
+декотре
+декотрі
+декотрих
+декотрими
+десь
+дехто
+декого
+декому
+деким
+декім
+дечий
+дечийого
+дечиєму
+дечийому
+дечиїм
+дечия
+дечиєї
+дечиїй
+дечию
+дечиєю
+дечиє
+дечиї
+дечиїх
+дечиїми
+дещо
+дечого
+дечому
+дечим
+дечім
+деякий
+деякого
+деякому
+деяким
+деякім
+деяка
+деякої
+деякій
+деяку
+деякою
+деяке
+деякі
+деяких
+деякими
+для
+до
+довкола
+доки
+допіру
+допоки
+досі
+дотепер
+доти
+еге
+ж
+же
+жодний
+жодного
+жодному
+жодним
+жоднім
+жодна
+жодної
+жодній
+жодну
+жодною
+жодне
+жодні
+жодних
+жодними
+жоден
+жоднісінький
+жоднісінького
+жоднісінькому
+жоднісіньким
+жоднісінькім
+жоднісінька
+жоднісінької
+жоднісінькій
+жоднісіньку
+жоднісінькою
+жоднісіньке
+жоднісінькі
+жоднісіньких
+жоднісінькими
+з
+за
+завгодно
+завдяки
+завжди
+завше
+задля
+залежно
+замість
+заради
+зараз
+зате
+зверху
+звідки
+звідкилясь
+звідкись
+звідкіль
+звідкіля
+звідкілясь
+звідси
+звідсіль
+звідсіля
+звідти
+звідтіль
+звідтіля
+звідусіль
+звідусюди
+звідціля
+здовж
+ззаду
+зі
+зо
+зсередини
+ич
+і
+ібн
+із
+ізсередини
+інакше
+інакший
+інакшого
+інакшому
+інакшим
+інакшім
+інакша
+інакшої
+інакшій
+інакшу
+інакшою
+інакші
+інакших
+інакшими
+інколи
+іноді
+інше
+іншого
+іншому
+іншим
+інший
+іншім
+інша
+іншої
+іншій
+іншу
+іншою
+інші
+інших
+іншими
+іще
+їхній
+їхнього
+їхньому
+їхнім
+їхня
+їхньої
+їхню
+їхньою
+їхнє
+їхні
+їхніх
+їхніми
+й
+кілька
+кількох
+кільком
+кількома
+кінець
+кожний
+кожного
+кожному
+кожним
+кожнім
+кожна
+кожної
+кожній
+кожну
+кожною
+кожне
+кожні
+кожних
+кожними
+кожен
+кожнісінький
+кожнісінького
+кожнісінькому
+кожнісіньким
+кожнісінькім
+кожнісінька
+кожнісінької
+кожнісінькій
+кожнісіньку
+кожнісінькою
+кожнісіньке
+кожнісінькі
+кожнісіньких
+кожнісінькими
+коли
+колись
+коло
+котрий
+котрого
+котрому
+котрим
+котрім
+котра
+котрої
+котрій
+котру
+котрою
+котре
+котрі
+котрих
+котрими
+котрийсь
+котрогось
+котромусь
+котримось
+котримсь
+котрімсь
+котрась
+котроїсь
+котрійсь
+котрусь
+котроюсь
+котресь
+котрісь
+котрихось
+котрихсь
+котримись
+край
+крізь
+крім
+круг
+кругом
+куди
+кудись
+кудою
+ледве
+ледь
+лиш
+лише
+лишень
+мерсі
+ми
+нас
+нам
+нами
+між
+мій
+мого
+моєму
+моїм
+моя
+моєї
+моїй
+мою
+моєю
+моє
+мої
+моїх
+моїми
+мов
+мовби
+мовбито
+могти
+можіть
+можу
+можеш
+може
+можем
+можемо
+можете
+можуть
+міг
+могла
+могло
+могли
+можна
+на
+навіть
+навіщо
+навіщось
+навколо
+навкруг
+навпаки
+навперейми
+навпроти
+над
+наді
+надо
+наперед
+напередодні
+наперекір
+напереріз
+наприкінці
+напроти
+насеред
+насупроти
+нате
+наче
+начеб
+начебто
+наш
+нашого
+нашому
+нашим
+нашім
+наша
+нашої
+нашій
+нашу
+нашою
+наше
+наші
+наших
+нашими
+не
+неабищо
+неабичого
+неабичому
+неабичим
+небагато
+небагатьох
+небагатьом
+небагатьма
+невважаючи
+невже
+незважаючи
+немов
+немовби
+немовбито
+неначе
+неначебто
+нехай
+нижче
+ні
+ніби
+нібито
+ніде
+ніж
+нізащо
+нізвідки
+нізвідкіля
+ніким
+нікогісінько
+нікого
+ніколи
+нікому
+нікотрий
+нікотрого
+нікотрому
+нікотрим
+нікотрім
+нікотра
+нікотрої
+нікотрій
+нікотру
+нікотрою
+нікотре
+нікотрі
+нікотрих
+нікотрими
+нікуди
+нінащо
+ніскільки
+ніхто
+нічий
+нічийого
+нічиєму
+нічийому
+нічиїм
+нічия
+нічиєї
+нічиїй
+нічию
+нічиєю
+нічиє
+нічиї
+нічиїх
+нічиїми
+нічийний
+нічийного
+нічийному
+нічийним
+нічийнім
+нічийна
+нічийної
+нічийній
+нічийну
+нічийною
+нічийне
+нічийні
+нічийних
+нічийними
+нічим
+нічого
+нічому
+ніщо
+ніяк
+ніякий
+ніякого
+ніякому
+ніяким
+ніякім
+ніяка
+ніякої
+ніякій
+ніяку
+ніякою
+ніяке
+ніякі
+ніяких
+ніякими
+ніякісінький
+ніякісінького
+ніякісінькому
+ніякісіньким
+ніякісінькім
+ніякісінька
+ніякісінької
+ніякісінькій
+ніякісіньку
+ніякісінькою
+ніякісіньке
+ніякісінькі
+ніякісіньких
+ніякісінькими
+но
+ну
+нумо
+нумте
+о
+об
+обабіч
+обік
+обіч
+од
+один
+одного
+одному
+одним
+однім
+одна
+однієї
+одної
+одній
+одну
+однією
+одною
+одне
+одно
+одні
+одних
+одними
+однак
+одначе
+окрай
+окрім
+округ
+округи
+он
+онде
+онно
+оно
+опісля
+опріч
+осе
+осісьо
+оскільки
+ось
+от
+отак
+отакий
+отакого
+отакому
+отаким
+отакім
+отака
+отакої
+отакій
+отаку
+отакою
+отаке
+отакі
+отаких
+отакими
+отакісінький
+отакісінького
+отакісінькому
+отакісіньким
+отакісінькім
+отакісінька
+отакісінької
+отакісінькій
+отакісіньку
+отакісінькою
+отакісіньке
+отакісінькі
+отакісіньких
+отакісінькими
+отам
+отже
+ото
+отож
+отой
+отого
+отому
+отим
+отім
+ота
+отієї
+отої
+отій
+оту
+отією
+отою
+оте
+оті
+отих
+отими
+отсе
+оттак
+отто
+отут
+оце
+оцей
+оцього
+оцьому
+оцим
+оцім
+оця
+оцієї
+оцій
+оцю
+оцією
+оці
+оцих
+оцими
+пак
+перед
+перетакий
+перетакого
+перетакому
+перетаким
+перетакім
+перетака
+перетакої
+перетакій
+перетаку
+перетакою
+перетаке
+перетакі
+перетаких
+перетакими
+під
+підо
+після
+по
+побік
+побіч
+поблизу
+поверх
+повз
+повздовж
+повсюди
+повсюдно
+подекуди
+подеякий
+подеякого
+подеякому
+подеяким
+подеякім
+подеяка
+подеякої
+подеякій
+подеяку
+подеякою
+подеяке
+подеякі
+подеяких
+подеякими
+подовж
+поза
+позад
+позаду
+позатой
+позатого
+позатому
+позатим
+позатім
+позата
+позатієї
+позатої
+позатій
+позату
+позатією
+позатою
+позате
+позаті
+позатих
+позатими
+позаяк
+поздовж
+поки
+покіль
+покрай
+поміж
+понад
+понадо
+понижче
+поперед
+попереду
+поперек
+попід
+попліч
+попри
+попросту
+поруч
+поряд
+посеред
+посередині
+потім
+поуз
+прецінь
+при
+притому
+причім
+причому
+про
+проміж
+просто
+проте
+проти
+протягом
+раз
+раніше
+сам
+самого
+самому
+самим
+самім
+сама
+самої
+самій
+саму
+самою
+саме
+само
+сами
+самі
+самих
+самими
+самий
+свій
+свого
+своєму
+своїм
+своя
+своєї
+своїй
+свою
+своєю
+своє
+свої
+своїх
+своїми
+се
+себе
+собі
+собою
+себто
+серед
+сиріч
+скільки
+скількох
+скільком
+скількома
+скількись
+скількохось
+скількохсь
+скількомось
+скількомсь
+скількомась
+скрізь
+спереду
+справді
+стільки
+стількох
+стільком
+стількома
+супроти
+супротив
+сюди
+сякий
+сякого
+сякому
+сяким
+сякім
+сяка
+сякої
+сякій
+сяку
+сякою
+сяке
+сякі
+сяких
+сякими
+та
+так
+такенний
+такенного
+такенному
+такенним
+такеннім
+такенна
+такенної
+такенній
+такенну
+такенною
+такенне
+такенні
+такенних
+такенними
+таки
+такий
+такого
+такому
+таким
+такім
+така
+такої
+такій
+таку
+такою
+таке
+такі
+таких
+такими
+такісінький
+такісінького
+такісінькому
+такісіньким
+такісінькім
+такісінька
+такісінької
+такісінькій
+такісіньку
+такісінькою
+такісіньке
+такісінькі
+такісіньких
+такісінькими
+також
+там
+тамки
+тамтой
+тамтого
+тамтому
+тамтим
+тамтім
+тамта
+тамтієї
+тамтої
+тамтій
+тамту
+тамтією
+тамтою
+тамте
+тамті
+тамтих
+тамтими
+твій
+твого
+твоєму
+твоїм
+твоя
+твоєї
+твоїй
+твою
+твоєю
+твоє
+твої
+твоїх
+твоїми
+те
+того
+тому
+тим
+тім
+теє
+теж
+тепер
+теперечки
+ти
+тебе
+тобі
+тобою
+тільки
+то
+тобто
+тоді
+тож
+той
+тієї
+тої
+тій
+ту
+тією
+тою
+ті
+тих
+тими
+тощо
+туди
+тудою
+тут
+тутеньки
+тутечки
+тутки
+у
+ув
+увесь
+усього
+усьому
+усім
+уся
+усієї
+усій
+усю
+усією
+усе
+усі
+усіх
+усіма
+уві
+угу
+уздовж
+унаслідок
+уподовж
+упоперек
+упродовж
+усілякий
+усілякого
+усілякому
+усіляким
+усілякім
+усіляка
+усілякої
+усілякій
+усіляку
+усілякою
+усіляке
+усілякі
+усіляких
+усілякими
+услід
+усупереч
+усюди
+усякий
+усякого
+усякому
+усяким
+усякім
+усяка
+усякої
+усякій
+усяку
+усякою
+усяке
+усякі
+усяких
+усякими
+усяк
+утім
+хай
+хіба
+хоч
+хоча
+хто
+кого
+кому
+ким
+кім
+хтось
+когось
+комусь
+кимось
+кимсь
+кімось
+кімсь
+це
+цього
+цьому
+цим
+цім
+цебто
+цей
+ця
+цієї
+цій
+цю
+цією
+ці
+цих
+цими
+чень
+через
+чи
+чий
+чийого
+чиєму
+чийому
+чиїм
+чия
+чиєї
+чиїй
+чию
+чиєю
+чиє
+чиї
+чиїх
+чиїми
+чийсь
+чийогось
+чиємусь
+чийомусь
+чиїмось
+чиїмсь
+чиясь
+чиєїсь
+чиїйсь
+чиюсь
+чиєюсь
+чиєсь
+чиїсь
+чиїхось
+чиїхсь
+чиїмись
+чому
+чомусь
+чортзна
+шляхом
+ще
+що
+чого
+віщо
+чим
+чім
+щоб
+щоби
+щодо
+щойно
+щоправда
+щось
+чогось
+віщось
+чимось
+чимсь
+чімось
+чімсь
+я
+мене
+мені
+мною
+як
+якби
+який
+якого
+якому
+яким
+якім
+яка
+якої
+якій
+яку
+якою
+яке
+які
+яких
+якими
+якийсь
+якогось
+якомусь
+якимось
+якимсь
+якімсь
+якась
+якоїсь
+якійсь
+якусь
+якоюсь
+якесь
+якісь
+якихось
+якихсь
+якимись
+якось
+якраз
+якщо
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ef174f5/lucene/analysis/morfologik/src/resources/org/apache/lucene/analysis/uk/ukrainian.dict
----------------------------------------------------------------------
diff --git a/lucene/analysis/morfologik/src/resources/org/apache/lucene/analysis/uk/ukrainian.dict
b/lucene/analysis/morfologik/src/resources/org/apache/lucene/analysis/uk/ukrainian.dict
new file mode 100644
index 0000000..679e392
Binary files /dev/null and b/lucene/analysis/morfologik/src/resources/org/apache/lucene/analysis/uk/ukrainian.dict
differ

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ef174f5/lucene/analysis/morfologik/src/resources/org/apache/lucene/analysis/uk/ukrainian.info
----------------------------------------------------------------------
diff --git a/lucene/analysis/morfologik/src/resources/org/apache/lucene/analysis/uk/ukrainian.info
b/lucene/analysis/morfologik/src/resources/org/apache/lucene/analysis/uk/ukrainian.info
new file mode 100644
index 0000000..2c69f4b
--- /dev/null
+++ b/lucene/analysis/morfologik/src/resources/org/apache/lucene/analysis/uk/ukrainian.info
@@ -0,0 +1,10 @@
+#
+# Dictionary properties.
+#
+
+fsa.dict.separator=+
+fsa.dict.encoding=cp1251
+
+fsa.dict.encoder=SUFFIX
+
+fsa.dict.speller.ignore-diacritics=false

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ef174f5/lucene/analysis/morfologik/src/test/org/apache/lucene/analysis/uk/TestUkrainianAnalyzer.java
----------------------------------------------------------------------
diff --git a/lucene/analysis/morfologik/src/test/org/apache/lucene/analysis/uk/TestUkrainianAnalyzer.java
b/lucene/analysis/morfologik/src/test/org/apache/lucene/analysis/uk/TestUkrainianAnalyzer.java
new file mode 100644
index 0000000..87d3be5
--- /dev/null
+++ b/lucene/analysis/morfologik/src/test/org/apache/lucene/analysis/uk/TestUkrainianAnalyzer.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.lucene.analysis.uk;
+
+
+import java.io.IOException;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.BaseTokenStreamTestCase;
+
+/**
+ * Test case for UkrainianAnalyzer.
+ */
+
+public class TestUkrainianAnalyzer extends BaseTokenStreamTestCase {
+
+  /** Check that UkrainianAnalyzer doesn't discard any numbers */
+  public void testDigitsInUkrainianCharset() throws IOException {
+    UkrainianMorfologikAnalyzer ra = new UkrainianMorfologikAnalyzer();
+    assertAnalyzesTo(ra, "text 1000", new String[] { "text", "1000" });
+    ra.close();
+  }
+
+  public void testReusableTokenStream() throws Exception {
+    Analyzer a = new UkrainianMorfologikAnalyzer();
+    assertAnalyzesTo(a, "Ця п'єса у свою чергу рухається по колу.",
+                     new String[] { "п'єса", "черга", "рухатися", "кола",
"коло", "коло", "кіл", "кіл" });
+    a.close();
+  }
+
+  public void testSpecialCharsTokenStream() throws Exception {
+    Analyzer a = new UkrainianMorfologikAnalyzer();
+    assertAnalyzesTo(a, "Ця пʼєса, у сво́ю чергу, рухається по
колу.",
+                     new String[] { "п'єса", "черга", "рухатися", "кола",
"коло", "коло", "кіл", "кіл" });
+    a.close();
+  }
+
+  public void testCapsTokenStream() throws Exception {
+    Analyzer a = new UkrainianMorfologikAnalyzer();
+    assertAnalyzesTo(a, "Цей Чайковський.",
+                     new String[] { "чайковський" });
+    a.close();
+  }
+
+  /** blast some random strings through the analyzer */
+  public void testRandomStrings() throws Exception {
+    Analyzer analyzer = new UkrainianMorfologikAnalyzer();
+    checkRandomData(random(), analyzer, 1000*RANDOM_MULTIPLIER);
+    analyzer.close();
+  }
+}


Mime
View raw message