出於需要,自己寫了個分割句子用的正則表達式,考慮了各種特殊情況,所以寫的比較長
public static Regex UselessPunctionRegex = new Regex(@"'(?!(s|t|re|m)( |$))|\.$|\. |\.{2,}|©|`|~|!|@|#|\$|%|\^|\*|\(|\)|(^|[^\w])-+|-+($|[^\w])|_|=|\+|\[|\]|\{|\}|<|>|\\|\||/|;|:|""|•|–|,|\?|×|!|·|…|—|(|)|、|:|;|‘|’|“|”|《|》|,|。|?");
比如下面的句子可以進行正確的分割:
@"What's your name? My name is Han mei-mei. I am from U.S.A! Nice to meet you!"
它會分割成:
What's your name
My name is Han mei-mei
I am from U.S.A
Nice to meet you
保證了特殊標點符號不會成為分隔符,比如其中的What's,mei-mei,U.S.A
我把鍵盤上所有的標點都按上去了。
【注意】此正則表達式不能識別不加空格的句號分隔符,比如
Nice to meet you.Nice to meet you, too.
只能分割成
Nice to meet you.Nice to meet you
too
要想解決這個問題,建議首先使用OpenNLP工具,里面有個類名叫
EnglishMaximumEntropySentenceDetector
它有個方法名叫
SentenceDetect()
可以分割以結束符(句號,問號,省略號)為結尾的句子,
然后再使用上面的正則表達式,就更加准確了
