6

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

以 2004 年底发生的亚洲海啸灾难为例。在一个月内(1 月 17 日),对 Google 新闻 (http://news.google.com) 的查询返回了 80,000 多篇关于此事件的在线新闻文章至 2005 年 2 月 17 日)。先生的资料 卡哈娜。

这是我的代码:

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

但是最后一句话还是分裂了information by mr.Kahana. 怎么解决?谢谢你 :)

4

1 回答 1

7

你不能用正则表达式做到这一点

英语作为一种语言不适合放置良好的格式规则。因此,正则表达式不适合实现您所寻求的目的。您真正需要的是自然语言处理器之类的东西。

除非这对您的程序至关重要,否则我建议您改为确定以下事项:

  • 可接受的误差水平是多少? 你所做的任何事情都不会是完美的。但如果它工作 80% 可以吗?90%?99%?这对您/您的客户有多重要?
  • 文字从何而来?例如,教科书的编写方式很可能与人们的 Twitter 提要不同。您可以根据您在使用的实际文本中看到的内容进行研究并进行例外处理。
  • 我在用文字做什么?如果您只是索引关键字之类的内容,那么正确拆分句子并不重要(同样重要)。这一切都是为了调整程序以获得针对此特定目的的适当输出。

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

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

于 2012-10-15T03:31:28.573 回答