2

我一直在尝试使用:

$string="The Dr. is here!!! I am glad I'm in the U.S.A. for the Dr. quality is great!!!!!!";
preg_match_all('~.*?[?.!]~s',$string,$sentences);
print_r($sentences);

但它不适用于美国博士等。

有没有人有更好的建议?

4

3 回答 3

11

没有任何简单的解决方案。您需要在应用程序中进行一些自然语言处理 (NLP) 并识别每个句子。有一个叫OpenNLP的东西,它是一个基于 JAVA 的 NLP 解析器工具。或者Ruby 中的斯坦福 NLP 解析器。你可以为 php 找到类似的东西。

在这里,我找到了一组用于 PHP 中自然语言处理的类。

于 2010-01-28T22:15:57.557 回答
1

嗯,也许尝试类似的东西$sentences = preg_split('/.*?[?.!]+\s+/', $string);

于 2010-01-28T22:11:18.877 回答
0

这几乎是不可能的,因为您的示例清楚地表明可以在例如 Dr.、USA 等中使用的标点符号使得无法知道句子的开始/结束位置。

您必须搜索以下字符以确定新句子是否跟随(开始于)您提到的标点字符。

于 2010-01-28T22:12:49.127 回答