2010-05-29 18 views
10

En algún momento, en un futuro cercano, tendré que implementar un recuento de palabras entre idiomas, o si eso no es posible, un recuento de caracteres en varios idiomas.Una biblioteca/clase PHP para contar palabras en varios idiomas?

Por conteo de palabras me refiero a un conteo exacto de las palabras contenidas dentro del texto dado, tomando el idioma del texto. El idioma del texto lo establece un usuario y se asumirá que es correcto.

Por número de caracteres quiero decir un recuento de los caracteres "posiblemente en una palabra" contenidos en el texto dado, con la misma información de idioma descrita anteriormente.

Preferiría mucho el recuento anterior, pero soy consciente de las dificultades involucradas. También soy consciente de que la última cuenta es mucho más fácil, pero prefiero mucho la anterior, si es posible.

Me encantaría si tuviera que mirar inglés, pero necesito considerar todos los idiomas aquí, chino, coreano, inglés, árabe, hindi, etc.

me gustaría saber si el desbordamiento de pila tiene ninguna pista sobre dónde empezar a buscar un producto/método existente para hacer esto en PHP, ya que soy un buen programador perezoso *

A simple test que muestra cómo str_word_count con set_locale no funciona, y una función de la página str_word_count de php.net.

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

+2

CJK va a ser el más difícil, ya que no utilizan espacios para separar las palabras. – Turnor

+0

observación astuta. Esta es la razón por la que publiqué mi pregunta aquí;) –

+2

Esta fue la pregunta que hice anteriormente como respuesta: ¿Podría ser más específico a qué se refiere con "recuento de palabras"? ¿Desea verificar que una palabra realmente existe en el diccionario de ese idioma, o simplemente busca un recuento de frases separadas por los delimitadores de ese idioma? – Grantismo

Respuesta

5

caracteres Contar es fácil:

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

palabras de contar es donde las cosas se ponen difíciles, especialmente para chinos, japoneses y otros idiomas que no usan espacios (u otros caracteres comunes de "límite de palabras") como separadores de palabras. No hablo chino y no entiendo cómo funciona el conteo de palabras en chino, así que tendrás que educarme un poco: ¿qué hace una palabra en estos idiomas? ¿Es algún char o conjunto de caracteres? Recuerdo haber leído algo relacionado con lo difícil que era identificar palabras japonesas en la escritura T9, pero ya no puedo encontrarlas.

Lo que sigue debe devolver correctamente el número de palabras en idiomas que utilizan espacios o caracteres de puntuación como separadores de palabras:

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

japanese_1000_lorem.docx contó 29 palabras en lugar de 1000 Tengo un $ string = preg_replace ('# \ {{. *? \}}} # S', "", $ string); antes de la función de recuento – ddjikic

+2

'.docx' debe ser un archivo binario, por lo que probablemente necesite utilizar un analizador de documentos de Word o un archivo de texto sin formato si desea hacerlo. – Xeoncross

-1

Bueno, trate de:

<? 
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

Desafortunadamente no funciona en China. – deceze

+1

Soy de Portugal, son las 6 de la mañana aquí ... Dormí todavía ... pero después de que puedo adaptarlo al chino y en cualquier idioma ... :) – Zuul

+1

Chino, coreano, japonés (...) don ' t uso "". –

Cuestiones relacionadas