PHP - Gleiche Woerter finden und auflisten

son gohan

Erfahrenes Mitglied
Hallo,

ich habe mal eine Frage, weis jemand ob es moeglich ist mit PHP eine Seite die ueber 133.000 Woerter beinhaltet durch zu suchen und alle Worter die mehr als einmal vorkommen irgendwo zu speichern oder auf zu schreiben, sodass ich am Ende alle Worter die mehr als einmal oder auch nur einmal in der Seite vorkommen rausgefiltert habe.

Ich vermuete beispielweise das in dem Text auf der Seite von den 133.000 Wortern vielleicht nur 1000 einzelne Worter existieren und die halt oefter vorkommen und das will ich rausfiltern um genau zu sehen welche einzelnen Woerter es gibt.

Ich will naemlich eine Seite von einer Sprache in die andere Uebersetzen und mir so die Arbeit etwas erleichtern indem ich mir fuer jedes Wort das dort vorkommt eine Uebersetzung bereitstelle. Deswegen will ich vorher erst einmal herausfinden, welche Woerter es im Text gibt.
 
Das mit der Übersetzung wird so nicht funktionieren --> Zusammenhang/Kontext!
Ansonsten: http://stackoverflow.com/questions/2123236/count-how-often-the-word-occurs-in-the-text-in-php

Danke fuer den Beispielink, muss man dort fuer jedes moegliche Wort ein Array bilden oder wie funktioniert das?

ich will ja nicht vorher eine Liste mit allen moeglichen Woertern bilden, sondern das Programm soll so eine Liste machen und herausfinden welche einzelnen Woeter im gesamten Text vorhanden sind.
 
Was verstehst du unter "einer Seite", ist es eine Seite im Netz?

Dann wird auch das Problem sein das bei den Wörtern der komplette HTML-Code mit ausgewertet wird.

Ansonsten kannst du den kompletten Text in eine Variable einlesen und dann die einzelnen Wörter mit Hilfe von explode trennen. Es müssen natürlich da vorher auch alle Satzzeichen (Punkt, Komma, Ausrufezeichen, ...) vorher gelöscht werden.

Ob das der richtige Weg ist, hängt meiner Meinung nach in erster Linie davon ab ob eben HTML-Code vorkommt oder nicht.
 
*Alles in einen String einlesen
*Splitten an Leerzeichen und Zeilenwechseln in ein Array aus vorhandenen Worten
*Satzzeichen etc. aus den Worten entfernen
*Leere Arrayeinträge weg.
*Array sortieren (fertige Funktionen gibts genug)
*Von vorn bis hinten durchschleifen. Alles wo mehrere gleiche hintereinander sind ist gesucht.
 
Was verstehst du unter "einer Seite", ist es eine Seite im Netz?

Dann wird auch das Problem sein das bei den Wörtern der komplette HTML-Code mit ausgewertet wird.

Ansonsten kannst du den kompletten Text in eine Variable einlesen und dann die einzelnen Wörter mit Hilfe von explode trennen. Es müssen natürlich da vorher auch alle Satzzeichen (Punkt, Komma, Ausrufezeichen, ...) vorher gelöscht werden.

Ob das der richtige Weg ist, hängt meiner Meinung nach in erster Linie davon ab ob eben HTML-Code vorkommt oder nicht.


ich habe den Text in einer Worddatei. danke fuer das beispiel, die funktion exploade sieht so aus als ob die das kann. ich kann halt nur nicht vorher schon eine liste machen welche moeglichen woeter drine stehen, sondern das programm muss mir diese woeter raussuchen aus dem text.
 
Wenn du den Inhalt der Datei mit explode in einzelne Wörter aufteilst (und natürlich die Satzzeichen entfernst), dann bekommst du ein Array mit den "Treffern".

Dieses Array kannst du mit array_count_values auslesen und ermitteln welches Wort wie oft darin enthalten ist.

Nachtrag: Hier noch ein kleines Beispiel.

PHP:
<?php
$text = "Lorem ipsum dolor sit amet, consectetur adipisici elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";

$array1 = explode(" ", $text);

$del = array(".", ",", "!", "?", ":", ";");

$array2 = str_replace($del, "", $array1);

$anzahl = array_count_values($array2);

var_dump($anzahl);

?>
 
Zuletzt bearbeitet:
Wobei man da den Speicherverbrauch im Auge behalten sollte. 133000 Wörter mit einer durchschnittlichen Länge von 10,6 Buchstaben, da sind wir schon bei 1.409.800 nur für die eingelesenen Wörter. Da kommen noch Array-Indizes, temporäre Variablen, der Code und die interne Speicher-Verwaltung dazu. Setze also das Memory-Limit hoch oder optimiere den Code entsprechend.
 
@tombe:
danke das sieht doch perfekt aus.

@saftmeister:
wenn es nicht direkt klappt werden ich den text dann etwas aufteilen, aber ich muss das auch nur offline auf mein pc machen und nicht ueber ein webserver oder so laufen lassen.

edit @tombe:
Hallo,

ich habe heute einige Test gemacht, aber irgendetwas mache ich noch falsch, ich habe folgenden Code im Moment, das Wort "and" steht mehrmals im Text und ich wollte eigentlich das PHP mir ein Array zurueck gibt mit einzelnen uniquen Woetern

PHP:
 <?php
$text = "
and he and i and he and i and we and he
";

$array1 = explode(" ", $text);

$del = array(".", ",", "!", "?", ":", ";");

$array2 = str_replace($del, "", $array1);

/*
$anzahl = array_count_values($array2);
var_dump($anzahl);
*/


$result = array_unique($array2);
var_dump($result);
?>

Ich habe gedacht mit der PHP Funktion array_unique() bekommt man ein Array mit einzelnen uniquen Woertern zurueck, in meinem Beispiel Text ist das Wort "and" ja extra mehrmals drine geschrieben aber das Array das ich mit array_unique() zurueck bekomme hat auch mehrmals das Wort "and" noch mit drine, kann mir jemand hier einmal helfen und sagen wie ich das richtig machen muss?
 
Warum es klappt doch so wie es soll. Der Grund warum du bei dieser Schreibweise "and" quasi zweimal bekommst ist das beim ersten Mal der Zeilenumbruch mit dabei ist.

Schreib es mal so:

PHP:
$text = "and he and i and he and i and we and he";

und du wirst den Unterschied feststellen.

Die Funktion array_unique gibt dir aber nicht die Wörter zurück die nur einmal vorhanden sind, sondern es entfernt alle doppelten Einträge aus dem Array!
 

Neue Beiträge

Zurück