Ich habe viele Textdokumente auf der einen Seite und eine riesige Liste von Keywords (Strings) auf der anderen Seite. Jetzt bin ich interessiert, welche dieser Schlüsselwörter in den Dokumenten enthalten sind.Eine riesige Liste von Stichwörtern gegen eine Zeichenfolge mit Ruby
Im Moment ist mich mit einem monströsen Auto regex erzeugt:
keywords = %w(Key1, Key2, Key3)
regx = Regexp.new('\b(' + keywords.join('|') + ')\b','i')
documents.each |d|
d.scan(regx)
end
Das funktionierte groß für eine Liste von einem paar hundert Keywords, aber jetzt bin ich mit über 50.000 Stichwörter und es verlangsamt auch nach unten viel .
Gibt es einen besseren Weg, eine solche Operation mit Ruby zu machen?
EDIT:
- Die Dokumente sind typische Nachrichtenartikel wie Nachrichten über aktuelle Sportereignisse, wie Sie über Google News beispielsweise finden. In meinem Testset enthält jeder Artikel ungefähr 1000 Wörter
- Die Schlüsselwörter können einzelne Wörter sein, könnten aber auch Sätze sein, die mehrere Wörter wie 'Franz Beckenbauer' oder 'Russel Wilson' enthalten.
- Ich bin nur daran interessiert, komplette Spiele - so für ‚Diktion‘ Suche sollte nur Spiel ‚Diktion‘, nicht ‚Wörterbuch‘
Verwenden Sie 'StringScanner'. – sawa
Ist die Verlangsamung linear in Bezug auf die Anzahl der Keywords? Wenn das der Fall ist, glaube ich nicht, dass Sie sich dadurch verbessern können. – sawa
Möchten Sie nur ganze Wörter aus den Dokumenten und keine Teilzeichenfolgen? Möchten Sie nach "diction" suchen, um "dictionary" zurückzugeben? – JLB