11

在不久的将来的某个时候,我将需要实现跨语言字数统计,或者如果这不可能,跨语言字符数统计。

字数是指对给定文本中包含的单词的准确计数,采用文本的语言。文本的语言由用户设置,并将被假定为正确的。

字符计数是指给定文本中包含的“可能在一个单词中”字符的计数,具有上述相同的语言信息。

我更喜欢前者,但我知道所涉及的困难。我也知道后者的计数要容易得多,但如果可能的话,我更喜欢前者。

如果我只需要看英语,我会很高兴,但我需要考虑这里的每一种语言,中文、韩语、英语、阿拉伯语、印地语等等。

我想知道 Stack Overflow 是否有关于从哪里开始寻找现有产品/方法以在 PHP 中执行此操作的任何线索,因为我是一个优秀的懒惰程序员*

一个简单的测试显示 str_word_count 与 set_locale 如何不起作用,以及 php.net 的 str_word_count 页面中的一个函数。

* http://blogoscoped.com/archive/2005-08-24-n14.html

4

3 回答 3

8

计算字符很容易:

echo strlen('一个有十的字符的句子'); // 30 (WRONG!)
echo strlen(utf8_decode('一个有十的字符的句子')); // 10

计数单词是事情开始变得棘手的地方,特别是对于不使用空格(或其他常见的“单词边界”字符)作为单词分隔符的中文、日语和其他语言。我不会说中文,也不明白中文的字数统计是如何工作的,所以你必须教育我一点——这些语言中的单词是什么?它是任何特定的字符或字符集吗?我记得读过一些与在 T9 写作中识别日语单词有多难有关的东西,但现在找不到了。

以下应正确返回使用空格或标点字符作为单词分隔符的语言中的单词数:

count(preg_split('~[\p{Z}\p{P}]+~u', $string, null, PREG_SPLIT_NO_EMPTY));
于 2010-06-16T21:04:30.040 回答
0

如果您只想要近似而不是精确的单词,那么一个快速技巧是

<?php echo count(explode(' ',$string)); ?>

它通过计算任何语言的空格来工作。我已将其用于翻译脚本。同样,它不会计算确切的单词,而是在段落中给出近似的单词。

于 2019-07-22T02:21:48.460 回答
-1

我们会尽力的:

<?
function count_words($str){
     $words = 0;
     $str = eregi_replace(" +", " ", $str);
     $array = explode(" ", $str);
     for($i=0;$i < count($array);$i++)
      {
         if (eregi("[0-9A-Za-zÀ-ÖØ-öø-ÿ]", $array[$i]))
             $words++;
     }
     return $words;
 }
 echo count_words('This is the second one , it will count wrong as well" , it will count 12 instead of 11 because the comma is counted too.');
 ?>
于 2010-05-30T04:56:42.630 回答