Токенайзер, Стоп 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).