如何select一个句子的前10个单词?

我如何从输出中select前10个单词?

 implode(' ', array_slice(explode(' ', $sentence), 0, 10)); 

为了添加对逗号和破折号等其他分词符的支持, preg_match提供了一个快速的方法,不需要分割string:

 function get_words($sentence, $count = 10) { preg_match("/(?:\w+(?:\W+|$)){0,$count}/", $sentence, $matches); return $matches[0]; } 

正如Pebbl提到的,PHP不能很好地处理UTF-8或Unicode,所以如果这是一个问题,那么可以用[^\s,\.;\?\!]\W代替[\s,\.;\?\!]

如果在句子结构中存在意外的字符而不是空格,或者句子包含多个连接的空格,则简单地在空格上分割将会不正确地起作用。

下面的版本无论在单词之间使用什么样的“空格”,都可以工作,并且可以很容易地扩展为处理其他字符。它目前支持任何空格字符加。 ; ? !

 function get_snippet( $str, $wordCount = 10 ) { return implode( '', array_slice( preg_split( '/([\s,\.;\?\!]+)/', $str, $wordCount*2+1, PREG_SPLIT_DELIM_CAPTURE ), 0, $wordCount*2-1 ) ); } 

正则expression式对于这个问题是完美的,因为您可以轻松地使代码灵活或严格,只要你喜欢。 但是你必须小心。 针对词语之间的差距,而不是词语本身,我特别提出了上述的目标,因为要明确界定一个词的含义是相当困难的。

\w单词边界,或者\w的倒数。 我很less依赖这些,主要是因为 – 根据您使用的软件(如特定版本的PHP), 它们并不总是包含UTF-8或Unicode字符 。

在正则expression式中,最好是具体的,在任何时候。 所以你的expression式可以像下面这样处理,不pipe它们在哪里渲染:

 echo get_snippet('Это не те дроиды, которые вы ищете', 5); /// outputs: Это не те дроиды, которые 

就性能而言,避免分裂可能是值得的。 所以你可以使用Kelly的更新方法,但是对于[^\s,\.;\?\!]+切换\w[^\s,\.;\?\!]+\W 虽然,我个人喜欢上面使用的分裂expression的简单性,但它更易于阅读并因此而修改。 然而,PHP函数的堆栈有点难看:)

http://snipplr.com/view/8480/a-php-function-to-return-the-first-n-words-from-a-string/

 function shorten_string($string, $wordsreturned) { $retval = $string; // Just in case of a problem $array = explode(" ", $string); /* Already short enough, return the whole thing*/ if (count($array)<=$wordsreturned) { $retval = $string; } /* Need to chop of some words*/ else { array_splice($array, $wordsreturned); $retval = implode(" ", $array)." ..."; } return $retval; } 

我build议使用str_word_count

 <?php $str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit"; print_r(str_word_count($str, 1)); ?> 

上面的例子会输出:

 Array ( [0] => Lorem [1] => ipsum [2] => dolor [3] => sit [4] => amet [5] => consectetur [6] => adipiscing [7] => elit ) 

使用循环来获取你想要的单词。

资料来源: http : //php.net/str_word_count

要select给定文字的10个单词,您可以执行以下function:

 function first_words($text, $count=10) { $words = explode(' ', $text); $result = ''; for ($i = 0; $i < $count && isset($words[$i]); $i++) { $result .= $words[$i]; } return $result; } 

这可以很容易地使用str_word_count()

 $first10words = implode(' ', array_slice(str_word_count($sentence,1), 0, 10)); 

这可能会帮助你。 函数返回N号。 的话

 public function getNWordsFromString($text,$numberOfWords = 6) { if($text != null) { $textArray = explode(" ", $text); if(count($textArray) > $numberOfWords) { return implode(" ",array_slice($textArray, 0, $numberOfWords))."..."; } return $text; } return ""; } } 

这是完全是我们正在寻找只需将n粘贴到您的程序并跑。

 function shorten_string($string, $wordsreturned) /* Returns the first $wordsreturned out of $string. If string contains fewer words than $wordsreturned, the entire string is returned. */ { $retval = $string; // Just in case of a problem $array = explode(" ", $string); if (count($array)<=$wordsreturned) /* Already short enough, return the whole thing */ { $retval = $string; } else /* Need to chop of some words */ { array_splice($array, $wordsreturned); $retval = implode(" ", $array)." ..."; } return $retval; } 

只需要在代码块中调用该函数

 $data_itr = shorten_string($Itinerary,25); 

我这样做:

 function trim_by_words($string, $word_count = 10) { $string = explode(' ', $string); if (empty($string) == false) { $string = array_chunk($string, $word_count); $string = $string[0]; } $string = implode(' ', $string); return $string; } 

它的UTF8兼容…

这可能会帮助你。 函数返回10 no. of words no. of words

 function num_of_word($text,$numb) { $wordsArray = explode(" ", $text); $parts = array_chunk($wordsArray, $numb); $final = implode(" ", $parts[0]); if(isset($parts[1])) $final = $final." ..."; return $final; return; } echo num_of_word($text, 10); 

尝试这个

 $str = 'Lorem ipsum dolor sit amet,consectetur adipiscing elit. Mauris ornare luctus diam sit amet mollis.'; $arr = explode(" ", str_replace(",", ", ", $str)); for ($index = 0; $index < 10; $index++) { echo $arr[$index]. " "; } 

我知道这不是时候回答,而是让新来的人select自己的答案。

  function get_first_num_of_words($string, $num_of_words) { $string = preg_replace('/\s+/', ' ', trim($string)); $words = explode(" ", $string); // an array // if number of words you want to get is greater than number of words in the string if ($num_of_words > count($words)) { // then use number of words in the string $num_of_words = count($words); } $new_string = ""; for ($i = 0; $i < $num_of_words; $i++) { $new_string .= $words[$i] . " "; } return trim($new_string); } 

像这样使用它:

 echo get_first_num_of_words("Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid, illo?", 5); 

输出: Lorem ipsum dolor sit amet

这个函数也适用于像阿拉伯字符这样的Unicode字符。

 echo get_first_num_of_words("نموذج لنص عربي الغرض منه توضيح كيف يمكن استخلاص أول عدد معين من الكلمات الموجودة فى نص معين.", 100); 

输出: نموذج لنص عربي الغرض منه توضيح كيف يمكن استخلاص أول عدد معين من الكلمات الموجودة فى نص معين.

当我有一个内置的Wordpress函数的时候,我不明白为什么所有这些都是混乱的:

 <?= wp_trim_words(get_the_content(), 15, '...') ?> 

这与内容的前15个字(在正常循环内工作)相反,并添加了省略号。