Gleich lange Textstücke sind nicht automatisch brauchbare Belege. Werden bei „Vor dem Öffnen der Abdeckung den Strom trennen“ Bedingung und Handlung getrennt, kann die Suche nur die Handlung liefern. Chunking soll verständlichen Kontext und die Fundstelle gemeinsam erhalten.
Wir entwickeln eine zeichenbasierte Vergleichsbasis mit Python 3. Größe und Überlappung sind Versuchsparameter, keine produktiven RAGO-X-Vorgaben.
Erst die Textextraktion prüfen
Eine falsche Lesereihenfolge in mehrspaltigen PDFs, wiederholte Kopfzeilen oder vertauschte Tabellenzellen lassen sich nicht durch andere Chunkgrößen reparieren. Vergleichen Sie Überschriften, Absätze, Tabellen und Fußnoten mit dem Original. Beginnen Sie möglichst mit Abschnitten und Absätzen; teilen Sie sehr lange Absätze zusätzlich auf.
Eine Tabellenzeile benötigt häufig Spaltennamen und Einheiten. Verknüpfen Sie Teile langer Tabellen mit Titel und Spaltenüberschriften und erhalten Sie Seitenangaben. Ergänzte Überschriften sollten getrennt vom unveränderten Quellausschnitt gespeichert werden.
Eine Vergleichsbasis mit Offsets
Speichern Sie den Code als chunk_demo.py und führen Sie python3 chunk_demo.py aus. Das halboffene Intervall [start, end) macht den Text über text[start:end] reproduzierbar.
def split_text(text, size=80, overlap=15):
if size <= 0 or not 0 <= overlap < size:
raise ValueError("require size > 0 and 0 <= overlap < size")
start = 0
while start < len(text):
end = min(start + size, len(text))
yield {"start": start, "end": end, "text": text[start:end]}
if end == len(text):
break
start = end - overlap
text = "Pump X17: disconnect power. Wait 30 seconds. Check the inlet filter."
chunks = list(split_text(text, size=40, overlap=10))
print([(c["start"], c["end"]) for c in chunks])
assert [(c["start"], c["end"]) for c in chunks] == [(0, 40), (30, 68)]
assert all(text[c["start"]:c["end"]] == c["text"] for c in chunks)
assert set().union(*(set(range(c["start"], c["end"])) for c in chunks)) == set(range(len(text)))
assert list(split_text("")) == []
Die Ausgabe lautet [(0, 40), (30, 68)]. Die Bereiche überlappen um 10 Zeichen und decken die gesamte Eingabe ab. Leere Eingaben erzeugen keine Chunks, ungültige Überlappungen einen Fehler. Leerzeichen werden nicht entfernt oder normalisiert, damit Positionen vergleichbar bleiben.
Die Länge einer Python-Zeichenfolge entspricht weder Bytes noch sichtbaren Graphemgruppen oder Modell-Tokens. Prüfen Sie Modellgrenzen mit dem jeweiligen Tokenizer. Der Code erkennt keine Satz- oder Überschriftengrenzen und ist deshalb noch kein vollständiger produktiver Splitter.
Benötigte Metadaten
| Information | Zweck |
|---|---|
| Dokument-ID und Revision | Alte und aktuelle Inhalte unterscheiden |
| Chunk-ID und Version der Aufteilung | Neuverarbeitung nachvollziehen |
| Seite, Abschnitt und Offsets | Originalstelle prüfen |
| Organisation, Dokumentbereich und Rechte | Nur erlaubte Inhalte abrufen |
| Originalausschnitt und Zusatzkontext | Zitat von Suchhilfen unterscheiden |
Offsets müssen sich auf eine bestimmte Version des extrahierten Textes beziehen. OCR oder normalisierte Leerzeichen können Positionen verschieben. Beim Dokumentwechsel müssen Chunks und Index konsistent umgestellt werden; alte Revisionen dürfen nicht unbemerkt weiter auftauchen. Die Tabelle beschreibt Entwurfsaspekte, kein öffentliches API-Schema.
Belege vor der Größenoptimierung festlegen
Markieren Sie die Passagen, die reale Fragen beantworten, und vergleichen Sie zwei Konfigurationen. Enthalten die ersten Treffer Antwort und Ausnahmen? Zeigt der Quellenlink dieselbe Version? Mehr Chunks oder längere Antworten belegen keine Verbesserung.
| Beobachtung | Erster Versuch |
|---|---|
| Bedingung und Schluss getrennt | Satz-/Absatzgrenzen und nötigen Nachbarkontext nutzen |
| Mehrere Themen vermischt | Nach Überschriften aufteilen und vergleichen |
| Wiederholte Belege füllen den Kontext | Überlappung reduzieren oder Nachbartreffer zusammenführen |
| Tabellenzahlen falsch interpretiert | Überschriften, Einheiten und Fußnoten erhalten |
| Falsche Zitatposition | Extraktionsversion und Positionszuordnung prüfen |
Überlappung kann Kontextverlust reduzieren, erhöht aber Speicherbedarf und redundante Treffer. Dokumentieren Sie Fragen, Eingabe-Tokens, Latenz und Zitatgenauigkeit, statt eine universelle Idealgröße anzunehmen. Weiterführend: hybride Suche vergleichen und vom Beleg zur Antwort.



