11

近い将来、クロス言語の単語カウントを実装する必要があります。それが不可能な場合は、クロス言語の文字カウントを実装する必要があります。

単語数とは、テキストの言語を使用して、特定のテキストに含まれる単語の正確な数を意味します。テキストの言語はユーザーによって設定され、正しいと見なされます。

文字数とは、上記と同じ言語情報を使用して、特定のテキスト内に含まれる「単語の可能性がある」文字の数を意味します。

私は前者の数をはるかに好むが、それに伴う困難は承知している。また、後者の計算の方がはるかに簡単であることも認識していますが、可能であれば前者を非常に好みます。

英語だけを見ればよかったのですが、中国語、韓国語、英語、アラビア語、ヒンディー語など、すべての言語を考慮する必要があります。

私は良い怠惰なプログラマーなので、スタックオーバーフローがPHPでこれを行うための既存の製品/メソッドをどこから探し始めるかについて何か手がかりがあるかどうか知りたいです*

set_locale を使用した str_word_count が機能しないことを示す簡単なテストと、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 に答える
-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 に答える