Разделите длинный текст на осмысленные предложения определенной длины, используя C # - PullRequest
0 голосов
/ 06 апреля 2011

Я хотел бы разбить текст на точку, за которой следуют пробел или точка, за которой следует новая строка (\ n) определенной длины.

например, если у меня длинный текст с общим количеством символов 3456.Я хочу разделить этот текст на три разных.текст с 1000 или ближайший номер.символов, но каждый текст должен заканчиваться полным смыслом предложениясимвол, поэтому я хочу разделить на несколько текстов, чтобы у меня не было текста более 1000 символов, и каждый текст заканчивается в полном предложении.например, текст до точки, за которой следует пробел или точка, за которой следует новая строка (\ n)

Я работаю с c # .Net

Заранее спасибо.

1 Ответ

0 голосов
/ 07 апреля 2011

Как то так.Очевидно, замените «someText» вашими данными и установите shardLength равным 1000 для вашего примера.Это решение выдает ошибку, если есть предложение больше, чем размер блока.

В настоящее время он обрабатывает переводы строк, фактически игнорируя их - он разделяется только на "."

Это означает, что предложения, оканчивающиеся на ". \ N", будут разделены после ".", А "\ n" будет в начале следующего предложения.

Преимущество здесь в том, что если вы передадите это в свой API, вы сможете объединить результаты и сохранить новые строки в соответствующих местах (при условии, что API обрабатывает новые строки).

     using System.Text.RegularExpressions;
     public static void BlockSplitter()
        {
            String someText = @"This is some text.
The quick brown fox jumps over the lazy dog. Testing 1 2 3.
Sentence with no fullstop";
            String[] sentences;

            string delimiters = @"(?<=\.)";

            sentences = Regex.Split(someText,delimiters);

            String shard = String.Empty;
            int shardLength = 45;

            foreach (String sentence in sentences)
            {
                if (sentence.Length > shardLength) 
                {
                    //Raise an exception as the sentence 
                }
                if ((shard.Length + sentence.Length) <= shardLength)
                {
                    shard += sentence;
                }
                else
                {
                    Console.WriteLine(shard);
                    shard = sentence;
                }
            }
            Console.WriteLine(shard);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...