Задать вопрос
toxa_1995
@toxa_1995
Начинающий...

Как работает лемматизация в Apache OpenNLP???

Данная библиотека предназначена для обработки текста. Мне нужно вытащить лемму из слов. Репозиторий подсоединил. 0c3d55284b4343b385a7a3271643ba04.png
Вот код этого класса, который по видимому и занимается лемматизацией
public class SimpleLemmatizer implements DictionaryLemmatizer {

  public final Set<String> constantTags = new HashSet<String>(Arrays.asList("NNP","NP00000"));
  private HashMap<List<String>,String> dictMap;


  public SimpleLemmatizer(InputStream dictionary) {
        dictMap = new HashMap<List<String>,String>();
        BufferedReader breader = new BufferedReader(new InputStreamReader(dictionary));
        String line;
        try {
            while ((line = breader.readLine()) != null) {
                String[] elems = line.split("\t");
                dictMap.put(Arrays.asList(elems[0],elems[1]),elems[2]);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
  }


  private List<String> getDictKeys(String word, String postag) {
        List<String> keys = new ArrayList<String>();
        if (constantTags.contains(postag)) {
            keys.addAll(Arrays.asList(word,postag));
        }
        else {
            keys.addAll(Arrays.asList(StringUtil.toLowerCase(word),postag));
        }
        return keys;
    }

  public String lemmatize(String word, String postag) {
    String lemma = null;
    List<String> keys = getDictKeys(word, postag);
    //lookup lemma as value of the map
    String keyValue = dictMap.get(keys);
    if (keyValue != null) {
        lemma = keyValue;
    }
    else if (keyValue == null && constantTags.contains(postag)) {
        lemma = word;
    }
    else if (keyValue == null && word.toUpperCase() == word) {
        lemma = word;
    }
    else {
        lemma = StringUtil.toLowerCase(word);
    }
    return lemma;
  }
}

Не могу понять, как использовать данный класс. На вход берет поток данных, InputStream, это ясно. Но как он будет вытаскивать лемму из слова???
Возможно есть и другие методы поиска леммы, которыми пользуетесь вы??
  • Вопрос задан
  • 631 просмотр
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы