03
2012
07

C# 分割句子的正则表达式,正确分割句子

出于需要,自己写了个分割句子用的正则表达式,考虑了各种特殊情况,所以写的比较长

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()

可以分割以结束符(句号,问号,省略号)为结尾的句子,

然后再使用上面的正则表达式,就更加准确

来源:博客园

« 上一篇下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。