Hellow Stack Überlauf Menschen. Ich hätte gerne Vorschläge zum folgenden Problem. Ich benutze Java.Passende Teilstrings von einem Wörterbuch zu anderen String: Vorschläge?
Ich habe ein Array # 1 mit einer Reihe von Strings. Zum Beispiel könnten zwei der Saiten sein: "Ein Apfel fiel auf Newtons Kopf" und "Äpfel wachsen auf Bäumen".
Auf der anderen Seite habe ich ein anderes Array # 2 mit Begriffen wie (Früchte => Apfel, Orange, Pfirsich; Items => Stift, Buch; ...). Ich würde dieses Array mein "Wörterbuch" nennen.
Durch den Vergleich von Elementen von einem Array zum anderen muss ich sehen, in welche "Kategorie" die Elemente von # 1 aus # 2 fallen. Z.B. Beide von # 1 würden unter "Früchte" fallen.
Meine wichtigste Überlegung ist die Geschwindigkeit. Ich muss diese Operationen schnell erledigen. Eine Struktur, die eine konstante Zeitabfrage ermöglicht, wäre gut.
Ich betrachtete ein Hashset mit der contains() -Methode, aber es erlaubt keine Teilstrings. Ich habe auch versucht Regex wie (Apfel | Orange | Pfirsich | ... etc) mit Groß-und Kleinschreibung beachten Flag, aber ich lese, dass es nicht schnell sein wird, wenn die Begriffe in der Anzahl (mindestens 200 zu erwarten) zu erhöhen. Schließlich habe ich gesucht und erwäge, eine ArrayList mit indexOf() zu verwenden, aber ich weiß nicht über seine Leistung. Ich muss auch wissen, welche der Begriffe tatsächlich übereinstimmen, also wäre es in diesem Fall "Apple".
Bitte geben Sie Ihre Ansichten, Ideen und Vorschläge zu diesem Problem.
Ich sah Aho-Corasick-Algorithmus, aber die Schlüsselwörter/Begriffe werden sich sehr wahrscheinlich oft ändern. Also ich glaube nicht, dass ich das benutzen kann. Oh, ich bin kein Experte in Text Mining und Mathe, also bitte erarbeiten Sie komplexe Konzepte.
Vielen Dank, Stack Overflow Menschen, für Ihre Zeit! :)
Ich habe den Suffix-Baum überprüft. Es ähnelt der Triestruktur, die Aho-Corasick algo verwendet. Meine Sorge ist, dass ich viele verschiedene Kategorien und viele Begriffe pro Kategorie habe. Einen Baum für jede Kategorie zu bauen scheint für mich ineffizient zu sein. Danke MattK! –
Eigentlich glaube ich nicht, dass Sie für jede Kategorie einen Baum erstellen müssen. Sie sollten in der Lage sein, mehrere Zeichenfolgen in eine einzelne Suffixstruktur einzufügen und einen Verweis auf ein Kategorienobjekt am Abschlusspunkt in der Struktur jeder gültigen Zeichenfolge hinzuzufügen. – MattK
Diese Idee ist interessant! Aber ich verstehe den Teil "Hinzufügen eines Verweises auf ein Kategorieobjekt" nicht. Wie mache ich das? –