我一直在尝试使用:
$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。等无效。
有没有人有更好的建议?
答案 0 :(得分:12)
没有任何简单的解决方案。你需要在你的应用程序中做一些自然语言处理(NLP)并识别每个句子。有一些叫OpenNLP的东西,它是一个基于JAVA的NLP解析器工具。或者Ruby中的Stanford NLP parser。你可以找到类似PHP的东西。
here我在PHP中找到了一组自然语言处理类。
答案 1 :(得分:1)
嗯,也许可以试试像$sentences = preg_split('/.*?[?.!]+\s+/', $string);
答案 2 :(得分:0)
这几乎是不可能的,因为你的例子清楚地表明可用于例如标点符号的标点字符。博士,美国等等,无法知道句子的开始/结束位置。
您必须搜索以下字符,以确定您提到的标点字符后面是否有一个新句子(在之后开始)。