2010-04-29 16 views

Respuesta

0

usando una lista negra de palabras no deben incluirse

$str = 'will see you in London tomorrow and Kent the day after tomorrow'; 
$skip_words = array('in', 'the', 'will', 'see', 'and', 'day', 'you', 'after'); 
// get words in sentence that aren't to be skipped and count their values 
$words = array_count_values(array_diff(explode(' ', $str), $skip_words)); 

print_r($words); 
7

yo diría que usted podría:

  • dividir la cadena en una matriz de palabras
    • con explode
    • o preg_split
    • dependiendo de la complejidad que aceptará por sus palabras separadores
  • us e array_filte r para mantener solo las líneas (es decirpalabras) que desea
    • la función de devolución de llamada tendrá que devolver false para todos los no válidos Palabras
  • y, a continuación, utilizar array_count_values en la lista resultante de las palabras
    • cuales contarán cuántas veces cada palabras está presente en la matriz de palabras



EDIT: y, sólo por diversión, aquí está un ejemplo rápido:

En primer lugar, la cadena, que consigue explotó en palabras:

$str = "will see you in London tomorrow and Kent the day after tomorrow"; 
$words = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY); 
var_dump($words); 

que te lleva :

array 
    0 => string 'will' (length=4) 
    1 => string 'see' (length=3) 
    2 => string 'you' (length=3) 
    3 => string 'in' (length=2) 
    4 => string 'London' (length=6) 
    5 => string 'tomorrow' (length=8) 
    6 => string 'and' (length=3) 
    7 => string 'Kent' (length=4) 
    8 => string 'the' (length=3) 
    9 => string 'day' (length=3) 
    10 => string 'after' (length=5) 
    11 => string 'tomorrow' (length=8) 


A continuación, el filteting:

function filter_words($word) { 
    // a pretty simple filter ^^ 
    if (strlen($word) >= 5) { 
     return true; 
    } else { 
     return false; 
    } 
} 
$words_filtered = array_filter($words, 'filter_words'); 
var_dump($words_filtered); 

que da salida:

array 
    4 => string 'London' (length=6) 
    5 => string 'tomorrow' (length=8) 
    10 => string 'after' (length=5) 
    11 => string 'tomorrow' (length=8) 


Y, por último, el conteo:

$counts = array_count_values($words_filtered); 
var_dump($counts); 

Y el resultado final:

array 
    'London' => int 1 
    'tomorrow' => int 2 
    'after' => int 1 


Ahora, depende de usted para construir a partir de aquí ;-)
Principalmente, usted tiene que trabajar en:

  • Una mejor función de la explosión, que se ocupa de ponctuation (o hacer frente a que durante filtrado)
  • Una función de filtrado "inteligente", que se adapte a sus necesidades mejor que la mía

divertirse!

+0

ayunar para mí. recogió de nuevo. – dnagirl

+0

'str_word_count' también podría ser interesante: http://www.php.net/manual/en/function.str-word-count.php –

+0

Gracias que funciona. ¿es posible obtener el resultado final sin el "int"? es decirsolo el número en sí mismo – Steven

1

Puede tener una tabla de palabras comunes, luego examinar su cadena una palabra a la vez, verificando si existe en la tabla, si no, luego agréguelo a su matriz asociativa, o +1 a ella si ya existe.

Cuestiones relacionadas