Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
talit:indexing [2024-08-30 14:39] – hof | talit:indexing [2025-02-15 13:38] (aktuell) – hof | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
# Text Indexing | # Text Indexing | ||
- | < | + | < |
++++Repo| | ++++Repo| | ||
https:// | https:// | ||
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, | def query_index(index, | ||
- | result_set = set() | ||
return index.get(query, | return index.get(query, | ||
query_index(toy_index, | query_index(toy_index, | ||
</ | </ | ||
+ | |||
#### Fragen | #### Fragen | ||
- Findet dein System einen Film über `' | - Findet dein System einen Film über `' | ||
Zeile 157: | Zeile 156: | ||
++++ | ++++ | ||
</ | </ | ||
- | |||
## Ranking | ## Ranking | ||
Beim Information Retrieval geht es nicht nur darum, welche Dokumente zur Query passen, sondern welche _am besten_ dazu passen. Ranking ist eine komplexe und manchmal undurchsichtige Wissenschaft, | Beim Information Retrieval geht es nicht nur darum, welche Dokumente zur Query passen, sondern welche _am besten_ dazu passen. Ranking ist eine komplexe und manchmal undurchsichtige Wissenschaft, | ||
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: | ||
- | * '' | + | * '' |
+ | * '' | ||
+ | * '' | ||
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 171: | Zeile 171: | ||
Schreibe eine neue Query-Funktion, | Schreibe eine neue Query-Funktion, | ||
- | < | + | < |
++++Lösung| | ++++Lösung| | ||
Zeile 202: | Zeile 202: | ||
Die Vereinigungsmenge hingegen liefert sehr viele Resultate für eine Query wie '' | Die Vereinigungsmenge hingegen liefert sehr viele Resultate für eine Query wie '' | ||
+ | |||
+ | #### Wortfrequenzen | ||
+ | Zuerst werden die Inverse Document Frequencies in ein Dictionary überführt, | ||
+ | |||
+ | <code python> | ||
+ | word_frequencies = {word: freq for word, freq in freqs} | ||
+ | |||
+ | table = [[' | ||
+ | for token in tokenize(" | ||
+ | table.append([token, | ||
+ | |||
+ | %pip install tabulate | ||
+ | from tabulate import tabulate | ||
+ | tabulate(table, | ||
+ | </ | ||
#### Inverse Document Frequency | #### Inverse Document Frequency | ||
Zeile 248: | Zeile 263: | ||
Statt eine strikte AND-Verknüpfung aller Suchterme möchten wir ein Ranking erstellen, das alle Dokumente einschliesst, | Statt eine strikte AND-Verknüpfung aller Suchterme möchten wir ein Ranking erstellen, das alle Dokumente einschliesst, | ||
- | < | + | < |
++++Lösung| | ++++Lösung| | ||
<code python> | <code python> |