当前位置:  开发笔记 > 编程语言 > 正文

解析单个句子的正则表达式是什么?

如何解决《解析单个句子的正则表达式是什么?》经验,为你挑选了3个好方法。

我正在寻找一个很好的.NET正则表达式,我可以用它来解析文本正文中的单个句子.

它应该能够将以下文本块解析成六个句子:

Hello world! How are you? I am fine.
This is a difficult sentence because I use I.D.

Newlines should also be accepted. Numbers should not cause  
sentence breaks, like 1.23.

事实证明这比我原先想象的更具挑战性.

任何帮助将不胜感激.我将使用它来训练已知文本体系.



1> YOU..:

试试这个@"(\S.+?[.!?])(?=\s+|$)":

string str=@"Hello world! How are you? I am fine. This is a difficult sentence because I use I.D.
Newlines should also be accepted. Numbers should not cause sentence breaks, like 1.23.";

Regex rx = new Regex(@"(\S.+?[.!?])(?=\s+|$)");
foreach (Match match in rx.Matches(str)) {
    int i = match.Index;
    Console.WriteLine(match.Value);
}

结果:

Hello world!
How are you?
I am fine.
This is a difficult sentence because I use I.D.
Newlines should also be accepted.
Numbers should not cause sentence breaks, like 1.23.

当然,对于复杂的,你需要一个真正的解析器,如SharpNLP或NLTK.我只是一个快速而肮脏的人.

这是SharpNLP信息,其特点是:

SharpNLP是用C#编写的自然语言处理工具的集合.目前它提供以下NLP工具:

句子分割器

一个标记器

词性标注器

一个chunker(用于"查找非递归的句法注释,如名词短语块")

解析器

一个名字查找器

共同参与工具

WordNet词汇数据库的接口


+1指向我们SharpNLP,这是我以前没见过的,可能非常有用.

2> SLaks..:
var str = @"Hello world! How are you? I am fine. This is a difficult sentence because I use I.D.
Newlines should also be accepted. Numbers should not cause sentence breaks, like 1.23.";

Regex.Split(str, @"(?<=[.?!])\s+").Dump();

我在LINQPad中测试了这个.



3> peter.murray..:

使用正则表达式解析自然语言是不可能的.一句话的结尾是什么?许多地方都可能出现一段时期(egeg).您应该使用自然语言解析工具包,例如OpenNLP或NLTK.不幸的是,C#中的产品很少(如果有的话).因此,您可能必须创建Web服务或以其他方式链接到C#.

请注意,如果您依赖"ID"中的确切空格,将来会导致问题.您很快就会找到打破正则表达式的示例.例如,大多数人在他们的内容之后放置空格.

WP中的开放和商业产品有很好的总结(http://en.wikipedia.org/wiki/Natural_language_processing_toolkits).我们使用了其中几种.值得付出努力.

[你用"火车"这个词.这通常与机器学习相关(这是NLP的一种方法,并且已经用于句子分割).事实上,我提到的工具包包括机器学习.我怀疑那不是你的意思 - 而是你会通过启发式来表达你的表达.别!]

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有