如何将段落分成句子

时间:2010-01-28 22:00:39

标签: php regex split text-segmentation

我一直在尝试使用:

$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);

但它对Dr.,U.S.A。等无效。

有没有人有更好的建议?

3 个答案:

答案 0 :(得分:12)

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

here我在PHP中找到了一组自然语言处理类。

答案 1 :(得分:1)

嗯,也许可以试试像$sentences = preg_split('/.*?[?.!]+\s+/', $string);

这样的东西

答案 2 :(得分:0)

这几乎是不可能的,因为你的例子清楚地表明可用于例如标点符号的标点字符。博士,美国等等,无法知道句子的开始/结束位置。

您必须搜索以下字符,以确定您提到的标点字符后面是否有一个新句子(在之后开始)。