Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据字数将字符串拆分为句子_Php_Regex_Yii - Fatal编程技术网

Php 根据字数将字符串拆分为句子

Php 根据字数将字符串拆分为句子,php,regex,yii,Php,Regex,Yii,我在这里看到了许多关于如何根据将字符串拆分为句子的示例,但我的问题是如何根据字数将字符串拆分为句子,而忘记了或, 例如: function splitToSentences($wordsCount){ .... } $string = "orem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim

我在这里看到了许多关于如何根据
将字符串拆分为句子的示例,但我的问题是如何根据字数将字符串拆分为句子,而忘记了

例如:

function splitToSentences($wordsCount){
....
}

$string = "orem ipsum dolor sit amet, consectetur adipiscing 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."

print_r( splitToSentences(10) );
输出:

[
  '0' => 'orem ipsum dolor sit amet, consectetur adipiscing elit, sed do',
  '1' => 'eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut',
  .....
]
试试这个:

$string = 'Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source.';

$sentences = preg_split('/(?<=[.?!;])\s+(?=\p{Lu})/', $string);

$ii = 0;

$paragraphs = array();

foreach ( $sentences as $value ) {

    if ( isset($paragraphs[$ii]) ) { 

       $paragraphs[$ii] .= $value; 

    } else { 

        $paragraphs[$ii] = $value; 

    }

    if ( str_word_count($paragraphs[$ii]) > 9 ) {
      $ii++;
    }
}

print_r($paragraphs); 
$string=”与流行的观点相反,Lorem Ipsum不仅仅是随机文本。它起源于公元前45年的一段古典拉丁文学,距今已有2000多年的历史。弗吉尼亚州汉普顿悉尼学院的拉丁语教授理查德·麦克林托克(Richard McClintock)从一篇《洛伦·伊普森》(Lorem Ipsum)的文章中查找了一个更为晦涩的拉丁语单词“Concertetur”,并查阅了古典文学中对该词的引用,发现了其无可置疑的来源;
$SESSIONS=preg_split('/(?试试这个:

$string = 'Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source.';

$sentences = preg_split('/(?<=[.?!;])\s+(?=\p{Lu})/', $string);

$ii = 0;

$paragraphs = array();

foreach ( $sentences as $value ) {

    if ( isset($paragraphs[$ii]) ) { 

       $paragraphs[$ii] .= $value; 

    } else { 

        $paragraphs[$ii] = $value; 

    }

    if ( str_word_count($paragraphs[$ii]) > 9 ) {
      $ii++;
    }
}

print_r($paragraphs); 
$string=”与流行的观点相反,Lorem Ipsum不仅仅是随机文本。它起源于公元前45年的一段古典拉丁文学,距今已有2000多年的历史。弗吉尼亚州汉普登悉尼学院的拉丁语教授理查德·麦克林托克从Lorem Ipsum一段中查找了一个更为晦涩的拉丁语单词,即Concertetur,并通过对古典文学中这个词的引用,发现了不容置疑的来源;

$SEQUENCES=preg_split('/(?我不熟悉php中的正则表达式,但我相信这个正则表达式会起到作用:

((?:\s*\S+){10})\s*
它最多匹配10个单词,前面有任意数量的空格或换行符,后面有任意数量的空格。“10”是要匹配的单词数

演示:

这似乎有效:

<?php

function splitToSentences($wordsCount) {
    $str = "orem ipsum dolor sit amet, consectetur adipiscing 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.";

    preg_match_all("/((?:\s*\S+){".$wordsCount."})\s*/", $str, $match);

    return $match[0];
}

print_r(splitToSentences(10));

我不熟悉php中的正则表达式,但我相信这个正则表达式会起到作用:

((?:\s*\S+){10})\s*
它最多匹配10个单词,前面有任意数量的空格或换行符,后面有任意数量的空格。“10”是要匹配的单词数

演示:

这似乎有效:

<?php

function splitToSentences($wordsCount) {
    $str = "orem ipsum dolor sit amet, consectetur adipiscing 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.";

    preg_match_all("/((?:\s*\S+){".$wordsCount."})\s*/", $str, $match);

    return $match[0];
}

print_r(splitToSentences(10));

结果:

array(7) {
  [0]=>
  string(62) "orem ipsum dolor sit amet, consectetur adipiscing elit, sed do"
  [1]=>
  string(62) "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut"
  [2]=>
  string(68) "enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi"
  [3]=>
  string(57) "ut aliquip ex ea commodo consequat. Duis aute irure dolor"
  [4]=>
  string(64) "in reprehenderit in voluptate velit esse cillum dolore eu fugiat"
  [5]=>
  string(71) "nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
  [6]=>
  string(54) "culpa qui officia deserunt mollit anim id est laborum."
}
工作示例

结果:

array(7) {
  [0]=>
  string(62) "orem ipsum dolor sit amet, consectetur adipiscing elit, sed do"
  [1]=>
  string(62) "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut"
  [2]=>
  string(68) "enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi"
  [3]=>
  string(57) "ut aliquip ex ea commodo consequat. Duis aute irure dolor"
  [4]=>
  string(64) "in reprehenderit in voluptate velit esse cillum dolore eu fugiat"
  [5]=>
  string(71) "nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
  [6]=>
  string(54) "culpa qui officia deserunt mollit anim id est laborum."
}

工作示例

首先,删除所有
。然后用空格分解字符串,最后使用
数组块()将生成的数组拆分为更小的数组
。首先,删除所有
。然后用空格分解字符串,最后使用
数组_chunk()将生成的数组拆分为更小的数组
.n/p-如果需要更多控制分词或过滤掉字符等,您可以使用
preg_split
替换
explode
,如果需要更多控制分词或过滤掉字符等。n/p-您可以使用
preg_split
替换
explode
,这是我的原创作品方法也一样。唯一的问题是
preg\u match\u all
的句子较短,
$wordCount
可能并不总是可以到达。因此,如果(!preg\u match\u all…{return$str;},您需要添加
这也是我最初的方法。唯一的问题是
preg\u match\u all
的句子较短,
$wordCount
可能并不总是可以到达。因此,如果(!preg\u match\u all…{return$str;}