正则表达式是我使用了很长时间的一个不错的选择。
一个非常适合我的正则表达式是
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# 应用程序中,请阅读我撰写的详细文章。 https://stackoverflow.com/questions/11279054/sharpnlp-as-nbin-file-extension/19456965#19456965它将向您解释与代码片段的集成。
Thanks