Токенайзер, Стоп Word Удаление, Стебминг в Java

Я ищу класс или метод, который принимает длинную строку из многих сотен слов и токенов, удаляет стоп-слова и основы для использования в ИК-системе.

Например:

"Большой толстый кот, сказал" твой самый смешной парень, которого я знаю "кенгуру..."

токенизатор удалит пунктуацию и вернет ArrayList слов

средство удаления стоп-слов будет удалять такие слова, как "the", "to" и т. д.

стеммер будет сокращать каждое слово, а их "корень", например, "самый смешной" станет смешным

Спасибо заранее.

4 ответа

Решение

AFAIK Lucene может делать то, что вы хотите. С StandardAnalyzer а также StopAnalyzer Вы можете остановить удаление слова. В сочетании с Lucene contrib-snowball (который включает в себя работу из Snowball) проект, который вы можете сделать также

Но в качестве основы также рассмотрим этот ответ: Алгоритм создания, который производит реальные слова

Это стандартные требования в обработке естественного языка, поэтому я бы посмотрел в таких инструментах. Поскольку вам требуется Java, я бы начал с OpenNLP: http://opennlp.sourceforge.net/

Если вы можете посмотреть на других языках, есть также NLTK (Python)

Обратите внимание, что "ваш самый смешной парень, которого я знаю", не является стандартным синтаксисом, и это усложняет процесс обработки, чем "Вы самый смешной парень, которого я знаю". Не невозможно, но гораздо сложнее. Я не знаю ни одной системы, которая бы приравнивала "ваше" к "вы есть".

Я занимался этой проблемой в ряде задач, над которыми я работал, поэтому позвольте мне дать предложение токенизатора. Поскольку я не вижу, что это дано непосредственно как ответ, я часто использую edu.northwestern.at.utils.corpuslinguistics.tokenizer.* как моя семья токенизаторов. Я вижу ряд случаев, когда я использовал PennTreebankTokenizer учебный класс. Вот как вы используете это:

    WordTokenizer wordTokenizer = new PennTreebankTokenizer();
    List<String> words = wordTokenizer.extractWords(text);

Ссылка на эту работу здесь. Просто отказ от ответственности, я не имею никакого отношения к Northwestern, группе или работе, которую они делают. Я просто тот, кто иногда использует код.

Вот полный список инструментов НЛП. Иногда имеет смысл создать их самостоятельно, так как они будут легче, и у вас будет больше контроля над внутренней работой: используйте простое регулярное выражение для токенизаций. Для стоп-слов просто отправьте приведенный ниже список или другой список в HashSet:

синфазного английский-words.txt

Вот одна из многих Java-реализаций Porter Stemer).

Другие вопросы по тегам