[{"data":1,"prerenderedAt":760},["ShallowReactive",2],{"blog-table-extraction-rag-de":3},{"slug":4,"published":5,"updated":6,"minutes":7,"category":8,"tags":9,"keywords":15,"about":26,"sources":36,"cover":73,"og":74,"expertise":75,"locales":76,"lang":78,"title":80,"description":81,"coverAlt":82,"metaTitle":83,"takeaways":84,"faq":90,"toc":106,"blocks":134,"others":507},"table-extraction-rag","2026-09-29","2026-10-16",8,"rag",[10,11,12,13,14],"RAG","Tables","Document parsing","Evaluation","Text-to-SQL",[16,17,18,19,20,21,22,23,24,25],"table extraction for RAG","tables in RAG pipelines","pdfplumber vs Camelot","Table Transformer PubTables-1M","Docling table mode TableFormer","Azure Document Intelligence tables","TEDS metric limitations","markdown vs HTML table for LLM","text-to-SQL for table questions","LlamaParse table extraction",[27,30,33],{"name":28,"url":29},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",{"name":31,"url":32},"Table (information)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTable_%28information%29",{"name":34,"url":35},"PDF","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPDF",[37,40,43,46,49,52,55,58,61,64,67,70],{"title":38,"url":39},"Factorial study of parsers, chunkers and retrievers (arXiv 2609.31660)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2609.31660",{"title":41,"url":42},"pdfplumber on GitHub","https:\u002F\u002Fgithub.com\u002Fjsvine\u002Fpdfplumber",{"title":44,"url":45},"Camelot documentation","https:\u002F\u002Fcamelot-py.readthedocs.io\u002Fen\u002Flatest\u002F",{"title":47,"url":48},"Microsoft Table Transformer (archived)","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Ftable-transformer",{"title":50,"url":51},"PubTabNet and TEDS (arXiv 1911.10683)","https:\u002F\u002Farxiv.org\u002Fabs\u002F1911.10683",{"title":53,"url":54},"Semantic evaluation of table extraction (arXiv 2603.18652)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2603.18652",{"title":56,"url":57},"TableFormer (arXiv 2203.01017)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2203.01017",{"title":59,"url":60},"Docling docs: advanced options","https:\u002F\u002Fdocling-project.github.io\u002Fdocling\u002Fusage\u002Fadvanced_options\u002F",{"title":62,"url":63},"Azure Document Intelligence: layout model","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fai-services\u002Fdocument-intelligence\u002Fprebuilt\u002Flayout",{"title":65,"url":66},"Table Meets LLM (WSDM 2024)","https:\u002F\u002Fzmy.io\u002Ffiles\u002Fwsdm24-SUC.pdf",{"title":68,"url":69},"TableRAG (arXiv 2410.04739)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2410.04739",{"title":71,"url":72},"Chain-of-Table (arXiv 2401.04398)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2401.04398","\u002Fimages\u002Fblog\u002Ftable-extraction-rag\u002Fcover.webp","\u002Fimages\u002Fblog\u002Ftable-extraction-rag\u002Fog.jpg","ai-engineer",[77,78,79],"en","de","hu","Tabellenextraktion für RAG: Extraktionsebenen, Serialisierung und belastbare Abfragen","Tabellen in RAG: warum Chunking sie zerbricht, pdfplumber, Camelot, Docling und Cloud-Extraktoren, was TEDS übersieht, Serialisierung und SQL-Routing.","Eine Tabelle auf einer Seite wird zu einzelnen Zeilenstreifen, die je einen Kopfreiter behalten.","Tabellenextraktion für RAG · Balázs Csorba",[85,86,87,88,89],"Chunking mit fester Größe trennt Zeilen von ihren Spaltenköpfen, sodass eine Tabellenfrage nur zufällig beantwortbar ist; eine Studie von 2026 fand ein dichtes Modell, das bei tabellenbasierten Fragen stark versagte.","Extraktoren liefern unterschiedliche Formen: pdfplumber und Camelot lesen textbasierte PDFs, Doclings TableFormer und Table Transformer erkennen Struktur, Azure Layout und Textract liefern typisierte Zellraster mit Kopfzeilen.","Veröffentlichte Parser-Werte sagen selten etwas über Ihren Korpus: In einer Studie von 2026 korrelierten TEDS und GriTS mit menschlichem Urteil bei r = 0,68 und 0,70, ein LLM-Richter bei 0,93.","Halten Sie jede Tabelle als Einheit plus Kind-Einheiten pro Zeile, die die Spaltennamen wiederholen, und bewahren Sie neben der Textfassung ein typisiertes Raster für Zitate und SQL.","Leiten Sie Nachschlagefragen an die Suche und Aggregationsfragen wie Summen, Anzahlen und Maxima an SQL oder einen Dataframe, denn Vektorähnlichkeit kennt weder Summe noch Maximum.",[91,94,97,100,103],{"q":92,"a":93},"Warum zerbrechen Tabellen RAG-Pipelines?","Eine Tabelle ist eine zweidimensionale Struktur, deren Bedeutung von den Kopfzeilen abhängt. Chunking mit fester Größe trennt Zeilen von ihren Spaltenköpfen und macht aus Zahlen Fließtext, sodass der Retriever Fragmente wie „12,5 | 40 | ja“ ohne Spaltennamen findet. Das Modell muss dann raten, was die Zahlen bedeuten.",{"q":95,"a":96},"Welches Werkzeug eignet sich, um Tabellen aus PDFs zu extrahieren?","Bei textbasierten PDFs beginnen Sie mit pdfplumber oder Camelot, die die eigene Textebene des PDFs lesen. Für komplexe Strukturen erkennt Docling mit TableFormer Zeilen, Spalten und verbundene Zellen. Für Scans oder gemischte Dokumente liefern Cloud-Layout-APIs wie Azure Document Intelligence oder Amazon Textract typisierte Zellraster. Testen Sie zwei davon an Ihren eigenen Tabellen.",{"q":98,"a":99},"Sollte man Tabellen für ein LLM als Markdown oder HTML speichern?","Markdown ist kompakt und reicht für einfache Tabellen; HTML erhält verbundene Zellen und mehrstufige Kopfzeilen. Forschung wie Table Meets LLM zeigt, dass sich die Genauigkeit mit Format und Reihenfolge ändert, also testen Sie beides mit Ihren eigenen Fragen. Halten Sie neben der indexierten Textform ein typisiertes Raster.",{"q":101,"a":102},"Wie beantwortet man Fragen wie „welches Produkt hat den höchsten Preis“ über Tabellen?","Leiten Sie sie an der Vektorsuche vorbei. Fragen zu Aggregation, Zählung, Rangfolge und Vergleich brauchen SQL oder einen Dataframe über einem Tabellenspeicher. Die Suche kann die richtige Tabelle und ihr Schema finden, aber die Berechnung sollte als Abfrage laufen, mit den üblichen Schutzmaßnahmen für generiertes SQL.",{"q":104,"a":105},"Wie bewertet man die Qualität der Tabellenextraktion?","Bauen Sie ein kleines bewertetes Set eigener Tabellen und messen Sie die Extraktion daran, einschließlich Zellinhalt, nicht nur Struktur. Veröffentlichte TEDS- und GriTS-Werte messen Benchmark-Korpora; eine Studie von 2026 fand sie nur mäßig mit menschlichem Urteil korreliert, ein LLM-Richter dagegen deutlich besser.",[107,110,113,116,119,122,125,128,131],{"id":108,"title":109},"why-tables-break-chunk-based-rag","Warum Tabellen chunkbasiertes RAG zerbrechen",{"id":111,"title":112},"the-extraction-layers","Die Extraktionsebenen und was sie liefern",{"id":114,"title":115},"what-the-benchmarks-actually-measure","Was die Benchmarks tatsächlich messen",{"id":117,"title":118},"serialization-choices","Serialisierung: Markdown, HTML, JSON oder Fließtext",{"id":120,"title":121},"chunking-a-table-without-breaking-it","Eine Tabelle chunken, ohne sie zu zerbrechen",{"id":123,"title":124},"routing-questions-not-documents","Fragen leiten, nicht nur Dokumente",{"id":126,"title":127},"when-not-to-write-a-table-pipeline","Wann sich eine Tabellen-Pipeline nicht lohnt",{"id":129,"title":130},"pipeline-checklist","Eine Checkliste für die Pipeline",{"id":132,"title":133},"sources","Quellen",[135,143,152,155,158,166,172,173,193,220,247,321,345,346,358,365,372,373,380,388,389,392,394,397,398,401,422,426,429,430,437,440,441,460,468,469],{"type":136,"content":137},"paragraph",[138,142],{"tag":139,"children":140},"strong",[141],"Tabellenextraktion für RAG"," ist der Teil der Dokumentaufnahme, in dem die meisten Pipelines unbemerkt an Genauigkeit verlieren. Eine Tabelle ist eine zweidimensionale Struktur, deren Zahlen nur zusammen mit Zeilen- und Spaltenköpfen etwas bedeuten, und das übliche RAG-Rezept, Text in Chunks fester Größe zu teilen, zerstört genau diese Beziehung. Der Retriever liefert dann Fragmente wie „12,5 | 40 | ja“, und das Modell muss raten, welche Spalte welche war.",{"type":136,"content":144},[145,146,151],"Dieser Artikel behandelt Tabellen als eigenständige Objekte: welche Extraktionsebene man nutzt und was sie liefert, was die Benchmarks tatsächlich messen, wie man eine Tabelle serialisiert und chunkt, wie man Fragen leitet, die Berechnung brauchen, und wann sich eine eigene Tabellen-Pipeline nicht lohnt. Das Parsen ganzer Dokumente, OCR und Layoutmodelle behandelt ",{"tag":147,"to":148,"children":149},"link","\u002Fblog\u002Fpdf-document-parsing-for-rag",[150],"PDF- und Dokumentenparsing für RAG","; hier wird ein Parser vorausgesetzt, und es geht um die Tabelle, die er gefunden hat.",{"type":153,"level":154,"id":108,"text":109},"heading",2,{"type":136,"content":156},[157],"Tabellen zerbrechen chunkbasiertes RAG, weil Chunking annimmt, dass Bedeutung entlang einer Textzeile fließt, und in einer Tabelle fließt sie entlang zweier Achsen. Ein Fenster fester Größe trennt Zeilen von der Kopfzeile, löst eine Zeile von ihrer Beschriftung und teilt breite Zeilen auf mehrere Chunks. Eine Nachschlagefrage wie „wie hoch ist die maximale Last von Modell X200“ ist dann nur beantwortbar, wenn die richtige Zeile und die Kopfzeile zufällig im selben Chunk landen.",{"type":136,"content":159},[160,161,165],"Der Effekt ist messbar. Eine kontrollierte faktorielle Studie von 2026 verglich drei Parser, drei Chunking-Strategien und fünf dichte Embedding-Modelle plus BM25 auf regulatorischen Dokumenten, insgesamt 72.000 Ergebniszeilen. Sie fand, dass Parser- und Chunker-Wahl deutlich zusammenwirken und dass ein dichtes Modell, MPNet-base, „ein schweres Versagen bei tabellenbasierten Fragen“ zeigte (",{"tag":162,"href":39,"children":163},"a",[164],"faktorielle Studie","). Der Text blieb bei der Aufnahme zu über 98 Prozent erhalten, die Verluste kamen also aus der Art, wie Tabellen geteilt und gerankt wurden, nicht aus fehlendem Text.",{"type":167,"src":168,"alt":169,"wide":170,"caption":171},"image","\u002Fimages\u002Fblog\u002Ftable-extraction-rag\u002Fdiagram-5.webp","Chunks fester Größe gegen eine Tabelleneinheit Zwei Spalten für dieselbe breite Tabelle. Links, Chunks fester Größe: Chunk 1 enthält Kopfzeile und Zeilen 1 und 2; Chunk 2 enthält Zeilen 3 bis 5 ohne Kopfzeile; Chunk 3 beginnt mitten in Zeile 6. Eine Frage zu Zeile 4 liefert Zahlen ohne Spaltennamen. Rechts, eine Tabelleneinheit: eine Eltern-Einheit mit Beschriftung, Kopfzeile und allen Zeilen; Kind-Einheiten pro Zeile, die die Spaltennamen wiederholen, etwa Modell: X200; Spannung: 24 V; Max. Last: 40 kg. Dieselbe Frage findet eine Zeile, die ihre Bedeutung selbst trägt.",true,"Chunks fester Größe trennen Zeilen von ihren Kopfzeilen; eine Tabelleneinheit mit Kind-Einheiten pro Zeile hält jede Zeile für sich verständlich.",{"type":153,"level":154,"id":111,"text":112},{"type":136,"content":174},[175,176,180,181,184,185,188,189,192],"Es gibt fünf Ebenen, von günstig und wörtlich bis teuer und interpretierend, und sie liefern unterschiedliche Formen. PDF-Geometrie ist die erste: pdfplumber findet explizite Linien und durch Wortausrichtung implizierte Linien, berechnet ihre Schnittpunkte und gruppiert die entstehenden Zellen zu Tabellen, mit Strategien wie ",{"tag":177,"children":178},"code",[179],"lines",", ",{"tag":177,"children":182},[183],"text"," und ",{"tag":177,"children":186},[187],"explicit",". Die README sagt klar, dass es am besten mit maschinell erzeugten PDFs arbeitet und kein OCR beherrscht (",{"tag":162,"href":42,"children":190},[191],"pdfplumber",").",{"type":136,"content":194},[195,196,180,199,180,202,184,205,208,209,212,213,216,217,192],"Regelbasierte Parser sind die zweite Ebene. Camelot 2.0 bietet die Varianten ",{"tag":177,"children":197},[198],"stream",{"tag":177,"children":200},[201],"lattice",{"tag":177,"children":203},[204],"network",{"tag":177,"children":206},[207],"hybrid"," sowie optional ",{"tag":177,"children":210},[211],"ml",", das die Table-Transformer-Familie nutzt, aber den Zelltext aus der eigenen Textebene des PDFs füllt, „sodass es keinen Wert erfinden oder verändern kann“; jede Tabelle kommt mit Parsing-Bericht und Konfidenzwert, und es funktioniert nur mit textbasierten PDFs (",{"tag":162,"href":45,"children":214},[215],"Camelot","). Gelernte Strukturerkennung ist die dritte: Microsofts Table Transformer, trainiert auf PubTables-1M mit 947.642 annotierten Tabellen, erkennt Zeilen, Spalten und Kopfzellen, braucht aber eine separate Textextraktion, und sein Repository wurde im September 2026 schreibgeschützt archiviert (",{"tag":162,"href":48,"children":218},[219],"Table Transformer",{"type":136,"content":221},[222,223,226,227,230,231,234,235,238,239,242,243,192],"Docling bündelt diese dritte Ebene mit einem eigenen Modell, TableFormer, das Struktur vorhersagt und den Zellinhalt aus der Textebene des PDFs nimmt; es hob TEDS auf PubTabNet bei einfachen Tabellen von 91 auf 98,5 Prozent und bei komplexen von 88,7 auf 95 Prozent (",{"tag":162,"href":57,"children":224},[225],"TableFormer","). In Docling wählt man ",{"tag":177,"children":228},[229],"TableFormerMode.ACCURATE"," oder ",{"tag":177,"children":232},[233],"FAST"," und schaltet ",{"tag":177,"children":236},[237],"do_cell_matching"," ab, wenn Spalten zusammengeführt werden (",{"tag":162,"href":60,"children":240},[241],"Docling","). Cloud-Layout-APIs sind die vierte Ebene und Vision-Language-Parser wie die agentischen Stufen von LlamaParse die fünfte, abgerechnet in Credits zu 1.000 Credits für $1,25 (",{"tag":162,"href":244,"children":245},"https:\u002F\u002Fwww.llamaindex.ai\u002Fpricing",[246],"LlamaIndex",{"type":248,"head":249,"rows":260},"table",[250,252,254,256,258],[251],"Werkzeug",[253],"Methode",[255],"Ausgabeform",[257],"Scans",[259],"Kosten \u002F Lizenz",[261,271,280,291,302,311],[262,263,265,267,269],[191],[264],"PDF-Geometrie",[266],"Liste von Zeilen aus Strings",[268],"nein",[270],"MIT",[272,274,276,278,279],[273],"Camelot 2.0",[275],"Regeln, optional ML",[277],"Tabellen mit Parsing-Bericht",[268],[270],[281,283,285,287,289],[282],"Docling (TableFormer)",[284],"gelernte Struktur",[286],"Zellraster mit Spans",[288],"mit OCR",[290],"MIT, selbst gehostet",[292,294,296,298,300],[293],"Azure Layout",[295],"Cloud-Layout-API",[297],"Zellen mit Zeile, Spalte, Art, Spans",[299],"ja",[301],"$10 pro 1.000 Seiten",[303,305,306,308,309],[304],"Textract TABLES",[295],[307],"Zellblöcke, verbundene Zellen, Kopfzeilen",[299],[310],"$15 pro 1.000 Seiten (us-east-1)",[312,314,316,318,319],[313],"LlamaParse",[315],"LLM- oder VLM-Parsing",[317],"Markdown, JSON, HTML-Tabellen",[299],[320],"Credits, ab etwa 1 pro Seite",{"type":136,"content":322},[323,324,327,328,331,332,335,336,339,340,344],"Die Cloud-Optionen liefern die reichste Form. Das Modell ",{"tag":177,"children":325},[326],"prebuilt-layout"," von Azure Document Intelligence gibt jeder Tabelle Zeilen- und Spaltenzahl sowie Zellen mit ",{"tag":177,"children":329},[330],"kind"," wie ",{"tag":177,"children":333},[334],"columnHeader",", Zeilen- und Spaltenindex, Spans und Begrenzungsbereichen und kann direkt Markdown ausgeben (",{"tag":162,"href":63,"children":337},[338],"Azure","); die TABLES-Funktion von Textract liefert verbundene Zellen, Spaltenköpfe, Titel, Fußzeilen und Summenzellen (",{"tag":162,"href":341,"children":342},"https:\u002F\u002Fdocs.aws.amazon.com\u002Ftextract\u002Flatest\u002Fdg\u002Fhow-it-works-tables.html",[343],"AWS","). Die Preise gelten Stand Oktober 2026, aus den Preislisten der Anbieter für West Europe beziehungsweise us-east-1.",{"type":153,"level":154,"id":114,"text":115},{"type":136,"content":347},[348,349,352,353,357],"Die meisten veröffentlichten Tabellenwerte nutzen eine von zwei Metriken. TEDS aus dem PubTabNet-Paper mit seinen 568.000 Tabellenbildern wandelt Tabellen in HTML-Bäume um und misst die Baum-Editierdistanz (",{"tag":162,"href":51,"children":350},[351],"PubTabNet","); manche Ranglisten melden TEDS-Struct, das den Zelltext ignoriert. GriTS bewertet eine Tabelle direkt als Matrix und misst Topologie, Zellposition und Zellinhalt in einem Rahmen (",{"tag":162,"href":354,"children":355},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2203.12555",[356],"GriTS","). Beide sind nützlich, um Modelle auf demselben Benchmark zu vergleichen.",{"type":136,"content":359},[360,361,364],"Ihren Korpus sagen sie schlechter voraus, als die Zahlen vermuten lassen. Eine Validierungsstudie von 2026 sammelte mehr als 1.500 menschliche Qualitätsurteile zu extrahierten Tabellen aus 21 Parsern und fand, dass TEDS mit menschlichem Urteil bei r = 0,68 und GriTS bei r = 0,70 korrelierte, während eine LLM-als-Richter-Pipeline r = 0,93 erreichte; die Autoren halten fest, dass regelbasierte Metriken Struktur erfassen, aber „semantische Gleichwertigkeit des Tabelleninhalts nicht erfassen“ (",{"tag":162,"href":54,"children":362},[363],"Validierungsstudie","). Die praktische Folgerung: ein kleines bewertetes Set eigener Tabellen bauen und Kandidaten daran messen.",{"type":366,"variant":367,"title":368,"body":369},"callout","warn","Eine Parser-Rangliste ist nicht Ihr Korpus",[370],[371],"Datenblätter, Preislisten und regulatorische Anhänge sehen ganz anders aus als die wissenschaftlichen Tabellen in PubTabNet oder PubTables-1M. Zwanzig bis fünfzig eigene Tabellen, einmal Zelle für Zelle geprüft, sagen Ihnen mehr darüber, welchen Extraktor Sie nutzen sollten, als jeder veröffentlichte TEDS-Wert, und sie werden zum Regressionstest für jeden späteren Parser- oder Prompt-Wechsel.",{"type":153,"level":154,"id":117,"text":118},{"type":136,"content":374},[375,376,379],"Wie eine Tabelle in den Index geschrieben wird, verändert, was das Modell damit tun kann. Markdown ist kompakt und lesbar, kann aber keine verbundenen Zellen oder mehrstufigen Kopfzeilen ausdrücken; HTML kann das, bei höheren Tokenkosten; JSON-Datensätze behalten Typen und machen jede Zeile selbstbeschreibend. Die Studie „Table Meets LLM“ zeigte, dass die Genauigkeit von Modellen bei strukturellen Aufgaben wie Zellsuche und Zeilenabruf mit Eingabeformat, Reihenfolge, Rollen-Prompting und Trennzeichen variiert (",{"tag":162,"href":66,"children":377},[378],"Table Meets LLM","), die Wahl sollte also getestet und nicht angenommen werden.",{"type":136,"content":381},[382,383,387],"Eine vierte Option ist, Tabellen in Fließtext umzuschreiben. D-RAC, eine Pipeline von 2026, rendert Seiten, wandelt sie in einem multimodalen Durchlauf in suchorientiertes Markdown um und schreibt Tabellen „als in sich geschlossene Aussagen in Fließtext“ um, bevor deterministisch gechunkt wird (",{"tag":162,"href":384,"children":385},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2609.24220",[386],"D-RAC","). Das funktioniert gut für kleine beschreibende Tabellen und verliert Präzision bei großen numerischen. Welche Textform Sie auch indexieren, behalten Sie das ursprüngliche typisierte Raster daneben, damit Antworten die genaue Zelle zitieren und Berechnungen mit echten Zahlen laufen können.",{"type":153,"level":154,"id":120,"text":121},{"type":136,"content":390},[391],"Behandeln Sie eine Tabelle als eine abrufbare Eltern-Einheit und ergänzen Sie pro Zeile eine Kind-Einheit, die die Spaltennamen wiederholt, sodass eine Zeile wie „Modell: X200; Spannung: 24 V; Max. Last: 40 kg“ für sich verständlich ist. Trennen Sie nie die Kopfzeile vom Rumpf, hängen Sie Beschriftung und Abschnittspfad an und speichern Sie Seite und Tabellen-ID, damit die Antwort sie zitieren kann. Große Tabellen kann man in Zeilengruppen teilen, aber jede Gruppe trägt die Kopfzeile erneut.",{"type":177,"code":393},"# One table -> one parent unit + one child per row that repeats the header names\ndef table_units(table, doc_id, page, caption, section_path):\n    header = [c.strip() for c in table.header]\n    parent = {\n        \"id\": f\"{doc_id}:p{page}:t{table.index}\",\n        \"text\": f\"{section_path} > {caption}\\n\" + table.to_markdown(),\n        \"kind\": \"table\", \"page\": page,\n    }\n    children = []\n    for r, row in enumerate(table.rows):\n        pairs = \"; \".join(f\"{h}: {v}\" for h, v in zip(header, row) if v not in (\"\", None))\n        children.append({\n            \"id\": f\"{parent['id']}:r{r}\",\n            \"text\": f\"{caption}. {pairs}\",          # each row is readable on its own\n            \"kind\": \"table_row\", \"parent\": parent[\"id\"], \"page\": page,\n        })\n    return parent, children   # also write table.rows as typed records to a table store",{"type":136,"content":395},[396],"Die Eltern-Einheit beantwortet Fragen zur Tabelle als Ganzes, die Zeilen-Kinder Nachschlagefragen und die typisierten Datensätze im Tabellenspeicher Berechnungen. Auf meiner eigenen Nuxt-Seite, auf der ich LLM-Funktionen betreibe, gilt im kleineren Maßstab dieselbe Regel für verlässliche Antworten: Alles, was zitiert wird, trägt seinen Quellort ab der Indexierung in den Metadaten.",{"type":153,"level":154,"id":123,"text":124},{"type":136,"content":399},[400],"Nachschlage- und Berechnungsfragen brauchen unterschiedliche Mechanik. „Wie hoch ist die Betriebstemperatur von X200“ ist eine Nachschlagefrage, die hybride Suche über die Zeilen-Kinder gut beantwortet. „Welches Modell hat unter 30 V die höchste Tragfähigkeit“ oder „wie viele Varianten unterstützen IP67“ sind Aggregationen, und Vektorähnlichkeit kennt weder Maximum noch Anzahl noch Summe. Solche Fragen sollten zu einer Abfrage über den typisierten Tabellenspeicher werden.",{"type":136,"content":402},[403,404,407,408,411,412,416,417,421],"Die Forschung stützt die Aufteilung. TableRAG argumentiert, dass ganze Tabellen im Modellkontext nicht skalieren, und ruft vor der Generierung Schema und relevante Zellen ab (",{"tag":162,"href":69,"children":405},[406],"TableRAG","); Chain-of-Table zeigt, dass Tabellenschlussfolgern als Folge von Operationen, die die Tabelle umformen, besser funktioniert als als einzelne Antwort (",{"tag":162,"href":72,"children":409},[410],"Chain-of-Table","); und TableBench meldet, dass selbst GPT-4 bei industrienahen Tabellenfragen im Vergleich zu Menschen nur mäßig abschneidet (",{"tag":162,"href":413,"children":414},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2408.09174",[415],"TableBench","). Die Sicherheitsseite von generiertem SQL behandelt ",{"tag":147,"to":418,"children":419},"\u002Fblog\u002Ftext-to-sql-llm-guardrails",[420],"Text-to-SQL mit LLM-Schutzmaßnahmen",".",{"type":167,"src":423,"alt":424,"wide":170,"caption":425},"\u002Fimages\u002Fblog\u002Ftable-extraction-rag\u002Fdiagram-26.webp","Tabellen-Pipeline für RAG Fünf Schritte von links nach rechts: Ein PDF oder Scan geht in eine Extraktionsebene, von PDF-Geometrie über regelbasierte Parser und gelernte Strukturerkennung bis zu Cloud-Layout-APIs oder Vision-Modellen; das Ergebnis ist ein Tabellenobjekt mit Zellen, verbundenen Bereichen, Beschriftung und Seite; ein Validierungstor prüft Zeilen- und Spaltenzahlen und Zahlentypen; die Tabelle wird zweimal gespeichert, als Text mit Kopfzeilenkontext für die Suche und als typisiertes Raster; und Fragen werden entweder an hybride Suche für Nachschlagefragen oder an SQL für Aggregationen geleitet und mit Seitenzitat beantwortet.","Die Tabelle bleibt von der Extraktion bis zur Antwort eine Tabelle: eine Textform für die Suche, eine typisierte Form für Berechnung und Zitat.",{"type":136,"content":427},[428],"Der Router selbst kann einfach sein. Ein kleiner Klassifikations-Prompt oder ein paar Regeln entscheiden, ob eine Frage nach einem Wert, einer Liste, einer Anzahl, einem Extremwert oder einem Vergleich fragt; die letzten drei gehen in den Abfragepfad. Die Suche läuft in beiden Pfaden trotzdem zuerst, weil sie findet, um welche Tabelle und welche Spalten es geht. Der Abfragepfad erzeugt dann SQL oder Dataframe-Code gegen dieses Schema, führt ihn in einer Sandbox aus und gibt das Ergebnis zusammen mit den genutzten Zeilen zurück, damit die Antwort sie zitieren kann.",{"type":153,"level":154,"id":126,"text":127},{"type":136,"content":431},[432,433,421],"Verzichten Sie auf die eigene Pipeline, wenn Tabellen seltene Illustrationen sind und nicht die Daten, nach denen gefragt wird, wenn sich kein Tabellenschema über Dokumente hinweg wiederholt und ein Tabellenspeicher daher nie abgefragt würde, oder wenn Sie keine Evaluierung auf Seitenebene haben und eine Regression ohnehin nicht sehen könnten. Dann ist Markdown-Ausgabe aus Ihrem bestehenden Parser, eine Tabelle pro Chunk mit Beschriftung und ein Reranker darüber eine vernünftige erste Version. Werkzeugseitige Abwägungen beim allgemeinen Partitionieren stehen in der ",{"tag":147,"to":434,"children":435},"\u002Fblog\u002Funstructured",[436],"Besprechung von Unstructured",{"type":136,"content":438},[439],"Auch die Kosten prägen die Wahl. Stand Oktober 2026 kostet Azures Layoutmodell in West Europe $10 pro 1.000 Seiten und die TABLES-Funktion von Textract in us-east-1 $15 pro 1.000 Seiten für die erste Million Seiten im Monat, während Docling oder Camelot auf der eigenen CPU nur Rechenzeit kosten. Für einen Katalog mit einigen tausend Datenblättern ist das so oder so eine kleine einmalige Rechnung; bei Millionen Seiten, die bei jedem Parser-Wechsel neu verarbeitet werden, wird das Selbsthosten des Extraktors relevant.",{"type":153,"level":154,"id":129,"text":130},{"type":442,"ordered":170,"items":443},"list",[444,446,448,450,452,454,456,458],[445],"Tabellen erkennen und jedes PDF als textbasiert oder gescannt einordnen.",[447],"Zuerst über die Textebene extrahieren; OCR oder Cloud-Layout-API nur für Scans.",[449],"Zeilen- und Spaltenzahlen, leere Zellen und Zahlentypen prüfen.",[451],"Für jede Tabelle eine Textform und ein typisiertes Raster speichern.",[453],"Als eine Eltern-Einheit plus Zeilen-Kinder mit wiederholten Kopfzeilen chunken.",[455],"Aggregationsfragen an SQL oder einen Dataframe, Nachschlagefragen an die Suche leiten.",[457],"In jeder Antwort Seite und Tabellen-ID zitieren.",[459],"Nach jedem Parser- oder Prompt-Wechsel an einem bewerteten Set eigener Tabellen neu testen.",{"type":136,"content":461},[462,463,467],"Wenn Ihr RAG-System aus Datenblättern, Preislisten oder regulatorischen Tabellen antworten muss und diese Antworten belastbar sein sollen, sehen Sie sich meine ",{"tag":147,"to":464,"children":465},"\u002Fexpertise\u002Fai-engineer",[466],"KI-Engineering-Arbeit"," an.",{"type":153,"level":154,"id":132,"text":133},{"type":442,"ordered":170,"items":470},[471,474,477,480,483,486,489,492,495,498,501,504],[472],{"tag":162,"href":39,"children":473},[38],[475],{"tag":162,"href":42,"children":476},[41],[478],{"tag":162,"href":45,"children":479},[44],[481],{"tag":162,"href":48,"children":482},[47],[484],{"tag":162,"href":51,"children":485},[50],[487],{"tag":162,"href":54,"children":488},[53],[490],{"tag":162,"href":57,"children":491},[56],[493],{"tag":162,"href":60,"children":494},[59],[496],{"tag":162,"href":63,"children":497},[62],[499],{"tag":162,"href":66,"children":500},[65],[502],{"tag":162,"href":69,"children":503},[68],[505],{"tag":162,"href":72,"children":506},[71],[508,583,641,699],{"slug":509,"published":510,"minutes":511,"category":8,"tags":512,"keywords":517,"about":530,"sources":540,"cover":577,"og":578,"expertise":75,"locales":579,"lang":78,"title":580,"description":581,"coverAlt":582},"embedding-model-selection-2026","2026-10-17",9,[513,10,514,515,516],"Embeddings","MTEB","Vector search","Model selection",[518,519,520,521,522,523,524,525,526,527,528,529],"best embedding model 2026","how to choose an embedding model","embedding model comparison","MTEB leaderboard explained","RTEB benchmark","open source embedding model","multilingual embedding model","voyage-4 vs openai embeddings","Qwen3-Embedding","EmbeddingGemma","embedding model for RAG","switching embedding models re-embed",[531,534,537],{"name":532,"url":533},"Word embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWord_embedding",{"name":535,"url":536},"Information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInformation_retrieval",{"name":538,"url":539},"Discounted cumulative gain","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDiscounted_cumulative_gain",[541,544,547,550,553,556,559,562,565,568,571,574],{"title":542,"url":543},"Enevoldsen et al.: MMTEB, Massive Multilingual Text Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.13595",{"title":545,"url":546},"Hugging Face: Introducing RTEB, a new standard for retrieval evaluation (Oct 2025)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Frteb",{"title":548,"url":549},"OpenAI: Vector embeddings guide","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fembeddings",{"title":551,"url":552},"OpenAI: API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":554,"url":555},"Voyage AI: The Voyage 4 model family, shared embedding space with MoE architecture (Jan 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F01\u002F15\u002Fvoyage-4\u002F",{"title":557,"url":558},"Voyage AI: Text embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fembeddings",{"title":560,"url":561},"Voyage AI: Pricing","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fpricing",{"title":563,"url":564},"Google: Gemini API embeddings documentation","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fembeddings",{"title":566,"url":567},"Google: Gemini API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":569,"url":570},"Cohere: Embed models documentation","https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Fcohere-embed",{"title":572,"url":573},"Qwen: Qwen3-Embedding-8B model card","https:\u002F\u002Fhuggingface.co\u002FQwen\u002FQwen3-Embedding-8B",{"title":575,"url":576},"Google Developers Blog: Introducing EmbeddingGemma (Sep 2025)","https:\u002F\u002Fdevelopers.googleblog.com\u002Fen\u002Fintroducing-embeddinggemma\u002F","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fog.jpg",[77,78,79],"Embedding-Modell wählen 2026: Leaderboards, Kosten und ein Vergleichstest mit eigenen Daten","Wie man 2026 ein Embedding-Modell für RAG wählt: was MTEB und RTEB aussagen, API oder offene Gewichte, Preise, Dimensionen und ein einwöchiger Vergleichstest.","Drei Säulen aus gestapelten Blöcken, die mittlere am höchsten, jede mit kurzem Balken und weiter Klammer.",{"slug":584,"published":510,"minutes":585,"category":8,"tags":586,"keywords":590,"about":602,"sources":610,"cover":635,"og":636,"expertise":75,"locales":637,"lang":78,"title":638,"description":639,"coverAlt":640},"contextual-retrieval-late-chunking",10,[10,587,513,588,589],"Chunking","Contextual retrieval","Late chunking",[591,592,593,594,595,596,597,598,599,600,601],"contextual retrieval","anthropic contextual retrieval","late chunking","contextual chunk embeddings","contextual embeddings rag","contextual bm25","chunk context rag","voyage-context-3","voyage-context-4","late chunking vs contextual retrieval","rag chunking context loss",[603,604,607],{"name":28,"url":29},{"name":605,"url":606},"Okapi BM25","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOkapi_BM25",{"name":608,"url":609},"Sentence embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSentence_embedding",[611,614,617,620,623,626,629,632],{"title":612,"url":613},"Anthropic: Introducing Contextual Retrieval (Sep 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fcontextual-retrieval",{"title":615,"url":616},"Günther et al.: Late Chunking, Contextual Chunk Embeddings Using Long-Context Embedding Models (2024, rev. 2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2409.04701",{"title":618,"url":619},"Jina AI: Late Chunking in Long-Context Embedding Models (Aug 2024)","https:\u002F\u002Fjina.ai\u002Fnews\u002Flate-chunking-in-long-context-embedding-models\u002F",{"title":621,"url":622},"Voyage AI: Introducing voyage-context-3 (Jul 2025)","https:\u002F\u002Fblog.voyageai.com\u002F2025\u002F07\u002F23\u002Fvoyage-context-3\u002F",{"title":624,"url":625},"Voyage AI: voyage-context-4 (Jun 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F06\u002F29\u002Fvoyage-context-4\u002F",{"title":627,"url":628},"Voyage AI: Contextualized chunk embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fcontextualized-chunk-embeddings",{"title":630,"url":631},"Anthropic: Claude API pricing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fpricing",{"title":633,"url":634},"Qu, Tu and Bao: Is Semantic Chunking Worth the Computational Cost? (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2410.13070","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fog.jpg",[77,78,79],"Contextual Retrieval und Late Chunking: RAG-Chunks ihren Kontext zurückgeben","Chunks verlieren ihr Dokument. Wie Contextual Retrieval, Late Chunking und kontextuelle Embeddings das beheben, was sie kosten, wann man verzichtet.","Vier lose Quadrate, unten von einer breiten Klammer gebündelt und je nach oben mit einer großen Fläche verbunden.",{"slug":642,"published":510,"minutes":511,"category":8,"tags":643,"keywords":647,"about":660,"sources":668,"cover":693,"og":694,"expertise":75,"locales":695,"lang":78,"title":696,"description":697,"coverAlt":698},"rag-access-control-permissions",[10,644,645,646,515],"Access control","Security","Multi-tenancy",[648,649,650,651,652,653,654,655,656,657,658,659],"rag access control","permission aware rag","document level security rag","rag multi tenancy","vector database access control","pgvector row level security","security trimming azure ai search","openfga rag authorization","qdrant multitenancy","pinecone namespaces multitenancy","owasp llm08 vector and embedding weaknesses","rag data leakage",[661,664,667],{"name":662,"url":663},"Access-control list","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAccess-control_list",{"name":665,"url":666},"Multitenancy","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",{"name":28,"url":29},[669,672,675,678,681,684,687,690],{"title":670,"url":671},"OWASP GenAI Security Project: LLM08:2025 Vector and Embedding Weaknesses","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm082025-vector-and-embedding-weaknesses\u002F",{"title":673,"url":674},"PostgreSQL documentation: Row Security Policies","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-rowsecurity.html",{"title":676,"url":677},"pgvector README: filtering and iterative index scans","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"title":679,"url":680},"Qdrant: Multitenancy and partitions guide","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fguides\u002Fmultiple-partitions\u002F",{"title":682,"url":683},"Pinecone: Implement multitenancy using namespaces","https:\u002F\u002Fdocs.pinecone.io\u002Fguides\u002Findex-data\u002Fimplement-multitenancy",{"title":685,"url":686},"Microsoft Learn: Document-level access control in Azure AI Search","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fsearch-document-level-access-overview",{"title":688,"url":689},"OpenFGA: RAG authorization use case","https:\u002F\u002Fopenfga.dev\u002Fdocs\u002Fuse-cases\u002Frag-authorization",{"title":691,"url":692},"Morris et al.: Text Embeddings Reveal (Almost) As Much As Text (EMNLP 2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2310.06816","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fog.jpg",[77,78,79],"Zugriffskontrolle für RAG: berechtigungsbewusstes Retrieval ohne Datenlecks","Wie RAG-Assistenten Dokumente preisgeben und wie man das stoppt: ACLs an jedem Chunk, Vorfilter, Row-Level Security in pgvector, Rechte-Sync und Lecktests.","Sieben Karten in einer Reihe, sechs mit Schloss, eine leere Karte schickt einen Pfeil nach außen.",{"slug":700,"published":510,"minutes":585,"category":8,"tags":701,"keywords":706,"about":718,"sources":726,"cover":753,"og":754,"expertise":755,"locales":756,"lang":78,"title":757,"description":758,"coverAlt":759},"rag-product-catalog-pim-data",[10,702,703,704,705],"PIM","Product data","B2B e-commerce","Metadata filtering",[707,708,709,710,711,712,713,714,715,716,717],"rag product catalog","rag pim data","llm product data","product catalog chatbot","akeneo rag","pimcore ai search","rag structured data","metadata filtering rag","product attributes embeddings","b2b product assistant","etim classification ai",[719,722,723],{"name":720,"url":721},"Product information management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_information_management",{"name":28,"url":29},{"name":724,"url":725},"ETIM (standard)","https:\u002F\u002Fwww.etim-international.com\u002Fclassification\u002F",[727,730,733,736,738,741,744,747,750],{"title":728,"url":729},"Akeneo API: Products, product values, metric values and product models","https:\u002F\u002Fapi.akeneo.com\u002Fconcepts\u002Fproducts.html",{"title":731,"url":732},"Akeneo Help Center: What about products with variants?","https:\u002F\u002Fhelp.akeneo.com\u002Fserenity-take-the-power-over-your-products\u002Fserenity-what-about-products-with-variants",{"title":734,"url":735},"Pimcore documentation: Classification Store","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore\u002FObjects\u002FObject_Classes\u002FData_Types\u002FClassification_Store\u002F",{"title":737,"url":725},"ETIM International: Classification",{"title":739,"url":740},"ETIM International: ETIM releases and the IXF format","https:\u002F\u002Fetim-international.com\u002F?p=754",{"title":742,"url":743},"Reddy et al.: Shopping Queries Dataset, a large-scale ESCI benchmark for improving product search (2022)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2206.06588",{"title":745,"url":746},"Amazon Science: esci-data repository","https:\u002F\u002Fgithub.com\u002Famazon-science\u002Fesci-data",{"title":748,"url":749},"Qdrant documentation: Filtering","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fconcepts\u002Ffiltering\u002F",{"title":751,"url":752},"Sui et al.: Table Meets LLM, can large language models understand structured table data? (WSDM 2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2305.13062","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fog.jpg","b2b-ecommerce-developer",[77,78,79],"RAG über Produktkataloge: aus PIM-Daten Antworten machen, die halten","Produktdaten sind strukturiert, Chunking wie bei PDFs scheitert. So serialisiert man PIM-Attribute, leitet Spezifikationsfragen an Filter und bleibt exakt.","Ein Rahmen aus neun Feldern mit kleinen Symbolen, darunter ein Trichter zu einer einzelnen Karte.",1792342714721]