AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Suchindezies erstellen

Ein Thema von sakura · begonnen am 17. Aug 2003 · letzter Beitrag vom 17. Aug 2003
Antwort Antwort
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#1

Suchindezies erstellen

  Alt 17. Aug 2003, 12:27
Rein theoretisch interessiert mich mal mögliche Lösungen zu folgenden Szenario. Ich habe mehrere Text/XML/HTML Dateien mit mehr oder weniger sinnvollen Inhalten. Wenn ich mal davon ausgehe, dass ich die Texte extrahieren kann, dann würde ich gerne mal einen Suchindex erstellen, der es mir gestattet über die gesamten Dateien hinweg schnell zu suchen. Vorstellung ist es mit Datenmengen von bis zu 100.000 Dateien in einer Größenordnung von vielleicht 100MB Roh-Daten immer noch extrem performant zu sein.

Wer kennt mögliche Ansätze, welche nicht auf Datenbanken oder dem MS Index Service basieren? Wo könnte ich generell vernünftig anfangen.

Ich bin auch für Tipps zu interessanter Literatur dankbar Source Code wird allerdings nicht verabscheut, ist aber wohl eher unwahrscheinlich

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Suchindezies erstellen

  Alt 17. Aug 2003, 14:10
Je gößer der Speicherverbrauch des Suchindex sein darf je schneller kann man suchen. Z.b. jede Datei wird als DAWG eingelesen und somit auch komprimiert. Die Suche nach einem 5 Zeichenwort wäre nun bei 100.000 Dateien = 100.000 * DAWG Laden + 100.000 * 5 Zeichenvergleiche. Dies wäre enorm effizient. Ein DAWG ist ein Directed Acyclic Word Graph, der sozusagen eine komprimierten Tree von Worten darstellt.
Angenommen das Laden eines DAWG per MMF dauert 0.5ms dann dauert die Suche darin selbst bei enorm großen Dateien nicht länger als 0.5ms.
Wortbasierte Textdateien können ca. auf 1/5 komprimiert als DAWG gespeichert werden. D.h. solche DAWG's würden zwar extrem schnelle Indexe ermöglichen wäre aber auch ziemlich speicherfressend. Allerdings jeder andere Index der eine exakte Suche ermöglichen soll wäre wesentlich größer.

Wenn der zusätzliche Speicherverbrauch gleich 0 sein soll, so müsste man die Datei selber jedesmal durchsuchen. Auch dafür gibt es sehr effiziente Verfahren, Boyer Moore zB.

D.h. du musst jetzt einen Komprimis finden, zwischen Speicherverbrauch + Performance + Exaktheit udn Komplexität der Suche. Angebracht wäre es z.b. einen temporären Suchpool der zu letzt gesuchten Begriffe zu benutzen. In diesem Suchpool sind die exakten Ergebnisse der letzen Suchen gespeichert. Wird erneut nach diesem Begriff gesucht so wird im Cache gesucht. Wird eine neue Datei in die Liste aufgenommen, so muß das aber dann berücksichtigt werden.

Ich habe z.B. auch schon per DAWG einen Suche implementiert. Dabei war die Komplexität der Suchkriterien das K.O. Kriterium. Das Suchmuster war komplex. Statt nun zu jeder Datei einen DAWG zu speichern, wurde der DAWG Erzeugungsalgorithmus zu EINER Datei optimiert. Nun wurden in einem DAWG die Suchmuster codiert und jede Datei so als würde man ein DAWG von dieser erzeugen eingelesen. Aber deren Daten wurden nur mit denen im Suchmuster DAWG abgeglichen. Angenommen im DAWG wurden 100 verschiedenen Wörter gespeichert so suchte dieser Algorithmus quasi in parallel nach dem Vorkommen dieser Wörter in den Dateien. Im Gegensatz dazu würde man beim Boyer Moore Algo. 100 mal die gleiche Suche pro Datei durchführen müssen.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Suchindezies erstellen

  Alt 17. Aug 2003, 14:18
Hi Hagen, danke für diese Infos. Also, Speicherverbrauch soll nur ein begrenzte Rolle spielen. Sagen wir mal, das 5-8 fache der zu durchsuchenden Texte ist kein Problem

Gibt es zu diesem DAWG Literatur die Du auf Anhieb empfehlen kannst?

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#4

Re: Suchindezies erstellen

  Alt 17. Aug 2003, 14:22
"The World's Fastest Scrabble Program" by Andrew W Appel and
Guy J Jacobson. Comm. ACM, 31(5) 572-579 (May 1988).

Suche mal im WEB nach "DAWG+Algorithm+Scrabble+Wordgames" es gibt dazu eine Homepage und eine Group bei Google/eg. Yahoo. Leider finde ich den Link nicht mehr.

Allerdings, falls du vorhast eine OpenSource Anwendung zu coden, könnte ich mich breitschlagen lassen und dir meine DAWG Sourcen zur Verfügung stellen. Momentan muß ich aber noch abchecken ob ich das überhaupt darf, es war eine Auftragsarbeit.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#5

Re: Suchindezies erstellen

  Alt 17. Aug 2003, 14:27
Achso, eines noch bevor du anfängst in die falsche Richtung zu rennen. Ein DAWG ist zwar enorm effizient aber das hat auch Konsequenzen. Normalerweise nutzt man DAWG's z.b. in Rechtschreibprüfungen/ Wortvervollstängigungsalgos./ Mustersuchen usw. Alle diese Algos. setzen vorraus das die Eingangsdaten Wort basiert sind. Dies hat enorme Vorteile und auch Nachteile. Im Falle deiner Bedürfnisse neheme ich an das du HTML's per Preprocessing in solche Wörter zerlegen kannst. D.h. das DWAG würde struktiert über strukurierte Daten suchen. Wie gesagt bei HTML's wäre das enorm von Vorteil da die Suche unwichtige Muster von vornherein ausfiltert, zB. Tags usw. Will man aber damit über binäre Daten such so versagt dieses Verfahren.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Suchindezies erstellen

  Alt 17. Aug 2003, 14:27
Leider nicht OpenSource Aber danke für das Angebot

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Suchindezies erstellen

  Alt 17. Aug 2003, 14:28
Es sollen schon Worte/Texte sein. Stellt sich jetzt noch die Frage, wie es mit Unicode-Texten (Russisch, Japanisch, Italienisch, Polnisch, ...) aussieht

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: Suchindezies erstellen

  Alt 17. Aug 2003, 14:29
Kommerziell, Shareware oder was ? Einem Deal mit mir steht nicht's im Wege

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#9

Re: Suchindezies erstellen

  Alt 17. Aug 2003, 14:32
Die Frage nach der Sprache oder Unicode stellt sich nicht. Es hängt einzigst von der Filterung beim Preprocessing ab. Allerdings, will man zB. ein Wort als Ansi und Unicode suchen so muß man im Such-DAWG beide Versionen speichern.

Dafür kann man das DWAG so benutzen das man mit Wildcards suchen kann.

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz