这个函数是Bing提供的,但是不完美,比如说我设置的不超过500文字,但有的时候因为分段问题,会产生500多文字的情况,但分段是不断句的。如果有朋友可以优化一下的,非常感谢。

<?php
function splitText(string $text): array
{
    $punctuation = '/[。!?;:”’)》】,、!?;:,"()\r\n]/u';
    $segments = [];
    $segment = '';
    for ($i = 0; $i < mb_strlen($text); $i++) {
        $char = mb_substr($text, $i, 1);
        $segment .= $char;
        if (preg_match($punctuation, $char) && mb_strlen($segment) >= 400) {
            $segments[] = $segment;
            $segment = '';
        }
    }
    if ($segment !== '') {
        $segments[] = $segment;
    }
    return $segments;
}