[{"data":1,"prerenderedAt":666},["ShallowReactive",2],{"blog-pdf-document-parsing-for-rag-hu":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":25,"sources":35,"cover":57,"og":58,"expertise":59,"locales":60,"lang":63,"title":64,"description":65,"coverAlt":66,"metaTitle":67,"takeaways":68,"faq":74,"toc":90,"blocks":121,"others":441},"pdf-document-parsing-for-rag","2026-10-16",9,"rag",[9,10,11,12,13],"RAG","PDF parsing","OCR","Docling","Document AI",[15,16,17,18,19,20,21,22,23,24],"pdf parsing for rag","best pdf parser for rag","docling vs marker","marker vs mineru","pdf to markdown for llm","extract tables from pdf for rag","ocr for rag pipeline","olmocr bench","scanned pdf rag","document parsing llm",[26,29,32],{"name":27,"url":28},"PDF","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPDF",{"name":30,"url":31},"Optical character recognition","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOptical_character_recognition",{"name":33,"url":34},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",[36,39,42,45,48,51,54],{"title":37,"url":38},"Docling: README, features and license (GitHub)","https:\u002F\u002Fgithub.com\u002Fdocling-project\u002Fdocling",{"title":40,"url":41},"Auer et al.: Docling: An Efficient Open-Source Toolkit for AI-driven Document Conversion (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2501.17887",{"title":43,"url":44},"Datalab: Marker README, olmOCR-bench results and license (GitHub)","https:\u002F\u002Fgithub.com\u002Fdatalab-to\u002Fmarker",{"title":46,"url":47},"OpenDataLab: MinerU README and license (GitHub)","https:\u002F\u002Fgithub.com\u002Fopendatalab\u002FMinerU",{"title":49,"url":50},"Poznanski et al.: olmOCR: Unlocking Trillions of Tokens in PDFs with Vision Language Models (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.18443",{"title":52,"url":53},"Claude Platform Docs: PDF support","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fpdf-support",{"title":55,"url":56},"Anthropic: Introducing Contextual Retrieval (Sep 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fcontextual-retrieval","\u002Fimages\u002Fblog\u002Fpdf-document-parsing-for-rag\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fpdf-document-parsing-for-rag\u002Fog.jpg","ai-engineer",[61,62,63],"en","de","hu","PDF-feldolgozás RAG-hoz: layout-pipeline-ok, OCR és vizuális modellek összevetve","Miért a PDF-feldolgozáson múlik a RAG minősége, miben más a Docling, a Marker, a MinerU és a VLM-OCR, és hogyan teszteld a parsert saját dokumentumokon.","Egy PDF-oldal layout-felismerésen, OCR-en és táblázat-helyreállításon át tiszta Markdown-darabokká alakul egy keresőindex számára.","PDF-parsing RAG-hoz: Docling, Marker, MinerU · Balázs Csorba",[69,70,71,72,73],"A PDF-ekre adott rossz RAG-válaszok többsége a feldolgozásnál kezdődik: a hibás olvasási sorrend, a szétesett táblázatok és az ismétlődő fejlécek minden chunkot elrontanak.","A digitálisan készült PDF-ekhez a szövegréteget olvasó layout-pipeline kell; a szkennelt és képletes oldalakhoz OCR vagy teljes oldalt olvasó vizuális modell.","A közzétett parser-benchmarkokat többnyire a gyártó futtatja egyetlen dokumentumkeveréken, ezért választás előtt teszteld 30–50 saját oldalon.","A táblázatokat HTML- vagy Markdown-táblázatként tartsd meg, táblázatonként egy chunkban a fejléccel és a felirattal, ne hagyd, hogy folyó szöveggé essenek szét.","A feldolgozott dokumentumot a parser verziójával együtt tárold, hogy újra chunkolhass és embeddelhess az OCR újbóli megfizetése nélkül.",[75,78,81,84,87],{"q":76,"a":77},"Melyik a legjobb PDF-parser RAG-hoz?","Egyértelmű győztes nincs. A Datalab által közölt olmOCR-bench számokban a Marker balanced módja megelőzi a MinerU pipeline-backendjét és a Doclingot, de ezek a gyártó saját mérései. A Docling licence a legmegengedőbb (MIT), és a legtöbb formátumot kezeli. Tesztelj két-három parsert a saját dokumentumaid mintáján.",{"q":79,"a":80},"Minden PDF-hez kell OCR?","Nem. A Wordből, PIM-ből vagy CMS-ből exportált PDF-eknek van szövegrétege, amelyet a layout-pipeline-ok közvetlenül és olcsón olvasnak. OCR a szkennelt oldalakhoz, fotókhoz és a használhatatlan beágyazott szövegű oldalakhoz kell, a jó pipeline-ok ezeket felismerik, és csak ezeken futtatnak OCR-t.",{"q":82,"a":83},"Nem küldhetem egyszerűen a PDF-et a Claude-nak vagy a GPT-nek?","Néhány dokumentumnál egy beszélgetésben igen: a Claude kérésenként 32 MB-ig és 600 oldalig fogad PDF-et. Egy egyszer indexelt, de sokszor lekérdezett korpusznál sokkal olcsóbb előbb szöveggé alakítani, és így oldalanként chunkolhatsz, embeddelhetsz és hivatkozhatsz.",{"q":85,"a":86},"Hogyan chunkoljuk a táblázatokat RAG-hoz?","Minden táblázat maradjon egyben HTML- vagy Markdown-táblázatként, a feliratával és a legközelebbi címsorral, saját chunkban. Ha túl hosszú, sorok mentén vágd szét, és minden részben ismételd meg a fejlécsort.",{"q":88,"a":89},"GDPR-szempontból rendben van felhős API-val feldolgozni?","Ez az adatokon és a szerződésen múlik. A Docling, a Marker és a MinerU is fut helyben, így a személyes adatok a saját gépeiden maradnak. Hosztolt parsernél vagy LLM API-nál adatfeldolgozási szerződés kell, és tudnod kell, hol történik a feldolgozás.",[91,94,97,100,103,106,109,112,115,118],{"id":92,"title":93},"why-parsing-decides-rag-quality","Miért a PDF-feldolgozáson múlik a RAG minősége?",{"id":95,"title":96},"three-parser-families","Melyik a PDF-parserek három családja?",{"id":98,"title":99},"what-benchmarks-say","Mit mondanak valójában a benchmarkok?",{"id":101,"title":102},"tables-for-rag","Hogyan nyerjük ki és chunkoljuk a táblázatokat?",{"id":104,"title":105},"structure-aware-chunking","Hogyan chunkoljuk a feldolgozott dokumentumokat?",{"id":107,"title":108},"send-pdf-to-model","Mikor küldd a PDF-et közvetlenül a modellnek?",{"id":110,"title":111},"licenses-and-data-protection","Mely licenc- és adatvédelmi kérdések számítanak?",{"id":113,"title":114},"test-a-parser","Hogyan teszteld a parsert a saját dokumentumaidon?",{"id":116,"title":117},"b2b-documents","Mi változik B2B-adatlapoknál és kézikönyveknél?",{"id":119,"title":120},"sources","Források",[122,126,129,132,135,159,168,169,172,211,226,235,236,243,280,283,284,287,320,321,329,336,338,339,346,349,350,377,385,386,389,391,394,401,402,414,417,418],{"type":123,"content":124},"paragraph",[125],"Aki egy gyengén teljesítő RAG-rendszert debuggol, általában az embedding-modellel, a chunkmérettel vagy a prompttal kezdi. PDF-eknél a hiba gyakran korábban van: a parser egy kéthasábos adatlapot összefésült félmondatokká alakított, egy ártáblázatot számsorrá lapított, és az oldal láblécét minden chunkba bemásolta. Egy reranker sem javítja meg azt a szöveget, amely már az embedding előtt hibás volt.",{"type":123,"content":127},[128],"Ez a cikk a PDF-parserek három családját veti össze 2026-ban: a szövegréteg-kinyerést, az olyan layout-pipeline-okat, mint a Docling, a Marker és a MinerU, valamint a teljes oldalt olvasó vizuális modelleket, a projektek által közölt számok alapján. Utána a táblázatokról, a szerkezetet követő chunkolásról, a PDF közvetlen modellnek küldéséről, a licencekről és egy kis tesztről lesz szó, amelyet a döntés előtt a saját dokumentumaidon futtathatsz.",{"type":130,"level":131,"id":92,"text":93},"heading",2,{"type":123,"content":133},[134],"A PDF koordinátákon elhelyezett karaktereket tárol, nem bekezdéseket. Mindent, amire egy RAG-pipeline-nak szüksége van – az olvasási sorrendet, hogy mi címsor, hol kezdődik egy táblázatcella –, rekonstruálni kell. Minden hiba közvetlenül az indexbe kerül:",{"type":136,"items":137},"list",[138,144,149,154],[139,143],{"tag":140,"children":141},"strong",[142],"Olvasási sorrend:"," a többhasábos elrendezés, a széljegyzetek és a képaláírások soronként összekeverednek, így egy chunkba két, egymáshoz nem tartozó mondat kerül.",[145,148],{"tag":140,"children":146},[147],"Táblázatok:"," szerkezet-helyreállítás nélkül a táblázat oszlopnevek nélküli értéksorrá válik, és a modell találgat, melyik szám melyik termékhez tartozik.",[150,153],{"tag":140,"children":151},[152],"Ismétlődő elemek:"," a fejlécek, láblécek és oldalszámok minden oldalon megjelennek, és lényegtelen chunkokat húznak a találati lista elejére.",[155,158],{"tag":140,"children":156},[157],"Szkennelt oldalak és rossz szövegréteg:"," a szkennelt oldalakon egyáltalán nincs szöveg, egyes exportált PDF-ek pedig hibás szövegréteget hordoznak, amely a képernyőn jól néz ki, de kinyerve értelmetlen karaktersor.",{"type":123,"content":160},[161,162,167],"Ezért a visszakeresést és a generálást külön értékelem, ahogy a ",{"tag":163,"to":164,"children":165},"link","\u002Fblog\u002Frag-evaluation-metrics",[166],"RAG értékelése"," cikkben leírtam. Ha PDF-eknél a visszakeresés hibázik, mielőtt bármi máshoz nyúlnál, nyisd meg a hibás oldal feldolgozott szövegét.",{"type":130,"level":131,"id":95,"text":96},{"type":123,"content":170},[171],"A parserek elsősorban abban különböznek, mit olvasnak: a beágyazott szövegréteget, az oldal renderelt képét vagy mindkettőt.",{"type":173,"head":174,"rows":183},"table",[175,177,179,181],[176],"Család",[178],"Példák",[180],"Erősség",[182],"Gyengeség",[184,193,202],[185,187,189,191],[186],"Szövegréteg-kinyerés",[188],"PyMuPDF, pdfplumber, pypdf",[190],"Gyors, csak CPU, pontos karakterek",[192],"Nincs layout és táblázat, szkennelt oldalon semmi",[194,196,198,200],[195],"Layout-pipeline-ok",[197],"Docling, Marker, MinerU (pipeline), Unstructured",[199],"Olvasási sorrend, táblázatok, címsorok; OCR csak ahol kell",[201],"Több modellt kell futtatni; a bonyolult, egymásba ágyazott layout még mindig elromlik",[203,205,207,209],[204],"Teljes oldalt olvasó vizuális modellek",[206],"olmOCR, Chandra, MinerU (VLM), GraniteDocling",[208],"Szkennelt, képletes és rendezetlen oldalakon a legjobb",[210],"GPU-költség; olyan szöveget is hallucinálhat, ami nincs az oldalon",{"type":123,"content":212},[213,214,217,218,221,222,225],"A határok elmosódnak. A ",{"tag":215,"href":38,"children":216},"a",[12]," (MIT-licenc) alapból a szövegrétegen futtat layout- és táblázatszerkezet-modelleket, de átkapcsolható egy VLM-pipeline-ra a 258M paraméteres GraniteDocling modellel. A ",{"tag":215,"href":44,"children":219},[220],"Marker"," ma már a layoutot, az OCR-t és a táblázatfelismerést a helyben futó surya VLM-en keresztül végzi, a digitális szöveget viszont továbbra is a PDF-ből olvassa. A ",{"tag":215,"href":47,"children":223},[224],"MinerU"," pipeline- és VLM-backendet is kínál. A gyakorlatban nem az a kérdés, melyik eszköz, hanem hogy melyik mód melyik oldalakhoz.",{"type":227,"attrs":228,"inner":232,"caption":233},"diagram",{"viewBox":229,"role":230,"aria-labelledby":231},"0 0 720 170","img","pdfr1-t pdfr1-d","\u003Ctitle id=\"pdfr1-t\">Feldolgozási út választása oldalanként\u003C\u002Ftitle>\u003Cdesc id=\"pdfr1-d\">Az oldalt megvizsgáljuk, van-e használható szövegrétege. A digitális oldalak layout-pipeline-ba kerülnek, amely a szövegréteget olvassa és helyreállítja a táblázatokat. A használható szöveg nélküli oldalak OCR-hez vagy vizuális modellhez kerülnek. Mindkét út strukturált Markdownt vagy JSON-t ad, amelyet címsorok és táblázatok mentén chunkolunk.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"pdfr1-ah\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Crect x=\"20\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"79\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">PDF-oldal\u003C\u002Ftext>\u003Ctext x=\"79\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">szövegréteg?\u003C\u002Ftext>\u003Cpath d=\"M138 85H158\" class=\"d-line\" marker-end=\"url(#pdfr1-ah)\" \u002F>\u003Crect x=\"160\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"220\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Layout\u003C\u002Ftext>\u003Ctext x=\"220\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">sorrend, címek\u003C\u002Ftext>\u003Cpath d=\"M279 85H299\" class=\"d-line\" marker-end=\"url(#pdfr1-ah)\" \u002F>\u003Crect x=\"301\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"360\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">OCR \u002F VLM\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">csak szkennelt\u003C\u002Ftext>\u003Cpath d=\"M419 85H439\" class=\"d-line\" marker-end=\"url(#pdfr1-ah)\" \u002F>\u003Crect x=\"441\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"500\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Táblázatok\u003C\u002Ftext>\u003Ctext x=\"500\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">HTML-cellák\u003C\u002Ftext>\u003Cpath d=\"M560 85H580\" class=\"d-line\" marker-end=\"url(#pdfr1-ah)\" \u002F>\u003Crect x=\"582\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"641\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Chunkok\u003C\u002Ftext>\u003Ctext x=\"641\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">szerkezet szerint\u003C\u002Ftext>",[234],"A jó pipeline oldalanként dönt, nem dokumentumonként: OCR csak ott, ahol a szövegréteg hiányzik vagy hibás.",{"type":130,"level":131,"id":98,"text":99},{"type":123,"content":237},[238,239,242],"Jelenleg a leghasznosabb közös mérce az Allen Institute for AI olmOCR-bench-e, amelyet az ",{"tag":215,"href":50,"children":240},[241],"olmOCR-tanulmány"," vezetett be: nagyjából 1400 PDF több ezer sikeres\u002Fsikertelen egységteszttel képletekre, táblázatokra, olvasási sorrendre, fej- és láblécekre és régi szkennelt oldalakra. Az egységtesztek jobban illenek a RAG-hoz, mint a szerkesztési távolság, mert olyan tényeket ellenőriznek, amelyek számítanak, például hogy egy táblázatcella a megfelelő fejléc mellett áll-e.",{"type":173,"head":244,"rows":253},[245,247,249,251],[246],"Rendszer (Datalab mérése, GPU)",[248],"Összesen",[250],"Csak digitális",[252],"Áteresztés",[254,263,272],[255,257,259,261],[256],"Marker, balanced mód",[258],"76.0",[260],"83.5",[262],"2.9 pg\u002Fs",[264,266,268,270],[265],"MinerU, pipeline-backend",[267],"72.7",[269],"83.3",[271],"0.54 pg\u002Fs",[273,274,276,278],[12],[275],"50.3",[277],"64.0",[279],"2.1 pg\u002Fs",{"type":123,"content":281},[282],"A táblázatot fenntartással kell olvasni: a Markert a Datalab fejleszti, mindhárom eszközt a saját hardverén mérte, a Docling az alapértelmezett pipeline-jával futott, a MinerU VLM-backendje pedig – amely a Datalab szerint is jobb eredményt ér el – nincs benne. A Datalab a saját, teljes oldalt olvasó dokumentum-VLM-jét, a Chandrát ugyanezen a benchmarkon 85,8-cal tünteti fel. Két dolog ettől még áll. Digitális PDF-eken a két élen álló pipeline szinte fej fej mellett van, így a sebesség és a licenc is dönthet. A nehéz oldalakon pedig a teljes oldalt olvasó VLM-ek nyernek, ezért éri meg oldalanként irányítani.",{"type":130,"level":131,"id":101,"text":102},{"type":123,"content":285},[286],"A műszaki és kereskedelmi dokumentumokban éppen a táblázatok hordozzák azokat a tényeket, amelyekre a felhasználók a leggyakrabban kérdeznek: méretek, tűrések, árak, szállítási idők. Kezeld őket önálló objektumként:",{"type":136,"ordered":288,"items":289},true,[290,295,300,305,315],[291,294],{"tag":140,"children":292},[293],"Maradjon meg a szerkezet a kimenetben."," A táblázatokat HTML- vagy Markdown-táblázatként exportáld, ne szövegként. A Marker HTML-blokként adja ki a táblázatokat, a Docling Markdownt, HTML-t és veszteségmentes JSON-t exportál.",[296,299],{"tag":140,"children":297},[298],"Egy táblázat, egy chunk,"," a feliratával és a legközelebbi címsorral együtt, hogy a chunkból kiderüljön, miről szól.",[301,304],{"tag":140,"children":302},[303],"A hosszú táblázatot sorok mentén vágd szét",", és minden részben ismételd meg a fejlécsort; egy oszlopnevek nélküli sor csak zaj.",[306,309,310,314],{"tag":140,"children":307},[308],"Az oldalakon átnyúló táblázatokat egyesítsd."," Ez ismert gyenge pont; a Marker opcionális ",{"tag":311,"children":312},"code",[313],"--use_llm"," módja LLM-mel egyesíti az oldalakon átnyúló táblázatokat és javítja a formázásukat, plusz költségért.",[316,319],{"tag":140,"children":317},[318],"Ha az adat máshol is megvan, azt használd."," Az ERP-ből származó árlista egy lekérdezhető adatbázisba való, nem egy PDF-be, amelyet aztán visszafejtünk.",{"type":130,"level":131,"id":104,"text":105},{"type":123,"content":322},[323,324,328],"Ha a parser helyreállította a címsorokat, azok mentén chunkolj, ne N tokenenként vágj. Egy címsor alatti szakasz általában egy téma, a címsor-útvonal (dokumentumcím, fejezet, szakasz) pedig rövid és olcsó kontextus-előtagot ad minden chunknak. A chunkméretekről, a hibrid keresésről és a rerankingről az ",{"tag":163,"to":325,"children":326},"\u002Fblog\u002Frag-pipeline-chunking-hybrid-search-reranking",[327],"Éles RAG-pipeline lépésről lépésre"," cikkben írtam.",{"type":123,"content":330},[331,332,335],"Az Anthropic ",{"tag":215,"href":56,"children":333},[334],"Contextual Retrieval"," módszere egy lépéssel tovább megy: az embedding előtt egy LLM a teljes dokumentum alapján rövid kontextusmondatot ír minden chunkhoz. Prompt cachinggel az Anthropic az egyszeri költséget millió dokumentumtokenenként 1,02 dollárra becsülte. Tiszta feldolgozásra építve működik a legjobban, mert a kontextusmondat csak annyira jó, amennyire a modell által olvasott dokumentumszöveg.",{"type":311,"code":337},"# Illustrative: chunk a parsed Markdown document by headings, keep tables whole\nimport re\n\ndef chunks(md: str, doc_title: str, max_chars: int = 3000):\n    path, buf = [doc_title], []\n    for block in re.split(r\"\\n(?=#{1,3} )|\\n\\n\", md):\n        if m := re.match(r\"(#{1,3}) (.+)\", block):\n            yield from flush(path, buf); buf = []\n            level = len(m.group(1)); path = path[:level] + [m.group(2)]\n        elif block.lstrip().startswith((\"|\", \"\u003Ctable\")):\n            yield from flush(path, buf); buf = []\n            yield {\"context\": \" > \".join(path), \"text\": block, \"kind\": \"table\"}\n        else:\n            buf.append(block)\n            if sum(map(len, buf)) > max_chars:\n                yield from flush(path, buf); buf = []\n    yield from flush(path, buf)\n\ndef flush(path, buf):\n    if buf:\n        yield {\"context\": \" > \".join(path), \"text\": \"\\n\\n\".join(buf), \"kind\": \"text\"}\n",{"type":130,"level":131,"id":107,"text":108},{"type":123,"content":340},[341,342,345],"A frontier modellek natívan olvasnak PDF-et. A ",{"tag":215,"href":53,"children":343},[344],"Claude PDF-támogatása"," 32 MB-ig és 600 oldalig fogad kéréseket (100 oldalig, ha a kérés kontextusablaka egymillió token alatt van), és minden oldalt képként dolgoz fel. Ha egy felhasználó egy szerződést tölt fel a chatbe, ez a legegyszerűbb és gyakran a legjobb megoldás.",{"type":123,"content":347},[348],"Egy korpusznál megfordul a számítás. Minden lekérdezés újra fizetne az oldalak elolvasásáért, nem tudsz rangsorolni olyan oldalakat, amelyeket nem embeddeltél, a hivatkozásokhoz pedig stabil oldal- és chunkazonosítók kellenek. Az olmOCR szerzői szerint egymillió oldal konvertálása GPT-4o-val több mint 6240 dollár, a saját GPU-ikon futó nyílt 7B modelljükkel 176 dollár. Egyszer dolgozd fel, indexeld, és a modellnek csak a visszakeresett chunkokat küldd.",{"type":130,"level":131,"id":110,"text":111},{"type":173,"head":351,"rows":358},[352,354,356],[353],"Parser",[355],"Kód licence",[357],"Modellsúlyok",[359,365,371],[360,361,363],[12],[362],"MIT",[364],"Az egyes modellek saját licence",[366,367,369],[220],[368],"Apache 2.0",[370],"Módosított OpenRAIL-M: ingyenes kutatásra, magáncélra és 5 millió dollár finanszírozás vagy bevétel alatti startupoknak; felette fizetős",[372,373,375],[224],[374],"MinerU Open Source License (Apache 2.0 kiegészítő feltételekkel)",[376],"Lásd a repót",{"type":123,"content":378},[379,380,384],"Egy ügyfélprojekt élesítése előtt a súlyok licencét is ellenőrizd, ne csak a kódét; különösen a Marker feltételei függnek a cég méretétől. Mindhárom fut helyben, ami akkor fontos, ha a dokumentumok személyes adatot tartalmaznak, például számlákat, HR-aktákat vagy ügyfélszolgálati jegyeket. Ha mégis hosztolt parsert vagy LLM API-t használsz, a ",{"tag":163,"to":381,"children":382},"\u002Fblog\u002Fgdpr-llm-api-eu-data-residency",[383],"GDPR és LLM-adattárolás"," cikk kérdései változatlanul érvényesek.",{"type":130,"level":131,"id":113,"text":114},{"type":123,"content":387},[388],"Vedd át az olmOCR-bench ötletét, és írj egységteszteket a saját oldalaidra. Válassz 30–50 oldalt, amelyek jól képviselik a korpuszt, a csúnyákat is: egy szkennelt szállítólevelet, egy kéthasábos adatlapot, egy oldalon átnyúló táblázatot. Minden oldalhoz írj néhány ellenőrzést, amelyen egy helyes feldolgozásnak át kell mennie, és futtasd le rajtuk az összes jelöltet.",{"type":311,"code":390},"# Illustrative page checks, scored per parser\nCHECKS = [\n  {\"page\": \"datasheet-p2\", \"present\": \"Operating temperature -20 to 60 °C\"},\n  {\"page\": \"datasheet-p2\", \"order\": [\"Dimensions\", \"Weight\", \"Material\"]},\n  {\"page\": \"pricelist-p1\", \"cell\": {\"row\": \"ART-10001\", \"col\": \"Unit price\", \"value\": \"12.40\"}},\n  {\"page\": \"delivery-note-scan\", \"present\": \"Lieferschein Nr. 48211\"},\n  {\"page\": \"manual-p7\", \"absent\": \"Page 7 of 112\"},   # footer must not leak into text\n]\n",{"type":123,"content":392},[393],"Minden parsert értékelj a sikeres ellenőrzések aránya, a saját hardvereden mért oldal\u002Fmásodperc és a költség alapján. Utána futtasd le a visszakeresési értékelést a győztes kimenetén, mert az ellenőrzéseket megnyerő parser általában, de nem mindig nyeri a visszakeresést is.",{"type":395,"variant":396,"title":397,"body":398},"callout","tip","Egyszer dolgozd fel, őrizd meg a köztes eredményt",[399],[400],"A strukturált kimenetet (Docling JSON, Marker JSON vagy Markdown) a parser nevével, verziójával és módjával együtt tárold. A chunkolás és az embedding gyakran változik; az OCR a drága lépés, amelyért csak akkor akarsz újra fizetni, ha szándékosan parsert váltasz.",{"type":130,"level":131,"id":116,"text":117},{"type":123,"content":403},[404,405,408,409,413],"Az ipari dokumentumok tele vannak cikkszámokkal, mértékegységekkel és táblázatokkal, és éppen itt fájnak a szövegréteg hibái: egy elveszett kötőjel az ",{"tag":311,"children":406},[407],"ART-10001","-ben, kérdőjellé vált fokjel, kimaradt mértékegység-oszlop. A pontos azonosítókat a vektorok mellett kulcsszóindexszel is tedd kereshetővé, ahogy a ",{"tag":163,"to":410,"children":411},"\u002Fblog\u002Fsemantic-product-search-b2b",[412],"szemantikus termékkeresés B2B-webshopokban"," cikkben leírtam, és vegyél fel cikkszám-ellenőrzéseket a parser-tesztkészletbe.",{"type":123,"content":415},[416],"Sok adatlap strukturált adatként is megvan egy PIM-ben. Ahol igen, ott a PIM-attribútumokat indexeld, a PDF-et pedig hivatkozásként linkeld, ahelyett hogy visszafejtenéd a PIM által előállított PDF-et. Ha csak PDF-ed van, az ésszerű alapértelmezés egy szelektív OCR-rel dolgozó layout-pipeline, a teljes oldalt olvasó VLM-et pedig tartsd meg azokra az oldalakra, amelyeken elbukik.",{"type":130,"level":131,"id":119,"text":120},{"type":136,"ordered":288,"items":419},[420,423,426,429,432,435,438],[421],{"tag":215,"href":38,"children":422},[37],[424],{"tag":215,"href":41,"children":425},[40],[427],{"tag":215,"href":44,"children":428},[43],[430],{"tag":215,"href":47,"children":431},[46],[433],{"tag":215,"href":50,"children":434},[49],[436],{"tag":215,"href":53,"children":437},[52],[439],{"tag":215,"href":56,"children":440},[55],[442,499,553,597],{"slug":443,"published":5,"minutes":444,"category":7,"tags":445,"keywords":450,"about":461,"sources":471,"cover":493,"og":494,"expertise":59,"locales":495,"lang":63,"title":496,"description":497,"coverAlt":498},"multilingual-rag-german-hungarian",7,[9,446,447,448,449],"Multilingual","Embeddings","German","Hungarian",[451,452,453,454,455,456,457,458,459,460],"multilingual rag","german rag embeddings","hungarian nlp search","cross-lingual retrieval","multilingual embedding model","bge-m3 german","german compound words search","hungarian stemming postgres","multilingual-e5-large-instruct","qwen3 embedding multilingual",[462,465,468],{"name":463,"url":464},"Cross-language information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCross-language_information_retrieval",{"name":466,"url":467},"Agglutinative language","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAgglutinative_language",{"name":469,"url":470},"Compound (linguistics)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCompound_(linguistics)",[472,475,478,481,484,487,490],{"title":473,"url":474},"Enevoldsen et al.: MMTEB: Massive Multilingual Text Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.13595",{"title":476,"url":477},"Chen et al.: M3-Embedding (BGE-M3): Multi-Linguality, Multi-Functionality, Multi-Granularity (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2402.03216",{"title":479,"url":480},"Zhang et al.: Qwen3 Embedding: Advancing Text Embedding and Reranking Through Foundation Models (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.05176",{"title":482,"url":483},"Hugging Face: intfloat\u002Fmultilingual-e5-large-instruct model card","https:\u002F\u002Fhuggingface.co\u002Fintfloat\u002Fmultilingual-e5-large-instruct",{"title":485,"url":486},"Elasticsearch Reference: Hyphenation decompounder token filter","https:\u002F\u002Fwww.elastic.co\u002Fdocs\u002Freference\u002Ftext-analysis\u002Fanalysis-hyp-decomp-tokenfilter",{"title":488,"url":489},"PostgreSQL 18 Documentation: Text search dictionaries","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Ftextsearch-dictionaries.html",{"title":491,"url":492},"Snowball: stemming algorithms by language","https:\u002F\u002Fsnowballstem.org\u002Falgorithms\u002F","\u002Fimages\u002Fblog\u002Fmultilingual-rag-german-hungarian\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fmultilingual-rag-german-hungarian\u002Fog.jpg",[61,62,63],"Többnyelvű RAG német és magyar tartalomra: embeddingek, összetett szavak és nyelvek közötti keresés","RAG német és magyar tartalom fölött: többnyelvű embeddingek, összetett szavak, szótövezés, ékezetek és nyelvenkénti értékelés.","Egy német és egy magyar kérdés egy közös többnyelvű vektortérben találkozik a nyelvenkénti kulcsszóindexek mellett, majd reranker és válasz következik.",{"slug":500,"published":5,"minutes":501,"category":7,"tags":502,"keywords":508,"about":519,"sources":528,"cover":547,"og":548,"expertise":59,"locales":549,"lang":63,"title":550,"description":551,"coverAlt":552},"text-to-sql-llm-guardrails",8,[503,504,505,506,507],"Text-to-SQL","LLM security","PostgreSQL","Agents","Analytics",[509,510,511,512,513,514,515,516,517,518],"text to sql llm","text-to-sql guardrails","llm sql agent security","natural language to sql production","read only database role llm","bird benchmark text to sql","spider 2.0 benchmark","sqlglot validate sql","row level security llm","chat with your database",[520,523,526],{"name":521,"url":522},"SQL","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSQL",{"name":524,"url":525},"Natural language interface to databases","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNatural-language_user_interface",{"name":505,"url":527},"https:\u002F\u002Fwww.postgresql.org\u002F",[529,532,535,538,541,544],{"title":530,"url":531},"BIRD-bench: leaderboard and dataset description","https:\u002F\u002Fbird-bench.github.io\u002F",{"title":533,"url":534},"Lei et al.: Spider 2.0: Evaluating Language Models on Real-World Enterprise Text-to-SQL Workflows (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2411.07763",{"title":536,"url":537},"PostgreSQL 18 Documentation: Row Security Policies","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-rowsecurity.html",{"title":539,"url":540},"PostgreSQL 18 Documentation: Client Connection Defaults (read-only and timeouts)","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fruntime-config-client.html",{"title":542,"url":543},"SQLGlot: SQL parser, transpiler and optimizer (GitHub)","https:\u002F\u002Fgithub.com\u002Ftobymao\u002Fsqlglot",{"title":545,"url":546},"OWASP Gen AI Security Project: LLM06:2025 Excessive Agency","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm062025-excessive-agency\u002F","\u002Fimages\u002Fblog\u002Ftext-to-sql-llm-guardrails\u002Fcover.webp","\u002Fimages\u002Fblog\u002Ftext-to-sql-llm-guardrails\u002Fog.jpg",[61,62,63],"Text-to-SQL LLM-mel: sémakontextus, csak olvasható szerepkörök és működő validálás","Mennyire pontos valójában a text-to-SQL, hogyan kapjon sémakontextust a modell, és milyen adatbázis- és kódszintű korlátok teszik biztonságossá az SQL-t.","Egy kérdés sémakontextuson, SQL-generáláson, egy validátoron és egy csak olvasható adatbázis-szerepkörön halad át, mielőtt visszajön az eredménytáblázat.",{"slug":554,"published":5,"minutes":555,"category":7,"tags":556,"keywords":560,"about":571,"sources":581,"cover":591,"og":592,"expertise":59,"locales":593,"lang":63,"title":594,"description":595,"coverAlt":596},"embedding-quantization-binary-matryoshka",5,[447,557,558,559,9],"Vector search","Quantization","pgvector",[561,562,563,564,565,566,567,568,569,570],"embedding quantization","binary quantization embeddings","int8 embeddings","matryoshka embeddings","reduce vector database memory","pgvector halfvec","pgvector binary_quantize","embedding dimensions reduction","rescoring binary embeddings","vector index memory cost",[572,575,578],{"name":573,"url":574},"Quantization (signal processing)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FQuantization_(signal_processing)",{"name":576,"url":577},"Nearest neighbor search","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNearest_neighbor_search",{"name":579,"url":580},"Hamming distance","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHamming_distance",[582,585,588],{"title":583,"url":584},"Hugging Face: Binary and Scalar Embedding Quantization for Significantly Faster and Cheaper Retrieval (Mar 2024)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Fembedding-quantization",{"title":586,"url":587},"Kusupati et al.: Matryoshka Representation Learning (2022)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2205.13147",{"title":589,"url":590},"pgvector README: halfvec, bit, binary quantization and subvector indexing","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector","\u002Fimages\u002Fblog\u002Fembedding-quantization-binary-matryoshka\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fembedding-quantization-binary-matryoshka\u002Fog.jpg",[61,62,63],"Embedding-kvantálás: bináris, int8 és Matryoshka vektorok a visszakeresés minőségének elvesztése nélkül","Hogyan zsugorítja 4–32-szeresére a vektorindexet a bináris és int8 kvantálás és a Matryoshka-vágás, mennyibe kerül ez, és hogyan hozza vissza a rescoring.","Egy float32 embedding félpontosságúvá, int8-cá és bináris bitekké zsugorodik, egy rescoring lépés pedig visszaállítja a rangsorolás minőségét.",{"slug":598,"published":599,"minutes":600,"category":7,"tags":601,"keywords":605,"about":615,"sources":623,"cover":660,"og":661,"expertise":59,"locales":662,"lang":63,"title":663,"description":664,"coverAlt":665},"graphrag-knowledge-graph-rag","2026-10-02",13,[602,603,604,9],"GraphRAG","Knowledge graphs","LightRAG",[602,606,607,608,609,610,611,612,613,614],"knowledge graph RAG","GraphRAG vs vector RAG","Microsoft GraphRAG explained","LightRAG vs GraphRAG","GraphRAG global vs local search","GraphRAG indexing cost","when to use GraphRAG","multi-hop RAG","LazyGraphRAG",[616,619,620],{"name":617,"url":618},"Knowledge graph","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKnowledge_graph",{"name":33,"url":34},{"name":621,"url":622},"Leiden algorithm","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLeiden_algorithm",[624,627,630,633,636,639,642,645,648,651,654,657],{"title":625,"url":626},"Edge et al.: From Local to Global: A Graph RAG Approach to Query-Focused Summarization (arXiv:2404.16130)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2404.16130",{"title":628,"url":629},"Microsoft GraphRAG documentation: overview","https:\u002F\u002Fmicrosoft.github.io\u002Fgraphrag\u002F",{"title":631,"url":632},"Microsoft GraphRAG documentation: default dataflow","https:\u002F\u002Fmicrosoft.github.io\u002Fgraphrag\u002Findex\u002Fdefault_dataflow\u002F",{"title":634,"url":635},"Microsoft GraphRAG documentation: global search","https:\u002F\u002Fmicrosoft.github.io\u002Fgraphrag\u002Fquery\u002Fglobal_search\u002F",{"title":637,"url":638},"Microsoft GraphRAG documentation: local search","https:\u002F\u002Fmicrosoft.github.io\u002Fgraphrag\u002Fquery\u002Flocal_search\u002F",{"title":640,"url":641},"Microsoft GraphRAG documentation: DRIFT search","https:\u002F\u002Fmicrosoft.github.io\u002Fgraphrag\u002Fquery\u002Fdrift_search\u002F",{"title":643,"url":644},"Microsoft GraphRAG documentation: getting started","https:\u002F\u002Fmicrosoft.github.io\u002Fgraphrag\u002Fget_started\u002F",{"title":646,"url":647},"Microsoft Research: LazyGraphRAG, setting a new standard for quality and cost (25 November 2024)","https:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fresearch\u002Fblog\u002Flazygraphrag-setting-a-new-standard-for-quality-and-cost\u002F",{"title":649,"url":650},"Guo et al.: LightRAG: Simple and Fast Retrieval-Augmented Generation (arXiv:2410.05779)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2410.05779",{"title":652,"url":653},"HKUDS\u002FLightRAG on GitHub","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FLightRAG",{"title":655,"url":656},"Gutiérrez et al.: HippoRAG: Neurobiologically Inspired Long-Term Memory for Large Language Models (arXiv:2405.14831)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2405.14831",{"title":658,"url":659},"Xiang et al.: When to use Graphs in RAG: A Comprehensive Analysis for Graph Retrieval-Augmented Generation (arXiv:2506.05690)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.05690","\u002Fimages\u002Fblog\u002Fgraphrag-knowledge-graph-rag\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fgraphrag-knowledge-graph-rag\u002Fog.jpg",[61,62,63],"GraphRAG és knowledge-graph RAG: mikor veri a gráf a vektoros keresést","Mit csinál valójában a Microsoft GraphRAG és a LightRAG, mennyibe kerül az indexelés, és mikor jobb a tudásgráf a vektoros RAG-nál: multi-hop, globális kérdések, termékkatalógus.","Diagram: egy tudásgráf középen, entitásokhoz, közösségekhez, lokális és globális kereséshez és termékalkatrészekhez kapcsolva.",1792177150730]