出于需要,自己写了个分割句子用的正则表达式,考虑了各种特殊情况,所以写的比较长
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()
可以分割以结束符(句号,问号,省略号)为结尾的句子,
然后再使用上面的正则表达式,就更加准确
来源:博客园
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。