正則表達式是我長期使用的一個好選擇。
爲我工作得很好
一個很好的正則表達式是
string[] sentences = Regex.Split(sentence, @"(?<=['""A-Za-z0-9][\.\!\?])\s+(?=[A-Z])");
然而,正則表達式的效率不高。此外,雖然邏輯適用於理想情況,但它在生產環境中不起作用。
例如,如果我的文字是,
U.S.A.是一個美好的國家。住在那裏的大多數人都很開心。
正則表達式方法將在每個時期分裂爲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等進行標記。
For step by step integration of SharpNLP into your C# application, read through the detailed article I have written.它會向您解釋與代碼片段的集成。
謝謝
您的正則表達式不會將該示例分成5個句子,它找到兩個。你試過了嗎?我喜歡看似有效的快速和骯髒的句子檢測。 – Crowcoder 2016-08-27 20:08:39