正则表达式,将从文本文件中提取句子

时间:2012-10-15 03:08:07

标签: php regex

我需要一个能从文本文件中提取句子的正则表达式。 示例文本:

例如,考虑2004年底发生的亚洲海啸灾难。对Google新闻(http://news.google.com)的查询返回了超过80,000条关于此事件的在线新闻文章一个月(2005年1月17日至2月17日)。先生的信息。 Kahana。

这是我的代码:

$re = '/(?<=[.!?]|[.!?][\'"])\s+/';
$sentences = preg_split($re, $text, -1, PREG_SPLIT_NO_EMPTY);

但最后一句仍然分为information by mr.Kahana. 怎么解决?谢谢你:))

1 个答案:

答案 0 :(得分:7)

使用正则表达式无法执行此操作

英语作为一种语言不适合放在合适的格式规则中。因此,正则表达式不适合您实现的目的。你真正想要的是像自然语言处理器。

除非这对您的计划至关重要,否则我建议您确定以下事项:

  • 什么是可接受的错误级别?您所做的一切都不会是完美的。但如果它的工作原理80%是可以的吗? 90%? 99%?这对您/您的客户有多重要?
  • 来自哪里的文字?例如,教科书的编写方式很可能与人们的推文不同。您可以根据您在实际使用的文本中看到的内容进行研究并制作例外。
  • 我对文字做了什么?如果您只是为关键字之类的内容编制索引,那么如果您正确分割句子并不重要(同样多)。所有这些都是为了调整程序以获得适合此特定目的的输出。

我的建议是使用反复试验来尽可能降低错误率。在大量文本上运行程序,并继续添加异常,直到获得可接受的错误率。但是,如果你需要超过几十个规则,你可能只想重新考虑这个问题。

简而言之,PHP和正则表达式并不适用于此,因为英语很时髦。因此,要么添加例外以获得较小的错误率,要么完全重新考虑这一点。