web-dev-qa-db-ja.com

文の最初の10語を選択する方法は?

出力から最初の10ワードのみを選択するにはどうすればよいですか?

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

カンマやダッシュなどの他のWordブレークのサポートを追加するには、preg_matchは簡単な方法を提供し、文字列を分割する必要はありません。

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

Pebblが言及しているように、PHPはUTF-8またはUnicodeをそれほど適切に処理しないため、それが懸念される場合は、\w ために [^\s,\.;\?\!]および\W ために [\s,\.;\?\!]

124
Kelly

文構造内のスペースの代わりに予期しない文字がある場合、または文に結合されたスペースが複数含まれている場合、スペースでの単純な分割は正しく機能しません。

次のバージョンは、単語間に使用する「スペース」の種類に関係なく機能し、他の文字を処理するために簡単に拡張できます。現在、任意の空白文字plusをサポートしています。 ; ? !

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
    )
  );
}

正規表現はこの問題に最適です。なぜなら、コードを好きなだけ柔軟または厳格に簡単に作成できるからです。ただし、注意する必要があります。言葉を定義するものを明確に述べることはかなり難しいため、言葉そのものではなく、言葉の間のギャップをターゲットに上記に具体的にアプローチしました。

\wワード境界、またはその逆\Wを使用します。主に—使用しているソフトウェア(PHPの特定のバージョンなど)に応じて— 常にUTF-8またはUnicode文字が含まれるわけではありません のため、これらにほとんど依存しません。

正規表現では、常に特定である方が良いです。そのため、式はどこでレンダリングされても、次のようなものを処理できます。

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

/// outputs: Это не те дроиды, которые

ただし、パフォーマンスの観点からは、分割を避ける価値があります。したがって、ケリーの最新のアプローチを使用できますが、\w[^\s,\.;\?\!]+に、\W[\s,\.;\?\!]+に切り替えます。個人的には、上で使用した分割式の単純さが好きですが、読みやすく、したがって変更が簡単です。 PHP関数のスタックですが、少しいです:)

52
Pebbl

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;
}
7
Spyros

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

3
jawira

これは、str_Word_count()を使用して簡単に実行できます。

$first10words = implode(' ', array_slice(str_Word_count($sentence,1), 0, 10));
2
Rowlingso

特定のテキストの10ワードを選択するには、次の機能を実装できます。

function first_words($text, $count=10)
{
    $words = explode(' ', $text);

    $result = '';
    for ($i = 0; $i < $count && isset($words[$i]); $i++) {
        $result .= $words[$i];
    }

    return $result;
}
2
Milad

これはあなたを助けるかもしれません。 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 "";
    }
}
1
Ankur Rastogi

これを試して

$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]. " ";
}

私はこれが答える時ではないことを知っていますが、新しい来訪者に彼ら自身の答えを選ばせてください。

1
saleem ahmed
    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

この関数は、アラビア文字のようなユニコード文字でも非常にうまく機能します。

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

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

0
Amr

完全に私たちが探しているのは、プログラムに貼り付けて実行するだけです。

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);
0
Rizwan Gill

これはあなたを助けるかもしれません。返す関数1no. 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);
0
rowmoin

私はこのようにします:

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互換...

0
Vaci