Разделение текста на предложения и предложение на слова: BreakIterator против регулярных выражений - PullRequest
6 голосов
/ 19 декабря 2010

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

И автор предложил использовать BreakIterator для токенизации входных строк, и некоторым людям понравилась эта идея.

Я просто не понимаю этого безумия: как 25 строк сложного кода могут быть лучше, чем простой однострочный с регулярным выражением?

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

Если это действительно так круто и правильно, то мне интересно: вы действительно используете подход с BreakIterator в своих проектах?

Ответы [ 2 ]

3 голосов
/ 19 декабря 2010

При просмотре кода, размещенного в этом ответе, похоже, что BreakIterator учитывает язык и локаль текста. Получение такого уровня поддержки с помощью регулярных выражений, безусловно, будет значительной болью. Возможно, это главная причина, по которой он предпочитается простому регулярному выражению?

2 голосов
/ 19 декабря 2010

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

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

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

  1. Найти предложение, в котором любое слово встречается чаще всего.Выведите его вместе с этим словом
  2. Найдите слово, которое чаще всего используется во всей строке.
  3. Найдите все слова, встречающиеся в каждом предложении
  4. Найдите все слова, встречающиеся в простом числеколичество раз в 2 или более предложениях

Список продолжается ...

...