php 文章分句,关于php:将文本分成两半,但最接近的句子

$text变量的示例:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do

eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad

minim veniam, quis nostrud exercitation ullamco laboris nisi ut

aliquip ex ea commodo consequat. Duis aute irure dolor in

reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla

pariatur. Excepteur sint occaecat cupidatat non proident, sunt in

culpa qui officia deserunt mollit anim id est laborum.

将其分成两半:

$half = strlen($text) / 2;

将带我到consequat中的o字符。

如何在文本中间找到最接近的句子定界符(点)的位置? 在此示例中,在o之后是7个字符。

此文本还包含HTML代码。

我想在查找文本的半点时忽略HTML,并忽略html属性中的点等。

显然,您从概念上知道需要做什么。 我看不到问题-您尝试了什么,为什么不起作用?

如果下一个点不是句子的结尾,该怎么办? 给出一个例子?

@alex,糟糕。

好吧,我想它仍然会被认为是句子的结尾。 我对此一无所知:)

看一下substr,strip_tags和strpos。 在strpos的帮助下,您可以找到下一个点的位置,并使用strip_tags从字符串中剥离所有html标记。

$string = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborumt.';

$string = strip_tags($string);

$half = intval(strlen($string)/2);

echo substr($string, 0, strpos($string, '.', $half)+1);

考虑到必须确保在$half的值之后存在一个点,否则输出将不是您想要的。

也许像这样?

if (strpos($string, '.', $half) !== false)

echo substr($string, 0, strpos($string, '.', $half)+1);

else

echo substr($string, 0, $half) . '...';

假设您的句子可以以句号以外的其他字符结尾,则可以查看以下内容:

$s = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.';

// find center (rounded down)

$mid = floor(strlen($s) / 2);

// find range of characters from center that are not ?, ! or .

$r = strcspn($s, '.!?', $mid);

// remember to include the punctuation character

echo substr($s, 0, $mid + $r + 1);

您可能需要稍微调整一下,但它应该做得很好。 对于更高级的内容,您将涉足NLP(自然语言处理)领域,为此还提供了PHP中的库:

http://sourceforge.net/projects/nlp/

function abbrevia($str, $maxChars) {    $limit=$maxChars;

if (strlen($str)<=$maxChars) return $str;

else while ($str[$limit]!="" && $str[$limit]!="." && $str[$limit]!=";" && $str[$limit]!="," && $str[$limit]!="!" && $str[$limit]) $limit++;

return substr($str,0,($limit))."...";

}

您可以修改此功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值