3
<?php 
$utf8_string = 'مع السلامة مع السلامة مع السلامة مع السلامة مع السلامة مع السلامة مع السلامة السلامة الرائعة على الطويلة ';
echo $utf8_string;
echo'<br/><br/>';

$patterns = array("على", "مع");
$replacements   = array("", "");

$r_string = str_replace($patterns, $replacements, $utf8_string);

//echo $r_string;
print_r ($r_string);
echo'<br/>';
//$words = preg_split( "/ ( |مع|على) /",$r_string);
$words = explode(" ",$r_string);

$num = count($words);
echo 'There are <strong>'.$num.'</strong> words.';
?>

我有这段代码来计算阿拉伯语句子中的单词数。但是我想删除一些单词并计算其余的单词。我尝试使用 str_replace,但这种方式是计算原始句子的单词数。谁能帮我?

4

3 回答 3

4

你可以使用:

$num = count(
    explode(
        " ", 
        str_replace(
            $word, //Word you want to remove from your text.
            "",
            $string //String you want the word to be removed from.
        )
    )
);

甚至:

$num = count(
    explode(
        " ", 
        str_replace(
            array("word1", "word2", [...]), //Words you want to remove from your text.
            "",
            $string //String you want the word to be removed from.
        )
    )
);

编辑:正如所指出的,上述方法不起作用。我试图查明错误在哪里,但显然str_replace无法处理阿拉伯字符,即使explode可以。PHP 对于非 ascii 字符不可靠。

或者,您可以做的是:

$num = Count(explode(" ", $utf8_string)) - Count(array_intersect(explode(" ", $utf8_string), $patterns))

它应该返回你想要的值。

您也可以尝试编写自己的字符串替换函数,但我建议您不要这样做,因为您必须手动循环遍历数组并比较每个单词。这样做应该需要更长的时间才能运行,并使其更加冗长。


来这里警告你们,处理这个问题的正确方法是使用mbstring扩展名(http://php.net/manual/en/book.mbstring.php)。请使用此扩展程序,不要使用上面的丑陋黑客/解决方法。

于 2012-11-30T13:11:58.440 回答
1

您需要在删除一些单词之后和使用爆炸计算空格之前“删除重复的空格”。字符串前后的空格需要修剪(或类似的正则表达式)

    $r_string = trim(preg_replace('/\s+/u',' ',$r_string));
于 2012-11-30T13:15:19.790 回答
0

利用$num = str_word_count($r_string);

代替$num = count($words);

于 2012-11-30T13:21:52.110 回答