Библиотека Java, которая находит границы предложений - PullRequest
7 голосов
/ 27 января 2009

Кто-нибудь знает библиотеку 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

Вот часть этого образца, которую я изменил: статическое недействительное предложениеExamples () {

  Locale currentLocale = new Locale ("ja","JP");
  BreakIterator sentenceIterator = 
     BreakIterator.getSentenceInstance(currentLocale);
  String someText = "今日はパソコンを買った。高性能のマックは早い!とても快適です。";

Когда я смотрю на индексы границ, я вижу это:

0|13|24|32

Но эти индексы не соответствуют никаким терминаторам предложений.

Ответы [ 2 ]

4 голосов
/ 27 января 2009

Вы хотите посмотреть на интернационализированные классы BreakIterator. Хорошая отправная точка для границ предложения .

3 голосов
/ 27 января 2009

Вы писали:

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

Основная проблема здесь заключается в том, что терминаторы предложений зависят от контекста, рассмотрим:

Как доктор Джонс вычислил 5! без рекурсии?

Это должно быть распознано как одно предложение, но если вы просто разделите возможные терминаторы предложений, вы получите три предложения.

Так что это более сложная проблема, чем можно подумать в начале. К нему можно приблизиться, используя методы машинного обучения. Например, вы можете взглянуть на проект OpenNLP , в частности класс SentenceDetectorME .

...