11
votes

Une bibliothèque / classe PHP pour compter les mots dans diverses langues?

Un peu de temps dans un avenir proche, je devrai mettre en œuvre un nombre de mots de langue croisée, ou si cela n'est pas possible, un nombre de caractères transversal.

Par mot Nombre Je veux dire un nombre 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 être correcte.

Par le nombre de caractères, je veux dire un nombre de caractères "éventuellement dans un mot" contenant dans le texte donné, avec les mêmes informations sur la langue décrites ci-dessus.

Je préférerais de loin l'ancien chef, mais je suis au courant des difficultés rencontrées. Je suis également conscient que ce dernier compte est beaucoup plus facile, mais préfère beaucoup les premiers, voire du tout possible.

J'adorerais que je devais juste regarder l'anglais, mais je dois envisager chaque langue ici, chinoise, coréenne, anglais, arabe, hindi, etc.

J'aimerais savoir si le débordement de la pile a des amortissements sur où commencer à chercher un produit / méthode existant pour le faire en PHP, car je suis un bon programmateur paresseux *

Un test simple montrant comment Str_Word_Count avec SET_LOCALE ne fonctionne pas et une fonction de php.net's str_Word_Count Page.

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


3 commentaires

CJK va être le plus difficile, car ils n'utilisent pas d'espaces pour séparer les mots.


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


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


3 Réponses :


-1
votes

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 commentaires

Je viens du Portugal, c'est 6h de 6h ... j'ai déjà dormi ... mais après je peux l'adapter au chinois et quelle langue ... :)


Chinois, coréen, japonais (...) n'utilise pas "".



8
votes

Compter les caractères est facile:

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


2 commentaires

japonais_1000_lorem.docx compté 29 mots au lieu de 1000 j'ai une chaîne $ = Preg_replace ('# \ {{{{. *? \}}} # S', "", $ string); Avant la fonction de comptage


.docx doit être un fichier binaire - vous devez donc probablement utiliser un analyseur Word Doc ou un fichier texte brut si vous voulez le faire.



0
votes

Trick Quick Si vous voulez seulement que les mots approximatifs et non exacts sont

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


0 commentaires