2010-05-29 17 views
10

Quelque temps dans un proche avenir, je devrai mettre en œuvre un compte de mots inter-langues, ou si ce n'est pas possible, un nombre de caractères inter-langue. Par nombre de mots, je veux dire un compte précis des mots contenus dans le texte donné, en prenant la langue du texte. La langue du texte est définie par un utilisateur et sera supposée correcte. Par comptage de caractères, on entend un comptage des caractères "éventuellement dans un mot" contenus dans le texte donné, avec les mêmes informations de langage décrites ci-dessus.Une bibliothèque/classe PHP pour compter les mots dans différentes langues?

Je préférerais beaucoup le premier compte, mais je suis conscient des difficultés que cela implique. Je suis également conscient que ce dernier compte est beaucoup plus facile, mais préfère beaucoup le premier, si possible. Je voudrais si je devais regarder l'anglais, mais j'ai besoin de considérer toutes les langues ici, chinois, coréen, anglais, arabe, hindi, et ainsi de suite.

Je voudrais savoir si le débordement de pile a des pistes sur l'endroit où commencer à chercher un produit existant/méthode pour le faire en PHP, comme je suis un bon programmeur paresseux *

A simple test montrant comment str_word_count avec set_locale ne fonctionne pas, et une fonction de la page str_word_count de php.net.

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

+2

CJK vont être la plus délicate, car ils n'utilisent pas des espaces pour séparer les mots. – Turnor

+0

Observation astucieuse. C'est la raison pour laquelle j'ai posté ma question ici;) –

+2

C'est la question que j'ai posée précédemment comme réponse: Pourriez-vous être plus précis de ce que vous entendez par "compte de mots"? Voulez-vous vérifier qu'un mot existe réellement dans le dictionnaire de cette langue, ou recherchez-vous simplement un nombre de phrases séparées par les délimiteurs de cette langue? – Grantismo

Répondre

5

caractères de comptage est facile:

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

Compter mots est l'endroit où les choses commencent à se compliquer, spécialement pour le chinois, le japonais et d'autres les langues qui n'utilisent pas d'espaces (ou d'autres caractères communs de «limite de mot») comme séparateurs de mots. Je ne parle pas le chinois et je ne comprends pas comment le comptage de mots fonctionne en chinois, donc vous devrez m'éduquer un peu - qu'est-ce qui fait un mot dans ces langues? Est-ce un char ou un jeu de caractères spécifique? Je me souviens d'avoir lu quelque chose à propos de la difficulté d'identifier les mots japonais dans l'écriture T9 mais je n'arrive plus à les trouver.

Les éléments suivants doivent correctement retourner le nombre de mots dans les langues qui utilisent des espaces ou des caractères de ponctuation comme séparateurs de mots:

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

japanese_1000_lorem.docx a compté 29 mots au lieu de 1000 J'ai un $ string = preg_replace ('# \ {{{. *? \}}} # S', "", $ string); Avant la fonction de comptage – ddjikic

+2

'.docx' devrait être un fichier binaire - vous aurez donc probablement besoin d'utiliser un analyseur de document Word ou un fichier texte brut si vous voulez faire cela. – Xeoncross

-1

Eh bien, essayez:

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

Ne fonctionne pas du tout pour le chinois malheureusement. – deceze

+1

Je viens du Portugal, il est 6h ici ... J'ai encore dormi ... mais après je peux l'adapter au chinois et quelle que soit la langue ... :) – Zuul

+1

Chinois, Coréen, Japonais (...) don ' t utiliser "". –