PHP-dictionary-Klasse? oder alternative?
Im Grunde, was ich Suche, ist eine Art von Klasse oder Methode zu implementieren, die ein Wörterbuch in PHP.
Wenn ich mich zum Beispiel war der Bau eines word unscrambler - können sagen, ich verwendet die Buchstaben "a,e,l,p,p' -. Die Anzahl der Möglichkeiten der Anordnung ist riesig - wie kann ich nur diese anzeigen, die tatsächlichen Worte (Apfel, blass etc )?
Dank!
- Sind Sie sich der Tatsache bewusst, dass in PHP, irgendwelche assoziativen array ist in der Tat ein Wörterbuch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Klassisch-Wort-lookup-Probleme effizient gelöst werden können mit einem Trie.
Ich würde vorschlagen, die Suche nach einer word-Liste mit, sagen wir, von WordNet, speichern Sie es in einem Trie, und führen Sie dann schnell lookups der möglichen Wörter.
Eine Lösung wäre von der form:
versuchen Permutationen i=1..N
ein. lookup permutation, die ich mit dem trie
b. wenn es ein positives Ergebnis, speichern Sie diese für die Anzeige
c. iterate (i++)
wiederholen von 3.
edit:
Einer Seite beachten Sie hier, dass für alle N Länge Zeichen Wort, es könnte sein, N! benötigte Suchvorgänge (für 7 Zeichen, wäre 5040). Sollten Sie in Erwägung ziehen, einige Optimierungen an der trie-lookup-Algorithmus. Zum Beispiel, Sie gewinnen erhebliche Effizienz durch den Ausschluss ungültig Teilstrings zu früh und nicht zu wiederholen, Ende Permutationen.
z.B. das Wort apple, wenn Sie hatte die Mutation, bei der Sie ausgewählte "ppl" als die ersten drei Zeichen, kein Wort wird gefunden werden. Also, egal wie Sie permutiert das a und das e am Ende kann man nicht konstruieren, ein Wort. Die vorzeitige Beendigung von Permutationen kann wichtig sein, dass Ihr Algorithmus die Effizienz.
Ah, und die andere Antwort:
Wenn Sie nur wollen, um alle realen Wörter - suchen Sie dann ein großes Wörterbuch. dann speichern Sie es in der Art von:
Wort | hash
wo word word selbst-und hash-alphabetisch sortiert, Buchstaben:
für apple-Hashwert: aelpp oder aelp2
dann für gegeben, Buchstaben Durchlaufen alle Kombinationen mit dem gleichen Algorithmus für das hashing und durchsuchen diese Tabelle.
können Sie auch prüfen, pspell
http://php.net/manual/en/book.pspell.php
Speichern Sie eine Liste von Wörtern in einer Datei oder einer Datenbank, und dann einfach versuchen, alle Kombinationen. Sie könnte auch prüfen, die wahrscheinliche position der Vokale vs. Konsonanten potenziell beschleunigen. Anstatt dass Sie Ihre eigenen Wort-Liste, könnten Sie so etwas wie WordNet.
Eigentlich mag ich zerkms Lösung besser, aber hier ist noch eins
erstellen 2 Tabellen
Wenn Sie ein Wort hinzufügen zu den Worten, Tabelle, müssen Sie einen Eintrag in der letter_index für jeden einzelnen Brief. letter_index hat einen primär-Schlüssel basierend auf den Brief und die word_id.
Worte zu finden, bestehend aus einer Gruppe von Buchstaben, die Sie erstellen eine Abfrage so etwas wie:
oder Sie können die developer.dictionary.com api und nur ein Wort-lookup für die Validierung. können auch Zauber überprüft.