Подсчитать количество предложений в строке - PullRequest
2 голосов
/ 05 февраля 2012

Как я могу посчитать количество предложений в данной строке?

Ответы [ 2 ]

12 голосов
/ 05 февраля 2012

Для этого вам понадобится библиотека для разбора естественного языка.

Например, вы можете использовать SharpNLP , который является портом C # проекта OpenNLP .

SharpNLP - это набор инструментов для обработки естественного языка, написанный на C #. В настоящее время он предоставляет следующие инструменты НЛП:

  • разделитель предложений
  • и т.д ...

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

using OpenNLP.Tools.SentenceDetect;

// ...

EnglishMaximumEntropySentenceDetector sentenceDetector = 
  new EnglishMaximumEntropySentenceDetector(mModelPath + "EnglishSD.nbin");
string[] sentences = sentenceDetector.SentenceDetect(input);

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

  • Существуют и другие символы, которые могут заканчиваться предложением, кроме точки.
  • Этот период имеет иное использование в английском языке, кроме конечных предложений.
7 голосов
/ 05 февраля 2012

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

object oMissing = System.Reflection.Missing.Value;

var oWord = new Microsoft.Office.Interop.Word.Application();
oWord.Visible = false;
var oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);

oDoc.Content.Text = inputTextBox.Text;

//get just sentence count
sentenceCountLabel.Text = oDoc.Sentences.Count.ToString();

//get all statistics
foreach (Microsoft.Office.Interop.Word.ReadabilityStatistic stat in oDoc.ReadabilityStatistics)
{
    Console.WriteLine("{0}: {1}", stat.Name, stat.Value);
}

object oFalse = false;

oDoc.Close(ref oFalse, ref oMissing, ref oMissing);

Будет выведено:

 Words: 283 
 Characters: 1271 
 Paragraphs: 3 
 Sentences: 6 
 Sentences per Paragraph: 2 
 Words per Sentence: 47.1 
 Characters per Word: 4.3 
 Passive Sentences: 0 
 Flesch Reading Ease: 55.2 
 Flesch-Kincaid Grade Level: 12.5

Это может быть не самым эффективным, но требует всего несколько строк кода и может подойти в зависимости от ваших потребностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...