Effizient bestimmte Wörter in Liste aus anderer Liste ersetzen



  • Hallo zusammen,

    ich habe ein Word Dokument mit ca 200 - 50000+ Wörtern. Es handelt sich um einen normalen Text, in dem sich die Wörter wiederholen können. Bestimmte Wörter (Menge n, kann in jedem Durchlauf unterschiedlich groß sein, 0 - ca. 5000+) in diesem Text sollen durch andere Wörter aus einer Liste L ersetzt werden. Die Liste L kann ca. 50000 Einträge haben, die jeweils eindeutig sind. Es sind quasi alle normalen Worte mit Trennstrichen.

    Nun möchte ich möglichst effizient alle Wörter der Menge n durch Wörter der Liste L ersetzen, falls diese dort gefunden werden.

    Wie sollte ich vorgehen? Vielen Dank im Voraus!



  • iop schrieb:

    alle Wörter der Menge n durch Wörter der Liste L ersetzen, falls diese dort gefunden werden

    Was soll das heißen?
    Du willst alle Wörter aus n, die in L vorkommen ersetzen?
    Und durch was willst du das Wort aus n dann ersetzen, wenn es in L gefunden wurde?
    Gib mal ein Beispiel, ich glaube dass du mit L keine Liste meinst.



  • Wenn ich iop richtig verstanden habe, hat er im Programm eine Zuordnung WortX -> ListeY.

    Das Programm soll dann die gefundenen Worte der Reihe nach ersetzen. Der erste Treffer bekommt den ersten Eintrag der Liste, der zweite den zweiten.

    Hab ich das Problem so richtig verstanden?



  • Hey und Danke schonmal für Eure Mühe!

    Ich mache mal ein Beispiel.

    Ausgangstext: Wir fahren in den Urlaub. Es geht in die Dokminikanische Republik.
    Zieltext: Wir fahr-en in den Ur-laub. Es geht in die Do-mi-ni-ka-ni-sche Re-pu-blik.
    Liste: Do-mi-ni-ka-ni-sche, fahr-en, Re-pu-blik, Ur-laub
    Identifizierungsliste (Idee): Dominikanische, fahren, Republik, Urlaub

    Alle Wörter aus dem Text, die in der Liste vorkommen, sollen ausgetauscht werden. Ich würde wahrscheinlich zwei Listen halten, eine Liste mit den Trennstrichen und eine ohne Trennstriche zur schnelleren Identifikation mit den Wörtern aus dem Text.



  • Für sowas nimmt man ein Dictionary, die Strings ohne Striche als Keys, die anderen jeweils passend als Values.



  • Und das ist das vermutlich schnellste?



  • Ja, weil das .net - Dictionary als Hashmap implementiert ist und wegen O(1) zumindest theoretisch am schnellsten ist.

    System.Collections.Generic.Dictionary

    Retrieving a value by using its key is very fast, close to O(1), because the Dictionary<TKey, TValue> class is implemented as a hash table.



  • Ok, vielen Dank!


Anmelden zum Antworten