Çeşitli Diller Kelime Sayımı bir PHP Library / Sınıf?

2 Cevap php

Yakın gelecekte bazı zaman ben bir çapraz dil kelime sayısını uygulamak gerekiyor, ya da bu mümkün değilse, çapraz dil karakter sayısı olacaktır.

Kelime sayısı ile ben metnin dilini alarak, verilen metin içinde bulunan kelimelerin doğru bir sayım demek. Metnin dil kullanıcı tarafından ayarlanır, ve doğru olduğu kabul edilecektir.

Karakter sayısı yukarıda açıklanan aynı dil bilgi ile verilen metin içinde yer alan "muhtemelen bir kelime" karakter sayımını anlamına gelir.

Ben çok eski sayısı tercih ediyorum, ama ben dahil zorlukların farkındayım. Ben de ikinci sayısı çok daha kolay olduğunun farkındayım, ama eğer çok mümkünse, eski tercih.

Ben sadece İngilizce bakmak olsaydı bunu isterdim, ama ben her burada dili, Çince, Korece, İngilizce, Arapça, Hintçe, ve dikkate almak gerekir.

Ben * yığın taşması Ben iyi bir tembel programcı olduğum gibi, PHP bunu yapmak için varolan bir ürün / yöntem için aramaya başlamak için nerede herhangi bir yol olup olmadığını bilmek istiyorum

A simple test set_locale ile str_word_count çalışmıyor nasıl gösteren ve php.net 'in str_word_count sayfasından bir işlev.

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

2 Cevap

Karakter sayma kolaydır:

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

Şeyler zor olsun başlar nerede kelimeleri sayma özel sözcük ayırıcı olarak boşluk (ya da diğer ortak "kelimesi sınır" karakterleri) kullanmayın, Çin, Japon ve diğer diller için vardır. Ben Çince konuşan yok ve ben kelime sayma Çince nasıl çalıştığını anlamıyorum, bu yüzden bana biraz eğitmek gerekecek - ne bu dilde bir kelime yapar? Herhangi bir özel karakter veya karakter kümesi mi? Ben T9 yazılı Japon kelimeleri tespit etmek ama artık bulamıyorum ne kadar zor ilgili bir şey okuduğumu hatırlıyorum.

Aşağıdaki doğru sözler ayırıcı olarak boşluk veya noktalama karakter kullanmaya dilde kelimelerin sayısını döndürmek gerekir:

count(preg_split('~[\p{Z}\p{P}]+~u', $string, null, PREG_SPLIT_NO_EMPTY));

Eh, deneyin:

<?
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.');
 ?>