2011-01-12 3 views
5

Mögliche Duplizieren:
php: sort and count instances of words in a given stringZähle Worthäufigkeit in einem Text?

Ich suche eine PHP-Funktion zu schreiben, die einen String als Eingabe verwendet, es in Worte spaltet und dann gibt ein Array von Wörtern durch die Häufigkeit sortiert des Auftretens jedes Wortes.

Was ist der algorithmisch effizienteste Weg, dies zu erreichen?

+0

ich erwarte, dass es auf der Größe des Textes abhängen würde. Auf jeden Fall gibt es Stapel von solchen Parsern, und die effizienteste Art der Programmierung besteht darin, sie wiederzuverwenden, anstatt sie selbst zu schreiben. Einfach googeln 'Wort Frequenzzähler php' – dnagirl

+0

Es hängt davon ab, was Sie mit 'Wort' auch, obwohl. Zählt "s" als ein Wort, wenn es ein Possessivmarker ist? Was ist, wenn es eine Kontraktion für "ist" ist? Wie wäre es mit anderen Kontraktionen? Wenn Sie in Splitting nur interessiert sind, bis ein Leerzeichen oder Bindestriche (wie T9 auf dem Telefon der Fall ist), dann sind Sie wahrscheinlich am besten dran mit der in Sachen gebaut wie Gordon unten vorgeschlagen. – Crisfole

+0

2 vorherige Fragen von StackOverflow zum selben Thema. Sollte nützlich sein. [Zählen Sie, wie oft das Wort im Text in PHP tritt] [1] [php: Art und Instanzen von Wörtern in einem String zählen] [2] [ 1]: http://stackoverflow.com/questions/2123236/count-how-often-the-word-occurs-in-the-text-in-php [2]: http://stackoverflow.com/ Fragen/2984786/php-sort-and-count-Instanzen von Wörtern in einer gegebenen Zeichenfolge – Paul

Antwort

22

Ihre beste Wette sind diese:

Beispiel

$words = 'A string with certain words occuring more often than other words.'; 
print_r(array_count_values(str_word_count($words, 1))); 

Ausgabe

Array 
(
    [A] => 1 
    [string] => 1 
    [with] => 1 
    [certain] => 1 
    [words] => 2 
    [occuring] => 1 
    [more] => 1 
    [often] => 1 
    [than] => 1 
    [other] => 1 
) 

CW-Kennzeichnung, weil Frage ein Duplikat von mindestens zwei anderen Fragen ist die gleiche Antwort enthalten