Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
talit:indexing [2024-09-02 11:53] – [Ranking] hoftalit:indexing [2025-02-15 13:38] (aktuell) hof
Zeile 1: Zeile 1:
 # Text Indexing # Text Indexing
  
-<nodisp 2>+<nodisp 1>
 ++++Repo| ++++Repo|
 https://github.com/tkilla77/ksr_talit_indexing/blob/main/04_text_indexing.ipynb https://github.com/tkilla77/ksr_talit_indexing/blob/main/04_text_indexing.ipynb
Zeile 20: Zeile 20:
  
 Anders als bei der Geodatenbank müssen wir hier noch den Text in einzelne Wörter (_en_. Tokens) zerlegen. Anders als bei der Geodatenbank müssen wir hier noch den Text in einzelne Wörter (_en_. Tokens) zerlegen.
- 
 ### Aufgabe 1 - Tokenizer ### Aufgabe 1 - Tokenizer
  
Zeile 46: Zeile 45:
 <code python> <code python>
 def query_index(index, query): def query_index(index, query):
-    result_set = set() 
     return index.get(query, set())     return index.get(query, set())
  
 query_index(toy_index, "James") query_index(toy_index, "James")
 </code> </code>
 +
 #### Fragen #### Fragen
   - Findet dein System einen Film über `'bond` (Kleinbuchstaben)?   - Findet dein System einen Film über `'bond` (Kleinbuchstaben)?
Zeile 162: Zeile 161:
 Nehmen wir folgendes Beispiel: Wir indexieren alle Film-Artikel der 1980er Jahre und wollen möglichst gute Suchresultate für folgende Queries: Nehmen wir folgendes Beispiel: Wir indexieren alle Film-Artikel der 1980er Jahre und wollen möglichst gute Suchresultate für folgende Queries:
   * ''michael fox delorean''   * ''michael fox delorean''
 +  * ''michael fox''
 +  * ''michael fox wortdasesnichtgibt''
  
 Unsere Query-Funktion muss erstens mit mehreren Wörtern umgehen können - es bietet sich an, die `tokenize` Funktion auch hier anzuwenden und eine Suchanfrage für jedes Token in der Query durchzuführen. Die Frage ist allerdings, wie wir die einzelnen Resultatlisten kombinieren...  Unsere Query-Funktion muss erstens mit mehreren Wörtern umgehen können - es bietet sich an, die `tokenize` Funktion auch hier anzuwenden und eine Suchanfrage für jedes Token in der Query durchzuführen. Die Frage ist allerdings, wie wir die einzelnen Resultatlisten kombinieren... 
Zeile 170: Zeile 171:
 Schreibe eine neue Query-Funktion, die mehrere Wörter kombinieren kann. Welche Kombinationsmethode wählst du? Schreibe eine neue Query-Funktion, die mehrere Wörter kombinieren kann. Welche Kombinationsmethode wählst du?
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung| ++++Lösung|
  
Zeile 201: Zeile 202:
  
 Die Vereinigungsmenge hingegen liefert sehr viele Resultate für eine Query wie ''michael fox delorean''. Die Vereinigungsmenge hingegen liefert sehr viele Resultate für eine Query wie ''michael fox delorean''.
 +
 +#### Wortfrequenzen
 +Zuerst werden die Inverse Document Frequencies in ein Dictionary überführt, das einfach auszulesen ist:
 +
 +<code python>
 +word_frequencies = {word: freq for word, freq in freqs}
 +
 +table = [['Term', 'Relative Document Frequency']]
 +for token in tokenize("michael fox delorean"):
 +    table.append([token, word_frequencies[token]])
 +
 +%pip install tabulate
 +from tabulate import tabulate
 +tabulate(table, headers="firstrow", floatfmt=".2%", tablefmt='html')
 +</code>
  
 #### Inverse Document Frequency #### Inverse Document Frequency
Zeile 247: Zeile 263:
 Statt eine strikte AND-Verknüpfung aller Suchterme möchten wir ein Ranking erstellen, das alle Dokumente einschliesst, die mindestens einen Suchterm enthält. Jeder Such-Begriff soll entsprechend seiner _Inverse-Document-Frequency_ (IDF) zum Rang beitragen. Das bedeutet, dass das Auftreten des seltenen Begriffs ''delorean'' mehr zum Rang beiträgt als ein häufiges Wort wie ''michael''. Trotzdem sollte ein einzelnes seltenes Wort nicht alles andere ausblenden dürfen. Statt eine strikte AND-Verknüpfung aller Suchterme möchten wir ein Ranking erstellen, das alle Dokumente einschliesst, die mindestens einen Suchterm enthält. Jeder Such-Begriff soll entsprechend seiner _Inverse-Document-Frequency_ (IDF) zum Rang beitragen. Das bedeutet, dass das Auftreten des seltenen Begriffs ''delorean'' mehr zum Rang beiträgt als ein häufiges Wort wie ''michael''. Trotzdem sollte ein einzelnes seltenes Wort nicht alles andere ausblenden dürfen.
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung| ++++Lösung|
 <code python> <code python>
  • talit/indexing.1725277983.txt.gz
  • Zuletzt geändert: 2024-09-02 11:53
  • von hof