Библиотека Java, которая находит границы предложений
Кто-нибудь знает библиотеку Java, которая обрабатывает поиск границ предложений? Я думаю, что это будет умная реализация StringTokenizer, которая знает обо всех терминаторах предложений, которые могут использовать языки.
Вот мой опыт работы с BreakIterator:
Используя пример здесь: у меня есть следующий японский:
今日はパソコンを買った。高性能のマックは早い!とても快適です。
В ascii это выглядит так:
\ufeff\u4eca\u65e5\u306f\u30d1\u30bd\u30b3\u30f3\u3092\u8cb7\u3063\u305f\u3002\u9ad8\u6027\u80fd\u306e\u30de\u30c3\u30af\u306f\u65e9\u3044\uff01\u3068\u3066\u3082\u5feb\u9069\u3067\u3059\u3002
Вот часть этого примера, которую я изменил: static void terminceExamples() {
Locale currentLocale = new Locale ("ja","JP");
BreakIterator sentenceIterator =
BreakIterator.getSentenceInstance(currentLocale);
String someText = "今日はパソコンを買った。高性能のマックは早い!とても快適です。";
Когда я смотрю на пограничные индексы, я вижу это:
0|13|24|32
Но эти индексы не соответствуют никаким терминаторам предложений.
2 ответа
Вы написали:
Я думаю, что это будет умная реализация StringTokenizer, которая знает обо всех терминаторах предложений, которые могут использовать языки.
Основная проблема здесь заключается в том, что терминаторы предложений зависят от контекста, рассмотрим:
Как доктор Джонс вычислил 5! без рекурсии?
Это следует признать как одно предложение, но если вы просто разделите возможные терминаторы предложений, вы получите три предложения.
Так что это более сложная проблема, чем можно подумать в начале. К нему можно приблизиться, используя методы машинного обучения. Вы можете, например, заглянуть в проект OpenNLP, в частности класс SentenceDetectorME.
Вы хотите посмотреть на интернационализированные классы BreakIterator. Хорошая отправная точка для границ предложения.