正则表达式是我使用了很长时间的一个不错的选择。
一个非常适合我的正则表达式是
string[] sentences = Regex.Split(sentence, @"(?<=['""A-Za-z0-9][\.\!\?])\s+(?=[A-Z])");
但是,正则表达式效率不高。此外,尽管该逻辑适用于理想情况,但在生产环境中效果不佳。
例如,如果我的文字是,
美国是一个美妙的国家。大多数人都觉得住在那里很开心。
正则表达式方法将通过在每个周期拆分将其分类为 5 个句子。但我们知道,从逻辑上讲,它应该只分成两个句子。
这就是让我寻找机器学习技术的原因,最后 SharpNLP 对我来说效果很好。
private string mModelPath = @"C:\Users\ATS\Documents\Visual Studio 2012\Projects\Google_page_speed_json\Google_page_speed_json\bin\Release\";
private OpenNLP.Tools.SentenceDetect.MaximumEntropySentenceDetector mSentenceDetector;
private string[] SplitSentences(string paragraph)
{
if (mSentenceDetector == null)
{
mSentenceDetector = new OpenNLP.Tools.SentenceDetect.EnglishMaximumEntropySentenceDetector(mModelPath + "EnglishSD.nbin");
}
return mSentenceDetector.SentenceDetect(paragraph);
}
在此示例中,我使用了 SharpNLP,其中我使用了 EnglishSD.nbin - 一个用于句子检测的预训练模型。
现在,如果我在此方法上应用相同的输入,它将完美地将文本拆分为两个逻辑句子。
您甚至可以使用 SharpNLP 项目进行标记化、POSTag、Chuck 等。
要逐步将 SharpNLP 集成到您的 C# 应用程序中,请阅读我编写的详细文章。它将向您解释与代码片段的集成。
谢谢