gpt4 book ai didi

php - 如何将PHP中的字符串截断为最接近特定字符数的句子?

转载 作者:可可西里 更新时间:2023-11-01 13:16:34 25 4
gpt4 key购买 nike

我想将我的字符串截断/缩短为最接近特定字符数的句子。

我有一个工作函数,但我的函数截断到最接近特定字符数的单词。

function shortenString($string, $your_desired_width) {
$parts = preg_split('/([\s\n\r]+)/', $string, null, PREG_SPLIT_DELIM_CAPTURE);
$parts_count = count($parts);

$length = 0;
$last_part = 0;
for (; $last_part < $parts_count; ++$last_part) {
$length += strlen($parts[$last_part]);
if ($length > $your_desired_width) { break; }
}

return implode(array_slice($parts, 0, $last_part));
}

例如:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer malesuada eleifend orci, eget dignissim ligula porttitor cursus. Praesent in blandit enim. Maecenas vitae eleifend est. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas pulvinar gravida tempor.

应缩短为:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer malesuada eleifend orci, eget dignissim ligula porttitor cursus.

而不是像这样打破句子:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer malesuada eleifend orci, eget dignissim ligula porttitor cursus. Praesent in

感谢您的帮助。

最佳答案

我尝试了几个函数和正则表达式,但没有一个能像我希望的那样工作,所以我创建了这个:

function sentenceTrim($string, $maxLength = 300) {
$string = preg_replace('/\s+/', ' ', trim($string)); // Replace new lines (optional)

if (mb_strlen($string) >= $maxLength) {
$string = mb_substr($string, 0, $maxLength);

$puncs = array('. ', '! ', '? '); // Possible endings of sentence
$maxPos = 0;

foreach ($puncs as $punc) {
$pos = mb_strrpos($string, $punc);

if ($pos && $pos > $maxPos) {
$maxPos = $pos;
}
}

if ($maxPos) {
return mb_substr($string, 0, $maxPos + 1);
}

return rtrim($string) . '&hellip;';
} else {
return $string;
}
}

它将字符串修剪到指定的最大长度,从该字符串中找到最后一个句子的结尾(.或!或?)的最后一次出现,并再次修剪到这次出现。它返回接近指定字符数的一个或几个完整句子。

请纠正我的英文。

关于php - 如何将PHP中的字符串截断为最接近特定字符数的句子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10254260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com