如何将文本拆分为句子数组?
示例文本:
Fry me a Beaver. Fry me a Beaver! Fry me a Beaver? Fry me Beaver no. 4?! Fry me many Beavers... End
应该输出:
0 => Fry me a Beaver.
1 => Fry me a Beaver!
2 => Fry me a Beaver?
3 => Fry me Beaver no. 4?!
4 => Fry me many Beavers...
5 => End
我尝试了一些通过搜索在 SO 上找到的解决方案,但它们都失败了,尤其是在第 4 句。
/(?<=[!?.])./
/\.|\?|!/
/((?<=[a-z0-9)][.?!])|(?<=[a-z0-9][.?!]\"))(\s|\r\n)(?=\"?[A-Z])/
/(?<=[.!?]|[.!?][\'"])\s+/ // <- closest one
最佳答案
既然您想“拆分”句子,为什么要尝试匹配它们?
对于这种情况,让我们使用 preg_split() .
代码:
$str = 'Fry me a Beaver. Fry me a Beaver! Fry me a Beaver? Fry me Beaver no. 4?! Fry me many Beavers... End';
$sentences = preg_split('/(?<=[.?!])\s+(?=[a-z])/i', $str);
print_r($sentences);
输出:
Array
(
[0] => Fry me a Beaver.
[1] => Fry me a Beaver!
[2] => Fry me a Beaver?
[3] => Fry me Beaver no. 4?!
[4] => Fry me many Beavers...
[5] => End
)
解释:
好吧,简单地说,我们按分组空间\s+拆分并做两件事:
(?<=[.?!])正视断言背后,基本上我们搜索空格后面是否有点或问号或感叹号。
(?=[a-z]) 正向前瞻断言,搜索空格后是否有字母,这是
no 的一种变通方法。 4
问题。
关于php - 将文本拆分成句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16377437/