Как я могу разбить абзацы на правильные предложения в Java с помощью split ()?

#java #string #split

#java #строка #разделить

Вопрос:

Я хочу разбить абзацы на предложения. Например: «У Мэри был маленький ягненок. Его начес был белым.» я хочу разделить его на: «У Мэри был маленький ягненок». «Его начес был белым».

в настоящее время я попытался использовать text.split(«[.]»); и получил результат: «У Мэри был маленький ягненок» (точка отсутствует. мне это нужно) «Его начертание было белым» (пробел присутствует перед предложением и по-прежнему без точки)

что я намерен сделать, так это разбить этот параграф на правильные предложения и поместить его в array.

 String text = sc.nextLine();
String[] sentence = text.split("[.]");
  

пожалуйста, помогите!

Комментарии:

1. Вы должны использовать регулярное выражение с положительным взглядом на период

2. Вы могли бы разбить с помощью символа точки ( . ), обрезать строки, а затем добавить недостающую точку.

3. Можете ли вы рассказать больше о применении этого? Если это программирование задания, а затем использовать регулярные выражения, вероятно, сделать работу, но если это более крупное приложение, и ввод может быть просто любые приговоры, то вы не должны пытаться писать свои собственные решения, но стоит присмотреться обработки естественного языка (НЛП) библиотеки, такие как OpenNLP , которые содержат предложения разветвители.

4. Есть много проблем, с которыми вы столкнетесь при использовании самодельного решения в реальном мире, таких как тот факт, что существуют разные типы предложений (хорошо, вы можете написать регулярное выражение, которое содержит вопросительные знаки и т.д.), Но также использование точек внутри предложения — см. etc. Я только что использовал.

Ответ №1:

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

Что-то вроде:

 String[] splitString = theString.split("[.]");
for(String s : splitString){
    s  = ".";
}
  

Что-то в этом направлении.

Комментарии:

1. Спасибо, но это решает только часть проблемы. Он заботится о полной остановке в конце каждого элемента массива, то есть каждого предложения. хотя после первого предложения каждое предложение начинается с пробела. Этот пробел вызывает проблемы при дальнейшем разбиении некоторых из этих предложений на слова с помощью split(" ") . Он учитывает первый пробел и выводит его тоже.

Ответ №2:

Предполагая, что существует хотя бы вероятность того, что разделение предложений не является последним этапом обработки естественного языка, вам следует рассмотреть возможность использования библиотеки обработки естественного языка (NLP), такой как OpenNLP. Вы можете попробовать OpenNLP через веб-интерфейс благодаря проекту Gate, который сделал конвейер обработки английского языка доступным в виде веб-страницы. Обязательно используйте кнопку «Настроить аннотации», чтобы увидеть структуру предложения.

Ответ №3:

Что-то вроде этого должно сработать:

 public class Main {
    public static void main(String[] args) {
        String paragraph = "Mary had a little lamb. Its fleece was white.";

        String sentences[] = paragraph.split("[.]");

        for (String sentence:sentences){
            System.out.println(sentence);
        }
    }

}
  

Комментарии:

1. Я хотел найти решение с использованием split() того, о java.text.BreakIterator чем я еще не узнал. Поэтому, если мне придется объяснять свой код, я не смогу этого сделать. Если возможно, я был бы признателен, если бы вы могли помочь мне вместо этого использовать split() метод. хотя спасибо

2. @EarthyCalf О, хорошо, я понимаю. Я отредактировал свой ответ

Ответ №4:

предположим, что это предложение:

 String sResult = "This is a test. This is a T.L.A. test.";
  

так что вам лучше попробовать это

 String sResult = "This is a test. This is a T.L.A. test.";
String[] sSentence = sResult.split("(?<=[a-z])\.\s ");
  

Результат:

 This is a test
This is a T.L.A. test.
  

Обратите внимание, что существуют сокращения, которые не заканчиваются заглавными буквами, такие как abbrev., Mr. и т.д… И есть также предложения, которые не заканчиваются точками!

Комментарии:

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