PHP字数与Word计数器的近似结果

时间:2013-12-17 16:11:54

标签: php regex

我正在编写一个小型网络应用程序来管理外部作家的文本,实际上整个事情很棒,但我遇到了一个小问题。它与单词counter相关。

作者将根据文本中的单词数付费,文本中包含html标签。但问题是使用了德语字符(Ä,Ö,Ü,ß)

所以在第一个位置我删除了标签

    $content = strip_tags($content);

然后我用简单的空格替换新的线条和标签

    $replace   = array("\r\n", "\n", "\r", "\t");
    $content = str_replace($replace, ' ', $content);

最后我试着获得单词数

方法1:

    $characterMap = 'ÄÖÜäöü߀';
    $count = str_word_count($content, 0, $characterMap);

方法2:

    $to_delete = array('.', ',', ';', "'", '@');
    $content = str_replace($to_delete, '', $content);

    $count = count(preg_split('~[^\p{L}\p{N}\']+~u',$content));

但结果与Word中的结果或CKEditor插件word_count的结果不同。

例如,对于示例文本

Word和CkEditor字数统计987字

方法1:968字

方法2:995字

问题是第二种方法只是 - 单词的分隔符,但我的问题是,是否有更好的方法来查找php中文本中的单词数量?

3 个答案:

答案 0 :(得分:1)

首先,您可以将两个替换语句合并为一个 - 单词计数将忽略双倍空格。其次,我不确定你的正则表达式的目标是什么,但它看起来很奇怪。

你应该能够做到这一点:

$content = strip_tags($content);
$replace = array("\r\n", "\n", "\r", "\t", '.', ',', ';', "'", '@');
$content = str_replace($replace, ' ', $content);
$count = str_word_count($content, 0, $characterMap);

答案 1 :(得分:0)

您可以尝试查看str_word_count,看看它是否与您当前的解决方案相匹配。

http://php.net/manual/en/function.str-word-count.php

使用的一个例子是

$Tag  = 'My Name is Gaurav'; 
$word = str_word_count($Tags);
echo $word;

答案 2 :(得分:0)

这可能会为方法2提供更好的近似值:

 $string = "He€.llo, ho-w€d9   €   are you? fi€ne ÄÖÜäöü߀, and 'ÄÖÜäöü߀ you?";
 $words = preg_split
     ( '/[^\p{L}\p{N}]*\p{Z}[^\p{L}\p{N}]*/u',
         $string
     );
 print( "count = " . count($words) .  "\n\n" );
 print_r($words);