【发布时间】:2011-01-10 15:01:57
【问题描述】:
我一直在尝试使用:
$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. 等。
有人有更好的建议吗?
【问题讨论】:
-
我不太了解正则表达式,但我在想是否有办法说最后一句之前的句子必须至少有 5 个字符长或类似的东西......
-
好吧,为了满足这种情况,您需要一个正则表达式来检查空格后跟一个大写字母,然后再进行拆分。我对正则表达式不熟悉,也许你可以这样做,但我认为规则可能很快就会变得更加复杂,可能你会使用一个简单的正则表达式 + 一个小状态机的组合来正确地做到这一点。跨度>
-
大写字母后面的空格不一定有效。想象一下使用这句话:
Hello, Dr. Smith is ready for you. Please go to the E.R. where he is waiting. -
Aaron:这就是为什么我说你需要将它与状态机结合起来。
-
Scott:这实际上只是一个区域,您可以根据某些变量的当前“状态”来决定行动方案。所以你会在'。你会有一个“博士”的“previousWord”。然后,您可以在“以 . 结尾但不以句子结尾的合法词”(或一些更复杂的模型)的列表中查找它,并决定是否在该点拆分成句子。
标签: php regex split text-segmentation