Java-токенизатор или средство разбиения по словам, и для разных языков
Интересно, есть ли какая-нибудь языковая утилита на основе Java, которая может помочь в выполнении следующей строки для токенизации или разбиения слов и удаления шума?
Так что для строки
Friday's meeting is wonderful
Ожидаемый результат будет серия слов
Friday meeting wonderful
где и удаляется
И для строки
I went to the farmer's market
ожидаемый результат будет слова
went farmer market
где я, чтобы, и удалили
5 ответов
Нет общего решения этой проблемы, потому что (что не менее важно) ваше представление о "шуме" плохо определено... и, скорее всего, отличается от других людей.
Если бы я реализовывал это (и я согласился с вашим понятием "шум"), я бы:
- Токенизируйте, используя пробелы и в качестве разделителей принимайте знаки препинания.
- Лента цитат
- Стрип апострофии
- Нормализовать переносы (возможно, просто удалить дефисы)
- Используйте фильтр стоп-слов, чтобы избавиться от "шумовых" слов.
Короче говоря, вам нужно написать нетривиальный объем кода, чтобы сделать это.
Конечно, удаление "шумовых" слов - это информация о полосе, которая имеет отношение к правильному семантическому анализу текста. ("Я бью по мячу" и "Ты бьешь по мячу" говорят разные вещи.)
Я играл с Стэнфордским парсером раньше. Это двигатель НЛП, который имеет достаточно хорошие результаты для большинства целей. Это даст вам большую власть в выборе слов, которые вы хотите сохранить.
Я не знаю утилиты, которая бы делала это для вас из коробки, но, возможно, посмотрите на это - Удаление строк из другой строки в Java. Надеюсь, это несколько полезно.
Может быть, взглянуть на это? Я также знаю, что есть класс String Tokenizer, но его сложно использовать в ваших целях.
http://docs.oracle.com/javase/7/docs/api/java/text/Normalizer.html
Возможно, это не лучшее решение, но вы можете использовать метод replaceAll из класса String, заменив шум на пустую строку.
Например, что-то вроде: line.replaceAll("s", "");