{"id":45226,"date":"2026-10-16T21:10:00","date_gmt":"2026-10-16T18:10:00","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/"},"modified":"2026-10-16T21:10:39","modified_gmt":"2026-10-16T18:10:39","slug":"rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/","title":{"rendered":"RAG Uygulamalar\u0131nda Verimli Par\u00e7alama Stratejileri: 5 Y\u00f6ntem ve Python Uygulamalar\u0131"},"content":{"rendered":"<h2>RAG Uygulamalar\u0131nda Verimli Par\u00e7alama Stratejileri: 5 Y\u00f6ntem ve Python Uygulamalar\u0131<\/h2>\n<p>B\u00fcy\u00fck Dil Modelleri (Large Language Models &#8211; LLM) \u00e7a\u011f\u0131nda, kullan\u0131c\u0131lar\u0131n karma\u015f\u0131k sorular\u0131na do\u011fru ve g\u00fcncel yan\u0131tlar verebilmek, bu modellerin yeteneklerini ger\u00e7ek d\u00fcnya bilgileriyle birle\u015ftirmekten ge\u00e7iyor. Ancak LLM&#8217;lerin s\u0131n\u0131rl\u0131 ba\u011flam pencereleri (context window) ve s\u00fcrekli g\u00fcncellenmeyen e\u011fitim verileri, bu birle\u015fimi zorlu bir g\u00f6rev haline getiriyor. \u0130\u015fte tam bu noktada, Geri Kazan\u0131m Art\u0131r\u0131lm\u0131\u015f \u00dcretim (Retrieval Augmented Generation &#8211; RAG) mimarisi devreye giriyor. RAG, bir sorguya yan\u0131t vermeden \u00f6nce ilgili bilgileri harici bir bilgi taban\u0131ndan alarak (retrieve) LLM&#8217;e sunar ve b\u00f6ylece modelin daha bilin\u00e7li ve do\u011fru yan\u0131tlar \u00fcretmesini sa\u011flar. Bu s\u00fcrecin en kritik ad\u0131mlar\u0131ndan biri ise &#8220;par\u00e7alama (chunking)&#8221; i\u015flemidir. Veri par\u00e7alama, b\u00fcy\u00fck metin belgelerini y\u00f6netilebilir, anlaml\u0131 ve LLM&#8217;in ba\u011flam penceresine s\u0131\u011facak k\u00fc\u00e7\u00fck par\u00e7alara ay\u0131rma sanat\u0131d\u0131r. Peki, bu par\u00e7alama i\u015flemini ne kadar verimli yap\u0131yoruz? Do\u011fru par\u00e7alama stratejisi se\u00e7imi, RAG sisteminizin performans\u0131 \u00fczerinde do\u011frudan bir etkiye sahiptir. Bu makalede, RAG sistemlerinizin etkinli\u011fini art\u0131racak 5 farkl\u0131 par\u00e7alama stratejisini detayl\u0131ca inceleyecek ve her biri i\u00e7in Python&#8217;da uygulanabilir kod \u00f6rnekleri sunaca\u011f\u0131z.<\/p>\n<h3>RAG ve Par\u00e7alaman\u0131n Temel Kavramlar\u0131: Neden Bu Kadar \u00d6nemli?<\/h3>\n<p>RAG, yani Geri Kazan\u0131m Art\u0131r\u0131lm\u0131\u015f \u00dcretim, modern yapay zeka uygulamalar\u0131nda b\u00fcy\u00fck dil modellerinin (LLM) bilgi eksikliklerini gidermek ve g\u00fcncel, do\u011fru yan\u0131tlar \u00fcretmelerini sa\u011flamak i\u00e7in kullan\u0131lan g\u00fc\u00e7l\u00fc bir mimaridir. Temel olarak RAG, bir kullan\u0131c\u0131n\u0131n sorusuna yan\u0131t vermeden \u00f6nce, bu soruyla alakal\u0131 bilgileri \u00f6nceden tan\u0131mlanm\u0131\u015f bir bilgi taban\u0131ndan veya veri kayna\u011f\u0131ndan &#8220;geri kazan\u0131r&#8221; (retrieve) ve ard\u0131ndan bu geri kazan\u0131lan bilgileri LLM&#8217;e &#8220;ba\u011flam (context)&#8221; olarak sunarak bir yan\u0131t &#8220;\u00fcretmesini&#8221; (generate) ister. Bu sayede LLM, yaln\u0131zca kendi e\u011fitim verileriyle s\u0131n\u0131rl\u0131 kalmaz, ayn\u0131 zamanda d\u0131\u015far\u0131dan al\u0131nan g\u00fcncel ve \u00f6zelle\u015fmi\u015f bilgilere de eri\u015febilir.<\/p>\n<p>Bu mimarinin etkinli\u011fi, geri kazan\u0131lan bilginin kalitesine do\u011frudan ba\u011fl\u0131d\u0131r. Ancak harici bilgi tabanlar\u0131 genellikle \u00e7ok b\u00fcy\u00fck ve karma\u015f\u0131k metin belgelerinden olu\u015fur. Bir kitab\u0131n tamam\u0131n\u0131, uzun bir makaleyi veya binlerce sayfal\u0131k bir teknik dok\u00fcman\u0131 do\u011frudan bir LLM&#8217;e sunmak m\u00fcmk\u00fcn de\u011fildir; \u00e7\u00fcnk\u00fc LLM&#8217;lerin ba\u011flam pencereleri s\u0131n\u0131rl\u0131d\u0131r. \u00d6rne\u011fin, baz\u0131 LLM&#8217;ler binlerce belirte\u00e7 (token) i\u015fleyebilirken, baz\u0131lar\u0131 daha az\u0131n\u0131 i\u015fleyebilir. Bu ba\u011flam penceresi s\u0131n\u0131rlamas\u0131, &#8220;par\u00e7alama (chunking)&#8221; i\u015flemini zorunlu k\u0131lar.<\/p>\n<p>Par\u00e7alama, b\u00fcy\u00fck metin belgelerini, her biri belirli bir anlam b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc koruyan ve LLM&#8217;in ba\u011flam penceresine s\u0131\u011fabilecek boyutta k\u00fc\u00e7\u00fck &#8220;par\u00e7alara (chunks)&#8221; ay\u0131rma i\u015flemidir. Bu par\u00e7alar daha sonra &#8220;embedding&#8221; ad\u0131 verilen vekt\u00f6r g\u00f6sterimlerine d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr. Embedding&#8217;ler, metin par\u00e7alar\u0131n\u0131n anlamsal i\u00e7eri\u011fini yo\u011fun bir say\u0131 dizisi olarak temsil eder. Bu vekt\u00f6rler, bir vekt\u00f6r veritaban\u0131nda saklan\u0131r. Kullan\u0131c\u0131 bir sorgu sordu\u011funda, bu sorgu da embedding&#8217;e d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr ve vekt\u00f6r veritaban\u0131nda en benzer (yani anlamsal olarak en yak\u0131n) metin par\u00e7alar\u0131 aran\u0131r. Bulunan en alakal\u0131 par\u00e7alar, LLM&#8217;e sunularak yan\u0131t\u0131n \u00fcretilmesine yard\u0131mc\u0131 olur.<\/p>\n<p>Par\u00e7alama i\u015flemi, RAG sisteminin omurgas\u0131n\u0131 olu\u015fturur. Yanl\u0131\u015f veya yetersiz par\u00e7alama, a\u015fa\u011f\u0131daki sorunlara yol a\u00e7abilir:<\/p>\n<ul>\n<li><b>Bilgi Kayb\u0131:<\/b> \u00c7ok k\u00fc\u00e7\u00fck par\u00e7alar, bir konunun b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc bozabilir ve \u00f6nemli ba\u011flam\u0131n kaybolmas\u0131na neden olabilir. \u00d6rne\u011fin, bir c\u00fcmlenin yar\u0131s\u0131 bir par\u00e7ada, di\u011fer yar\u0131s\u0131 ba\u015fka bir par\u00e7ada kal\u0131rsa, her iki par\u00e7a da anlams\u0131z hale gelebilir.<\/li>\n<li><b>Alakas\u0131z Bilgi Getirme:<\/b> \u00c7ok b\u00fcy\u00fck par\u00e7alar, sorguyla do\u011frudan ilgili olmayan bir\u00e7ok gereksiz bilgiyi de beraberinde getirebilir. Bu, LLM&#8217;in dikkatini da\u011f\u0131tabilir ve istenen bilgiyi bulmas\u0131n\u0131 zorla\u015ft\u0131rabilir, hatta &#8220;hall\u00fcsinasyon&#8221; denilen yanl\u0131\u015f veya uydurma yan\u0131tlar \u00fcretmesine yol a\u00e7abilir.<\/li>\n<li><b>Maliyet ve Gecikme:<\/b> B\u00fcy\u00fck par\u00e7alar, LLM&#8217;e daha fazla belirte\u00e7 g\u00f6ndermek anlam\u0131na gelir. Bu da API maliyetlerini art\u0131r\u0131r ve yan\u0131t s\u00fcrelerini uzat\u0131r.<\/li>\n<li><b>Ba\u011flam Penceresi A\u015f\u0131m\u0131:<\/b> LLM&#8217;in ba\u011flam penceresine s\u0131\u011fmayacak kadar b\u00fcy\u00fck par\u00e7alar, sistemin do\u011fru \u00e7al\u0131\u015fmas\u0131n\u0131 engeller.<\/li>\n<\/ul>\n<p>Do\u011fru par\u00e7alama stratejisi, bu sorunlar\u0131 minimize ederek RAG sisteminizin hem daha do\u011fru hem de daha verimli \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Her belgenin ve kullan\u0131m senaryosunun kendine \u00f6zg\u00fc ihtiya\u00e7lar\u0131 oldu\u011fundan, tek bir &#8220;en iyi&#8221; par\u00e7alama y\u00f6ntemi yoktur. Bu nedenle, farkl\u0131 stratejileri anlamak ve do\u011fru zamanda do\u011fru olan\u0131 se\u00e7mek b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r.<\/p>\n<h3>RAG Par\u00e7alama Stratejileri: 5 Etkili Y\u00f6ntem ve Uygulamalar\u0131<\/h3>\n<p>RAG sistemlerinde bilgi geri kazan\u0131m\u0131n\u0131n kalitesini do\u011frudan etkileyen par\u00e7alama i\u015flemi i\u00e7in farkl\u0131 yakla\u015f\u0131mlar mevcuttur. Her bir stratejinin kendine \u00f6zg\u00fc avantajlar\u0131 ve dezavantajlar\u0131 bulunur ve en iyi se\u00e7im genellikle veri tipine, kullan\u0131m senaryosuna ve istenen performansa ba\u011fl\u0131d\u0131r. \u015eimdi, bu 5 etkili par\u00e7alama stratejisini detayl\u0131ca inceleyelim ve her biri i\u00e7in Python&#8217;da \u00e7al\u0131\u015fan kod \u00f6rnekleri sunal\u0131m. Kod \u00f6rneklerinde genellikle LangChain k\u00fct\u00fcphanesini kullanaca\u011f\u0131z, zira metin i\u015fleme ve par\u00e7alama konusunda olduk\u00e7a kapsaml\u0131 ara\u00e7lar sunmaktad\u0131r.<\/p>\n<h4>1. Sabit Boyutlu Par\u00e7alama (Fixed-size Chunking): Basit ve H\u0131zl\u0131 Bir Ba\u015flang\u0131\u00e7<\/h4>\n<p>Sabit boyutlu par\u00e7alama, en temel ve yayg\u0131n kullan\u0131lan y\u00f6ntemlerden biridir. Bu stratejide, metin belgeleri \u00f6nceden belirlenmi\u015f sabit bir karakter veya belirte\u00e7 (token) say\u0131s\u0131na g\u00f6re e\u015fit b\u00fcy\u00fckl\u00fckteki par\u00e7alara ayr\u0131l\u0131r. \u00d6rne\u011fin, her par\u00e7a 500 karakter uzunlu\u011funda olabilir. Bu y\u00f6ntem, uygulanmas\u0131 kolay ve hesaplama a\u00e7\u0131s\u0131ndan olduk\u00e7a verimlidir. \u00d6zellikle metinler aras\u0131nda belirgin bir yap\u0131sal ayr\u0131m bulunmad\u0131\u011f\u0131 veya h\u0131zl\u0131 bir prototipleme gerekti\u011fi durumlarda tercih edilebilir.<\/p>\n<p><strong>Avantajlar\u0131:<\/strong><\/p>\n<ul>\n<li><b>Basitlik:<\/b> Uygulamas\u0131 olduk\u00e7a kolayd\u0131r. Sadece bir par\u00e7a boyutu belirlemek yeterlidir.<\/li>\n<li><b>H\u0131z:<\/b> Metin \u00fczerinde karma\u015f\u0131k analizler gerektirmedi\u011fi i\u00e7in h\u0131zl\u0131 bir \u015fekilde \u00e7al\u0131\u015f\u0131r.<\/li>\n<li><b>Tekd\u00fczelik:<\/b> T\u00fcm par\u00e7alar ayn\u0131 boyutta oldu\u011fu i\u00e7in y\u00f6netimi kolayd\u0131r.<\/li>\n<\/ul>\n<p><strong>Dezavantajlar\u0131:<\/strong><\/p>\n<ul>\n<li><b>Ba\u011flam Kayb\u0131 Riski:<\/b> Bir c\u00fcmlenin veya paragraf\u0131n ortas\u0131ndan kesilme olas\u0131l\u0131\u011f\u0131 y\u00fcksektir. Bu, par\u00e7alar\u0131n anlamsal b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc bozabilir ve \u00f6nemli bilgilerin kaybolmas\u0131na neden olabilir.<\/li>\n<li><b>Anlams\u0131z Par\u00e7alar:<\/b> Bir par\u00e7an\u0131n sonu ile bir sonraki par\u00e7an\u0131n ba\u015f\u0131 aras\u0131nda anlamsal bir ba\u011flant\u0131 kopuklu\u011fu olu\u015fabilir.<\/li>\n<\/ul>\n<p><strong>Ger\u00e7ek D\u00fcnya Senaryosu:<\/strong> B\u00fcy\u00fck bir blog ar\u015fivi veya haber makaleleri koleksiyonu gibi yap\u0131sal olarak \u00e7ok d\u00fczenli olmayan, ancak h\u0131zl\u0131ca indekslenmesi gereken metinler i\u00e7in uygun olabilir. \u00d6rne\u011fin, bir haber portal\u0131n\u0131n ge\u00e7mi\u015f makalelerini h\u0131zl\u0131ca RAG sistemine dahil etmek istedi\u011finizde bu y\u00f6ntemle ba\u015flayabilirsiniz.<\/p>\n<p><strong>Python Uygulamas\u0131:<\/strong><br \/>\nLangChain&#8217;in <code>CharacterTextSplitter<\/code> s\u0131n\u0131f\u0131, bu t\u00fcr bir par\u00e7alama i\u00e7in idealdir.<\/p>\n<div class=\"code-container\">\n<pre><code>\nfrom langchain.text_splitter import CharacterTextSplitter\n\n# \u00d6rnek uzun metin\nuzun_metin = \"\"\"\nRAG (Retrieval Augmented Generation), b\u00fcy\u00fck dil modellerinin (LLM) yeteneklerini art\u0131rmak i\u00e7in kullan\u0131lan g\u00fc\u00e7l\u00fc bir mimaridir.\nBu yakla\u015f\u0131m, bir LLM'in belirli bir sorguya yan\u0131t vermeden \u00f6nce harici bir bilgi taban\u0131ndan ilgili bilgileri geri kazanmas\u0131n\u0131 sa\u011flar.\nB\u00f6ylece model, sadece kendi e\u011fitim verileriyle s\u0131n\u0131rl\u0131 kalmaz, ayn\u0131 zamanda g\u00fcncel ve \u00f6zelle\u015fmi\u015f bilgilere de eri\u015febilir.\nRAG'\u0131n temel amac\u0131, LLM'lerin do\u011fru, g\u00fcncel ve ba\u011flamla alakal\u0131 yan\u0131tlar \u00fcretmesine yard\u0131mc\u0131 olmakt\u0131r.\nBu s\u00fcre\u00e7te en kritik ad\u0131mlardan biri, b\u00fcy\u00fck belgeleri y\u00f6netilebilir par\u00e7alara ay\u0131rma i\u015flemidir: par\u00e7alama (chunking).\nDo\u011fru par\u00e7alama stratejisi se\u00e7imi, RAG sisteminizin performans\u0131n\u0131 do\u011frudan etkiler.\n\u00c7ok k\u00fc\u00e7\u00fck par\u00e7alar ba\u011flam\u0131 bozabilirken, \u00e7ok b\u00fcy\u00fck par\u00e7alar alakas\u0131z bilgileri getirerek performans\u0131 d\u00fc\u015f\u00fcrebilir.\nBu makalede farkl\u0131 par\u00e7alama stratejilerini inceleyece\u011fiz.\n\"\"\"\n\n# Sabit boyutlu par\u00e7alay\u0131c\u0131y\u0131 olu\u015fturma\n# chunk_size: her par\u00e7an\u0131n maksimum karakter say\u0131s\u0131\n# chunk_overlap: par\u00e7alar aras\u0131nda \u00f6rt\u00fc\u015fen karakter say\u0131s\u0131 (bu \u00f6rnekte 0)\ntext_splitter = CharacterTextSplitter(\n    separator=\"\\n\\n\", # Paragraf sonlar\u0131nda b\u00f6lmeye \u00e7al\u0131\u015f\n    chunk_size=200,\n    chunk_overlap=0,\n    length_function=len,\n    is_separator_regex=False,\n)\n\nchunks = text_splitter.create_documents([uzun_metin])\n\nprint(f\"Toplam par\u00e7a say\u0131s\u0131: {len(chunks)}\")\nfor i, chunk in enumerate(chunks):\n    print(f\"\\n--- Par\u00e7a {i+1} (Uzunluk: {len(chunk.page_content)}) ---\")\n    print(chunk.page_content)\n<\/code><\/pre>\n<\/div>\n<p>Bu \u00f6rnekte, metni 200 karakterlik par\u00e7alara ay\u0131rd\u0131k ve par\u00e7alar aras\u0131nda herhangi bir \u00f6rt\u00fc\u015fme (overlap) b\u0131rakmad\u0131k. G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, her par\u00e7a belirlenen boyuta yak\u0131n olacak \u015fekilde olu\u015fturuldu, ancak anlamsal b\u00fct\u00fcnl\u00fck baz\u0131 yerlerde bozulabilir.<\/p>\n<h4>2. \u00d6rt\u00fc\u015fmeli Sabit Boyutlu Par\u00e7alama (Fixed-size Chunking with Overlap): Ba\u011flam\u0131 Koruma<\/h4>\n<p>Sabit boyutlu par\u00e7alaman\u0131n en b\u00fcy\u00fck dezavantaj\u0131 olan ba\u011flam kayb\u0131n\u0131 azaltmak i\u00e7in geli\u015ftirilmi\u015f bir y\u00f6ntemdir. Bu stratejide, par\u00e7alar yine sabit bir boyutta olu\u015fturulur, ancak her par\u00e7a bir \u00f6nceki par\u00e7an\u0131n sonundan belirli bir miktar karakteri veya belirteci &#8220;\u00f6rt\u00fc\u015fme&#8221; (overlap) olarak i\u00e7erir. Bu \u00f6rt\u00fc\u015fme, par\u00e7alar aras\u0131ndaki anlamsal ge\u00e7i\u015fi yumu\u015fatarak, bir bilginin bir par\u00e7an\u0131n sonunda ba\u015flay\u0131p di\u011ferinin ba\u015f\u0131nda devam etmesi durumunda ba\u011flam\u0131n tamamen kaybolmas\u0131n\u0131 engeller.<\/p>\n<p><strong>Avantajlar\u0131:<\/strong><\/p>\n<ul>\n<li><b>Ba\u011flam Koruma:<\/b> Par\u00e7alar aras\u0131ndaki anlamsal s\u00fcreklili\u011fi art\u0131r\u0131r, b\u00f6ylece kritik bilgilerin b\u00f6l\u00fcnerek anlams\u0131z hale gelme riskini azalt\u0131r.<\/li>\n<li><b>Daha \u0130yi Geri Kazan\u0131m:<\/b> \u00d6zellikle bir bilginin birden fazla par\u00e7aya yay\u0131ld\u0131\u011f\u0131 durumlarda, \u00f6rt\u00fc\u015fme sayesinde her iki par\u00e7an\u0131n da ilgili sorgu i\u00e7in geri kazan\u0131lma olas\u0131l\u0131\u011f\u0131 artar.<\/li>\n<\/ul>\n<p><strong>Dezavantajlar\u0131:<\/strong><\/p>\n<ul>\n<li><b>Veri Tekrar\u0131:<\/b> \u00d6rt\u00fc\u015fme nedeniyle veritaban\u0131nda daha fazla tekrar eden bilgi saklan\u0131r, bu da depolama alan\u0131n\u0131 ve indeksleme s\u00fcresini art\u0131rabilir.<\/li>\n<li><b>Hesaplama Maliyeti:<\/b> Daha fazla par\u00e7a olu\u015fturuldu\u011fu i\u00e7in, embedding olu\u015fturma ve vekt\u00f6r veritaban\u0131 sorgular\u0131 biraz daha maliyetli olabilir.<\/li>\n<\/ul>\n<p><strong>Ger\u00e7ek D\u00fcnya Senaryosu:<\/strong> Teknik dok\u00fcmanlar, k\u0131lavuzlar veya uzun ara\u015ft\u0131rma makaleleri gibi, belirli bir konunun farkl\u0131 b\u00f6l\u00fcmlere yay\u0131labilece\u011fi metinler i\u00e7in idealdir. \u00d6rne\u011fin, bir \u015firket i\u00e7i bilgi bankas\u0131nda, bir prosed\u00fcr\u00fcn ad\u0131mlar\u0131 farkl\u0131 paragraflara da\u011f\u0131lm\u0131\u015fsa, \u00f6rt\u00fc\u015fmeli par\u00e7alama bu ad\u0131mlar\u0131n b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc korumaya yard\u0131mc\u0131 olur.<\/p>\n<p><strong>Python Uygulamas\u0131:<\/strong><br \/>\nYine <code>CharacterTextSplitter<\/code> kullanaca\u011f\u0131z, ancak bu sefer <code>chunk_overlap<\/code> parametresini s\u0131f\u0131rdan b\u00fcy\u00fck bir de\u011fere ayarlayaca\u011f\u0131z.<\/p>\n<div class=\"code-container\">\n<pre><code>\nfrom langchain.text_splitter import CharacterTextSplitter\n\n# \u00d6rnek uzun metin\nuzun_metin_overlap = \"\"\"\nRAG (Retrieval Augmented Generation), b\u00fcy\u00fck dil modellerinin (LLM) yeteneklerini art\u0131rmak i\u00e7in kullan\u0131lan g\u00fc\u00e7l\u00fc bir mimaridir.\nBu yakla\u015f\u0131m, bir LLM'in belirli bir sorguya yan\u0131t vermeden \u00f6nce harici bir bilgi taban\u0131ndan ilgili bilgileri geri kazanmas\u0131n\u0131 sa\u011flar.\nB\u00f6ylece model, sadece kendi e\u011fitim verileriyle s\u0131n\u0131rl\u0131 kalmaz, ayn\u0131 zamanda g\u00fcncel ve \u00f6zelle\u015fmi\u015f bilgilere de eri\u015febilir.\nRAG'\u0131n temel amac\u0131, LLM'lerin do\u011fru, g\u00fcncel ve ba\u011flamla alakal\u0131 yan\u0131tlar \u00fcretmesine yard\u0131mc\u0131 olmakt\u0131r.\nBu s\u00fcre\u00e7te en kritik ad\u0131mlardan biri, b\u00fcy\u00fck belgeleri y\u00f6netilebilir par\u00e7alara ay\u0131rma i\u015flemidir: par\u00e7alama (chunking).\nDo\u011fru par\u00e7alama stratejisi se\u00e7imi, RAG sisteminizin performans\u0131n\u0131 do\u011frudan etkiler.\n\u00c7ok k\u00fc\u00e7\u00fck par\u00e7alar ba\u011flam\u0131 bozabilirken, \u00e7ok b\u00fcy\u00fck par\u00e7alar alakas\u0131z bilgileri getirerek performans\u0131 d\u00fc\u015f\u00fcrebilir.\nBu makalede farkl\u0131 par\u00e7alama stratejilerini inceleyece\u011fiz.\n\"\"\"\n\n# \u00d6rt\u00fc\u015fmeli sabit boyutlu par\u00e7alay\u0131c\u0131y\u0131 olu\u015fturma\ntext_splitter_overlap = CharacterTextSplitter(\n    separator=\"\\n\\n\",\n    chunk_size=200,\n    chunk_overlap=50, # 50 karakterlik \u00f6rt\u00fc\u015fme\n    length_function=len,\n    is_separator_regex=False,\n)\n\nchunks_overlap = text_splitter_overlap.create_documents([uzun_metin_overlap])\n\nprint(f\"Toplam par\u00e7a say\u0131s\u0131 (\u00f6rt\u00fc\u015fmeli): {len(chunks_overlap)}\")\nfor i, chunk in enumerate(chunks_overlap):\n    print(f\"\\n--- Par\u00e7a {i+1} (Uzunluk: {len(chunk.page_content)}) ---\")\n    print(chunk.page_content)\n<\/code><\/pre>\n<\/div>\n<p>Bu \u00f6rnekte 200 karakterlik par\u00e7alar olu\u015fturduk ve her par\u00e7an\u0131n bir \u00f6nceki par\u00e7ayla 50 karakterlik bir \u00f6rt\u00fc\u015fmeye sahip olmas\u0131n\u0131 sa\u011flad\u0131k. Bu, \u00f6zellikle c\u00fcmlelerin veya \u00f6nemli ifadelerin par\u00e7a s\u0131n\u0131rlar\u0131na denk gelmesi durumunda anlamsal b\u00fct\u00fcnl\u00fc\u011f\u00fcn korunmas\u0131na yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h4>3. Yap\u0131sal ve \u00d6zyinelemeli Karakter Bazl\u0131 Par\u00e7alama (Recursive Character Text Splitting): Belge Hiyerar\u015fisini Koruma<\/h4>\n<p>Bu strateji, metinleri b\u00f6lmek i\u00e7in \u00f6nceden tan\u0131mlanm\u0131\u015f bir dizi ay\u0131r\u0131c\u0131 (separator) kullan\u0131r ve bu ay\u0131r\u0131c\u0131lar\u0131 hiyerar\u015fik bir s\u0131rayla dener. Yani, metni \u00f6nce en b\u00fcy\u00fck ay\u0131r\u0131c\u0131ya (\u00f6rne\u011fin, \u00e7ift yeni sat\u0131r <code>\\n\\n<\/code> ile paragraflar), sonra daha k\u00fc\u00e7\u00fck ay\u0131r\u0131c\u0131lara (tek yeni sat\u0131r <code>\\n<\/code> ile sat\u0131rlar), sonra bo\u015fluklara ve son olarak karakterlere g\u00f6re b\u00f6lmeye \u00e7al\u0131\u015f\u0131r. E\u011fer bir ay\u0131r\u0131c\u0131 ile b\u00f6l\u00fcnen par\u00e7a hala <code>chunk_size<\/code> de\u011ferinden b\u00fcy\u00fckse, bir sonraki daha k\u00fc\u00e7\u00fck ay\u0131r\u0131c\u0131ya ge\u00e7ilir ve bu i\u015flem par\u00e7a boyutu uygun hale gelene kadar \u00f6zyinelemeli olarak devam eder. Bu sayede, metnin do\u011fal yap\u0131s\u0131 (paragraflar, ba\u015fl\u0131klar, c\u00fcmleler) m\u00fcmk\u00fcn oldu\u011funca korunur.<\/p>\n<p><strong>Avantajlar\u0131:<\/strong><\/p>\n<ul>\n<li><b>Anlamsal B\u00fct\u00fcnl\u00fck:<\/b> Metnin do\u011fal yap\u0131s\u0131n\u0131 (paragraflar, c\u00fcmleler) korumaya \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in anlamsal b\u00fct\u00fcnl\u00fc\u011f\u00fc sabit boyutlu par\u00e7alamaya g\u00f6re \u00e7ok daha iyi korur.<\/li>\n<li><b>Esneklik:<\/b> Farkl\u0131 t\u00fcrdeki metin belgeleri i\u00e7in (kod, markdown, d\u00fcz metin) uygun ay\u0131r\u0131c\u0131lar tan\u0131mlanabilir.<\/li>\n<li><b>Daha Az Ba\u011flam Kayb\u0131:<\/b> \u00d6nemli bilgilerin c\u00fcmle veya paragraf ortas\u0131nda kesilme olas\u0131l\u0131\u011f\u0131 daha d\u00fc\u015f\u00fckt\u00fcr.<\/li>\n<\/ul>\n<p><strong>Dezavantajlar\u0131:<\/strong><\/p>\n<ul>\n<li><b>Karma\u015f\u0131kl\u0131k:<\/b> Sabit boyutlu par\u00e7alamaya g\u00f6re biraz daha karma\u015f\u0131kt\u0131r ve do\u011fru ay\u0131r\u0131c\u0131 dizisini se\u00e7mek deneme yan\u0131lma gerektirebilir.<\/li>\n<li><b>Performans:<\/b> B\u00f6lme i\u015flemi daha fazla mant\u0131k i\u00e7erdi\u011finden, \u00e7ok b\u00fcy\u00fck metinler i\u00e7in biraz daha yava\u015f olabilir.<\/li>\n<\/ul>\n<p><strong>Ger\u00e7ek D\u00fcnya Senaryosu:<\/strong> Markdown dosyalar\u0131, kod dosyalar\u0131, bilimsel makaleler veya yasal belgeler gibi belirgin yap\u0131sal \u00f6\u011felere (ba\u015fl\u0131klar, paragraflar, kod bloklar\u0131) sahip metinler i\u00e7in m\u00fckemmeldir. \u00d6rne\u011fin, bir yaz\u0131l\u0131m projesinin dok\u00fcmantasyonunu RAG sistemine dahil ederken, ba\u015fl\u0131klar\u0131 ve kod bloklar\u0131n\u0131 ayr\u0131 ayr\u0131 par\u00e7alar halinde tutmak, ilgili bilgiyi daha do\u011fru geri kazanmay\u0131 sa\u011flar.<\/p>\n<p><strong>Python Uygulamas\u0131:<\/strong><br \/>\nLangChain&#8217;in <code>RecursiveCharacterTextSplitter<\/code> s\u0131n\u0131f\u0131 bu stratejiyi uygular.<\/p>\n<div class=\"code-container\">\n<pre><code>\nfrom langchain.text_splitter import RecursiveCharacterTextSplitter\n\n# \u00d6rnek yap\u0131sal metin\nyap\u0131sal_metin = \"\"\"\n# RAG Sistemlerinde Par\u00e7alama\n\n## Giri\u015f\nB\u00fcy\u00fck Dil Modelleri (LLM) \u00e7a\u011f\u0131nda, do\u011fru ve g\u00fcncel yan\u0131tlar verebilmek i\u00e7in RAG mimarisi kritik \u00f6neme sahiptir.\nRAG, harici bilgi tabanlar\u0131ndan veri \u00e7ekerek LLM'in performans\u0131n\u0131 art\u0131r\u0131r.\n\n### Par\u00e7alaman\u0131n \u00d6nemi\nPar\u00e7alama (chunking), RAG sistemlerinin temel ta\u015f\u0131d\u0131r.\nDo\u011fru par\u00e7alama, geri kazan\u0131lan bilginin kalitesini do\u011frudan etkiler.\nYanl\u0131\u015f par\u00e7alama bilgi kayb\u0131na veya alakas\u0131z veri getirmeye yol a\u00e7abilir.\n\n## Par\u00e7alama Stratejileri\nFarkl\u0131 belge t\u00fcrleri i\u00e7in farkl\u0131 par\u00e7alama stratejileri uygulanmal\u0131d\u0131r.\n\u00d6rne\u011fin, kod dosyalar\u0131 i\u00e7in sat\u0131r baz\u0131nda, markdown i\u00e7in ba\u015fl\u0131k baz\u0131nda b\u00f6lme daha mant\u0131kl\u0131d\u0131r.\n\n### RecursiveCharacterTextSplitter\nBu splitter, metni b\u00f6lmek i\u00e7in bir dizi ay\u0131r\u0131c\u0131 kullan\u0131r.\n\u0130lk olarak en b\u00fcy\u00fck ay\u0131r\u0131c\u0131 denenir, e\u011fer par\u00e7a hala b\u00fcy\u00fckse bir sonraki ay\u0131r\u0131c\u0131ya ge\u00e7ilir.\nBu sayede metnin do\u011fal yap\u0131s\u0131 korunur.\n\"\"\"\n\n# \u00d6zyinelemeli karakter bazl\u0131 par\u00e7alay\u0131c\u0131y\u0131 olu\u015fturma\n# Ay\u0131r\u0131c\u0131lar: \u00f6nce \u00e7ift yeni sat\u0131r, sonra tek yeni sat\u0131r, sonra bo\u015fluk, en son karakter\ntext_splitter_recursive = RecursiveCharacterTextSplitter(\n    chunk_size=150,\n    chunk_overlap=20,\n    separators=[\"\\n\\n\", \"\\n\", \" \", \"\"], # Hiyerar\u015fik ay\u0131r\u0131c\u0131lar\n    length_function=len,\n)\n\nchunks_recursive = text_splitter_recursive.create_documents([yap\u0131sal_metin])\n\nprint(f\"Toplam par\u00e7a say\u0131s\u0131 (\u00f6zyinelemeli): {len(chunks_recursive)}\")\nfor i, chunk in enumerate(chunks_recursive):\n    print(f\"\\n--- Par\u00e7a {i+1} (Uzunluk: {len(chunk.page_content)}) ---\")\n    print(chunk.page_content)\n<\/code><\/pre>\n<\/div>\n<p>Bu \u00f6rnekte, <code>RecursiveCharacterTextSplitter<\/code>&#8216;\u0131 farkl\u0131 ay\u0131r\u0131c\u0131larla kulland\u0131k. Bu sayede, ba\u015fl\u0131klar ve paragraflar gibi yap\u0131sal \u00f6\u011feler m\u00fcmk\u00fcn oldu\u011funca korunarak par\u00e7alar olu\u015fturuldu.<\/p>\n<h4>4. Anlamsal Par\u00e7alama (Semantic Chunking): Anlam B\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc Odak Noktas\u0131na Alma<\/h4>\n<p>Geleneksel par\u00e7alama y\u00f6ntemleri genellikle karakter veya belirte\u00e7 say\u0131lar\u0131na ya da yap\u0131sal ay\u0131r\u0131c\u0131lara odaklan\u0131rken, anlamsal par\u00e7alama metnin &#8220;anlam&#8221;\u0131na odaklan\u0131r. Bu strateji, metni anlamsal olarak benzer c\u00fcmle veya paragraf gruplar\u0131na ay\u0131r\u0131r. Temel fikir, ayn\u0131 konu etraf\u0131nda d\u00f6nen c\u00fcmleleri bir arada tutmak ve farkl\u0131 konulara ge\u00e7i\u015f noktalar\u0131nda b\u00f6lmektir. Bu genellikle metin par\u00e7alar\u0131n\u0131n embedding&#8217;leri (vekt\u00f6r g\u00f6sterimleri) aras\u0131ndaki benzerlik veya uzakl\u0131k \u00f6l\u00e7\u00fclerek yap\u0131l\u0131r. E\u011fer iki kom\u015fu c\u00fcmlenin embedding&#8217;leri aras\u0131ndaki benzerlik belirli bir e\u015fi\u011fin alt\u0131na d\u00fc\u015ferse, bu bir b\u00f6lme noktas\u0131 olarak kabul edilir.<\/p>\n<p><strong>Avantajlar\u0131:<\/strong><\/p>\n<ul>\n<li><b>Y\u00fcksek Anlamsal B\u00fct\u00fcnl\u00fck:<\/b> En y\u00fcksek anlamsal b\u00fct\u00fcnl\u00fc\u011f\u00fc koruyan par\u00e7alar\u0131 \u00fcretir, \u00e7\u00fcnk\u00fc ayn\u0131 konuyu i\u015fleyen c\u00fcmleleri bir arada tutar.<\/li>\n<li><b>Daha Do\u011fru Geri Kazan\u0131m:<\/b> Bir sorguyla anlamsal olarak en alakal\u0131 par\u00e7alar\u0131n geri kazan\u0131lma olas\u0131l\u0131\u011f\u0131 artar, \u00e7\u00fcnk\u00fc par\u00e7alar konu baz\u0131nda daha homojendir.<\/li>\n<li><b>Daha Az G\u00fcr\u00fclt\u00fc:<\/b> Alakas\u0131z c\u00fcmlelerin ayn\u0131 par\u00e7a i\u00e7inde olma olas\u0131l\u0131\u011f\u0131 azal\u0131r.<\/li>\n<\/ul>\n<p><strong>Dezavantajlar\u0131:<\/strong><\/p>\n<ul>\n<li><b>Hesaplama Yo\u011funlu\u011fu:<\/b> Her c\u00fcmlenin veya k\u00fc\u00e7\u00fck metin blo\u011funun embedding&#8217;ini olu\u015fturmay\u0131 gerektirir, bu da \u00f6zellikle b\u00fcy\u00fck belgeler i\u00e7in zaman al\u0131c\u0131 ve maliyetli olabilir.<\/li>\n<li><b>Model Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131:<\/b> Embedding modelinin kalitesine do\u011frudan ba\u011fl\u0131d\u0131r. Zay\u0131f bir embedding modeli, yanl\u0131\u015f anlamsal ayr\u0131mlara yol a\u00e7abilir.<\/li>\n<li><b>Karma\u015f\u0131kl\u0131k:<\/b> Di\u011fer y\u00f6ntemlere g\u00f6re daha karma\u015f\u0131k bir uygulama gerektirir.<\/li>\n<\/ul>\n<p><strong>Ger\u00e7ek D\u00fcnya Senaryosu:<\/strong> Hukuki metinler, t\u0131bbi raporlar, ara\u015ft\u0131rma \u00f6zetleri veya m\u00fc\u015fteri geri bildirimleri gibi, farkl\u0131 konular\u0131n veya arg\u00fcmanlar\u0131n i\u00e7 i\u00e7e ge\u00e7ti\u011fi ancak her bir konunun kendi i\u00e7inde tutarl\u0131l\u0131k g\u00f6sterdi\u011fi metinler i\u00e7in \u00e7ok etkilidir. \u00d6rne\u011fin, bir hukuki belgede farkl\u0131 maddelerin yorumlar\u0131 ayn\u0131 paragrafta ge\u00e7se bile, anlamsal par\u00e7alama bu yorumlar\u0131 kendi ba\u011flamlar\u0131nda tutmaya \u00e7al\u0131\u015f\u0131r.<\/p>\n<p><strong>Python Uygulamas\u0131:<\/strong><br \/>\nLangChain&#8217;de do\u011frudan bir &#8220;SemanticChunker&#8221; bulunmasa da, bu konsepti uygulamak i\u00e7in c\u00fcmle embedding&#8217;lerini ve benzerlik \u00f6l\u00e7\u00fcmlerini kullanabiliriz. A\u015fa\u011f\u0131daki \u00f6rnekte, c\u00fcmleleri ay\u0131r\u0131p her birinin embedding&#8217;ini olu\u015fturarak anlamsal ge\u00e7i\u015f noktalar\u0131n\u0131 tespit eden basit bir mekanizma g\u00f6sterilmi\u015ftir. Ger\u00e7ek bir uygulamada daha sofistike algoritmalar kullan\u0131labilir. Bu \u00f6rnek i\u00e7in <code>sentence_transformers<\/code> k\u00fct\u00fcphanesine ihtiyac\u0131n\u0131z olacak.<\/p>\n<div class=\"code-container\">\n<pre><code>\n# pip install sentence-transformers\nfrom sentence_transformers import SentenceTransformer\nfrom sklearn.metrics.pairwise import cosine_similarity\nimport numpy as np\nimport re\n\n# \u00d6rnek metin\nanlamsal_metin = \"\"\"\nRAG sistemleri, LLM'lerin yeteneklerini harici bilgilerle zenginle\u015ftirir.\nBu sayede LLM'ler daha do\u011fru ve g\u00fcncel yan\u0131tlar \u00fcretebilir.\nPar\u00e7alama, RAG'\u0131n kritik bir ad\u0131m\u0131d\u0131r.\nDo\u011fru par\u00e7alama stratejisi se\u00e7imi, sistemin performans\u0131n\u0131 do\u011frudan etkiler.\nAnlamsal par\u00e7alama, metnin anlam b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc korumaya odaklan\u0131r.\nHer c\u00fcmlenin embedding'i olu\u015fturulur ve benzerlik skorlar\u0131 hesaplan\u0131r.\nE\u011fer iki c\u00fcmle aras\u0131ndaki benzerlik d\u00fc\u015f\u00fckse, bu bir b\u00f6lme noktas\u0131 olarak kabul edilebilir.\nBu y\u00f6ntem, daha y\u00fcksek kaliteli geri kazan\u0131m sa\u011flar.\nAncak hesaplama maliyeti di\u011fer y\u00f6ntemlere g\u00f6re daha y\u00fcksektir.\nYine de, anlamsal b\u00fct\u00fcnl\u00fck \u00e7o\u011fu zaman bu maliyete de\u011fer.\n\"\"\"\n\n# C\u00fcmleleri ay\u0131rma fonksiyonu (basit bir regex ile)\ndef split_sentences(text):\n    sentences = re.split(r'(?<=[.!?])\\s+', text)\n    return [s.strip() for s in sentences if s.strip()]\n\n# Embedding modeli y\u00fckleme\nmodel = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2') # T\u00fcrk\u00e7e destekli bir model\n\nsentences = split_sentences(anlamsal_metin)\nprint(f\"Ayr\u0131lan c\u00fcmle say\u0131s\u0131: {len(sentences)}\")\n\n# C\u00fcmle embedding'lerini olu\u015fturma\nsentence_embeddings = model.encode(sentences)\n\n# Benzerlik skorlar\u0131n\u0131 hesaplama (kom\u015fu c\u00fcmleler aras\u0131nda)\nsimilarity_scores = []\nfor i in range(len(sentence_embeddings) - 1):\n    score = cosine_similarity(\n        [sentence_embeddings[i]],\n        [sentence_embeddings[i+1]]\n    )[0][0]\n    similarity_scores.append(score)\n\n# B\u00f6lme noktalar\u0131n\u0131 belirleme (d\u00fc\u015f\u00fck benzerlik skorlar\u0131)\n# E\u015fik de\u011feri deneme yan\u0131lma ile belirlenebilir\nthreshold = 0.5\nchunk_boundaries = [0]\nfor i, score in enumerate(similarity_scores):\n    if score < threshold:\n        chunk_boundaries.append(i + 1)\nchunk_boundaries.append(len(sentences))\n\n# Par\u00e7alar\u0131 olu\u015fturma\nanlamsal_chunks = []\nfor i in range(len(chunk_boundaries) - 1):\n    start = chunk_boundaries[i]\n    end = chunk_boundaries[i+1]\n    chunk_content = \" \".join(sentences[start:end])\n    anlamsal_chunks.append(chunk_content)\n\nprint(f\"\\nToplam anlamsal par\u00e7a say\u0131s\u0131: {len(anlamsal_chunks)}\")\nfor i, chunk in enumerate(anlamsal_chunks):\n    print(f\"\\n--- Anlamsal Par\u00e7a {i+1} ---\")\n    print(chunk)\n<\/code><\/pre>\n<\/div>\n<p>Bu kod, her c\u00fcmleyi ayr\u0131 ayr\u0131 embedding'lere d\u00f6n\u00fc\u015ft\u00fcr\u00fcr ve kom\u015fu c\u00fcmleler aras\u0131ndaki anlamsal benzerli\u011fi hesaplar. Belirlenen bir e\u015fi\u011fin alt\u0131ndaki benzerlik skorlar\u0131, bir b\u00f6lme noktas\u0131 olarak kabul edilir. Bu sayede, anlamsal olarak birbiriyle ili\u015fkili c\u00fcmleler ayn\u0131 par\u00e7a i\u00e7inde kal\u0131r.<\/p>\n<h4>5. Belge Odakl\u0131 ve \u00d6zel Par\u00e7alama (Document-Aware and Custom Chunking): Belge Yap\u0131s\u0131na Sayg\u0131<\/h4>\n<p>Bu strateji, belirli belge t\u00fcrlerinin kendine \u00f6zg\u00fc yap\u0131lar\u0131n\u0131 dikkate alarak par\u00e7alama yapar. \u00d6rne\u011fin, bir PDF belgesini sayfa sayfa b\u00f6lmek, bir Markdown belgesini ba\u015fl\u0131klar\u0131na g\u00f6re b\u00f6lmek veya bir kod dosyas\u0131n\u0131 fonksiyonlar\u0131na veya s\u0131n\u0131flar\u0131na g\u00f6re b\u00f6lmek bu kategoriye girer. Bu yakla\u015f\u0131m, belgenin do\u011fal hiyerar\u015fisini ve mant\u0131ksal b\u00f6l\u00fcmlerini koruyarak, geri kazan\u0131m s\u0131ras\u0131nda \u00e7ok daha alakal\u0131 ve ba\u011flam a\u00e7\u0131s\u0131ndan zengin par\u00e7alar elde etmeyi sa\u011flar. Bu t\u00fcr par\u00e7alay\u0131c\u0131lar genellikle belirli dosya formatlar\u0131n\u0131 veya yap\u0131sal i\u015faretleyicileri (HTML etiketleri, Markdown ba\u015fl\u0131klar\u0131, kod yorumlar\u0131) anlar ve bunlara g\u00f6re b\u00f6lme yapar.<\/p>\n<p><strong>Avantajlar\u0131:<\/strong><\/p>\n<ul>\n<li><b>Y\u00fcksek Do\u011fruluk:<\/b> Belgenin do\u011fal yap\u0131s\u0131n\u0131 ve i\u00e7eri\u011fin mant\u0131ksal ak\u0131\u015f\u0131n\u0131 korudu\u011fu i\u00e7in en do\u011fru ve ba\u011flam a\u00e7\u0131s\u0131ndan zengin par\u00e7alar\u0131 \u00fcretir.<\/li>\n<li><b>Hedeflenmi\u015f Geri Kazan\u0131m:<\/b> Bir sorgu, belgenin belirli bir b\u00f6l\u00fcm\u00fcyle (\u00f6rne\u011fin, bir ba\u015fl\u0131k alt\u0131ndaki t\u00fcm bilgiler) e\u015fle\u015fti\u011finde, o b\u00f6l\u00fcm\u00fcn tamam\u0131n\u0131n geri kazan\u0131lmas\u0131 sa\u011flan\u0131r.<\/li>\n<li><b>Minimum Ba\u011flam Kayb\u0131:<\/b> Bilgi, belgenin do\u011fal s\u0131n\u0131rlar\u0131 i\u00e7inde kald\u0131\u011f\u0131 i\u00e7in ba\u011flam kayb\u0131 riski \u00e7ok d\u00fc\u015f\u00fckt\u00fcr.<\/li>\n<\/ul>\n<p><strong>Dezavantajlar\u0131:<\/strong><\/p>\n<ul>\n<li><b>Uygulama Karma\u015f\u0131kl\u0131\u011f\u0131:<\/b> Her belge t\u00fcr\u00fc i\u00e7in \u00f6zel par\u00e7alama mant\u0131\u011f\u0131 geli\u015ftirmeyi gerektirebilir, bu da zaman al\u0131c\u0131 olabilir.<\/li>\n<li><b>Esneklik S\u0131n\u0131rlamas\u0131:<\/b> Genel bir \u00e7\u00f6z\u00fcmden ziyade, belirli bir belge format\u0131na veya yap\u0131s\u0131na s\u0131k\u0131ca ba\u011fl\u0131d\u0131r.<\/li>\n<li><b>\u00d6n \u0130\u015fleme \u0130htiyac\u0131:<\/b> Belgeyi \u00f6nce belirli bir formata (\u00f6rn. Markdown) d\u00f6n\u00fc\u015ft\u00fcrmek veya ayr\u0131\u015ft\u0131rmak (parse etmek) gerekebilir.<\/li>\n<\/ul>\n<p><strong>Ger\u00e7ek D\u00fcnya Senaryosu:<\/strong> Bir \u015firket i\u00e7i bilgi taban\u0131, yasal s\u00f6zle\u015fmeler, kullan\u0131m k\u0131lavuzlar\u0131, API dok\u00fcmantasyonlar\u0131 veya teknik \u015fartnameler gibi iyi yap\u0131land\u0131r\u0131lm\u0131\u015f belgeler i\u00e7in vazge\u00e7ilmezdir. \u00d6rne\u011fin, bir API dok\u00fcman\u0131ndaki her bir endpoint'in a\u00e7\u0131klamas\u0131n\u0131 ayr\u0131 bir par\u00e7a olarak tutmak, geli\u015ftiricilerin spesifik bir endpoint hakk\u0131nda bilgi arad\u0131\u011f\u0131nda do\u011frudan ilgili b\u00f6l\u00fcme ula\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><strong>Python Uygulamas\u0131:<\/strong><br \/>\nLangChain, belirli belge t\u00fcrleri i\u00e7in \u00f6zel par\u00e7alay\u0131c\u0131lar sunar. \u00d6rne\u011fin, Markdown belgeleri i\u00e7in <code>MarkdownHeaderTextSplitter<\/code> kullan\u0131labilir.<\/p>\n<div class=\"code-container\">\n<pre><code>\nfrom langchain.text_splitter import MarkdownHeaderTextSplitter\n\n# \u00d6rnek Markdown metni\nmarkdown_metin = \"\"\"\n# Giri\u015f\nBu belge, RAG sistemlerinde kullan\u0131lan par\u00e7alama stratejilerini a\u00e7\u0131klar.\n\n## Genel Bak\u0131\u015f\nRAG, LLM'lere harici bilgi sa\u011flar. Bu sayede LLM'ler g\u00fcncel ve do\u011fru yan\u0131tlar \u00fcretebilir.\n\n### Neden Par\u00e7alama?\nLLM'lerin ba\u011flam penceresi s\u0131n\u0131rl\u0131d\u0131r. Bu nedenle belgelerin k\u00fc\u00e7\u00fck par\u00e7alara ayr\u0131lmas\u0131 gerekir.\nPar\u00e7alama, bilgi geri kazan\u0131m\u0131n\u0131n etkinli\u011fini art\u0131r\u0131r.\n\n## Par\u00e7alama Y\u00f6ntemleri\n\u00c7e\u015fitli par\u00e7alama y\u00f6ntemleri mevcuttur. Her birinin kendine \u00f6zg\u00fc avantajlar\u0131 ve dezavantajlar\u0131 vard\u0131r.\n\n### Sabit Boyutlu Par\u00e7alama\nEn basit y\u00f6ntemdir. Belgeyi belirli bir karakter say\u0131s\u0131na g\u00f6re b\u00f6ler.\n\n### \u00d6rt\u00fc\u015fmeli Par\u00e7alama\nBa\u011flam kayb\u0131n\u0131 azaltmak i\u00e7in par\u00e7alar aras\u0131nda \u00f6rt\u00fc\u015fme kullan\u0131l\u0131r.\n\n### Anlamsal Par\u00e7alama\nMetnin anlamsal b\u00fct\u00fcnl\u00fc\u011f\u00fcne odaklan\u0131r.\n\"\"\"\n\n# Markdown ba\u015fl\u0131klar\u0131na g\u00f6re par\u00e7alay\u0131c\u0131y\u0131 olu\u015fturma\n# headers_to_split_on: Hangi ba\u015fl\u0131k seviyelerine g\u00f6re b\u00f6l\u00fcnece\u011fini belirtir\nheaders_to_split_on = [\n    (\"#\", \"Ba\u015fl\u0131k 1\"),\n    (\"##\", \"Ba\u015fl\u0131k 2\"),\n    (\"###\", \"Ba\u015fl\u0131k 3\"),\n]\n\nmarkdown_splitter = MarkdownHeaderTextSplitter(\n    headers_to_split_on=headers_to_split_on,\n    strip_headers=False # Ba\u015fl\u0131klar\u0131 par\u00e7alar\u0131n i\u00e7inde tut\n)\n\nmd_chunks = markdown_splitter.split_text(markdown_metin)\n\nprint(f\"Toplam Markdown odakl\u0131 par\u00e7a say\u0131s\u0131: {len(md_chunks)}\")\nfor i, chunk in enumerate(md_chunks):\n    print(f\"\\n--- Markdown Par\u00e7a {i+1} ---\")\n    print(f\"Metadata: {chunk.metadata}\")\n    print(chunk.page_content)\n<\/code><\/pre>\n<\/div>\n<p>Bu \u00f6rnekte, Markdown belgesini ba\u015fl\u0131k seviyelerine g\u00f6re b\u00f6ld\u00fck. Her bir par\u00e7a, ait oldu\u011fu ba\u015fl\u0131k seviyelerini metadata olarak da i\u00e7erir. Bu, daha sonra geri kazan\u0131m s\u0131ras\u0131nda belirli bir ba\u015fl\u0131k alt\u0131ndaki bilgileri filtrelemek veya \u00f6nceliklendirmek i\u00e7in kullan\u0131labilir.<\/p>\n<h3>Geli\u015fmi\u015f \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar: Par\u00e7alama Sanat\u0131nda Ustala\u015fmak<\/h3>\n<p>Par\u00e7alama, RAG sistemlerinin kalbinde yer alan ve optimize edilmesi gereken bir s\u00fcre\u00e7tir. Yukar\u0131da bahsedilen temel stratejilerin \u00f6tesine ge\u00e7erek, RAG sistemlerinizin performans\u0131n\u0131 daha da art\u0131rabilecek baz\u0131 geli\u015fmi\u015f ipu\u00e7lar\u0131 ve en iyi uygulamalar mevcuttur. Bu yakla\u015f\u0131mlar, \u00f6zellikle karma\u015f\u0131k veri setleri ve y\u00fcksek performans beklentileri olan uygulamalar i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h4>Dinamik Par\u00e7alama (Dynamic Chunking)<\/h4>\n<p>Tek bir sabit par\u00e7a boyutu veya tek bir par\u00e7alama stratejisi, t\u00fcm belge t\u00fcrleri veya t\u00fcm sorgu tipleri i\u00e7in en iyi sonucu vermeyebilir. Dinamik par\u00e7alama, belgenin i\u00e7eri\u011fine, sorgunun karma\u015f\u0131kl\u0131\u011f\u0131na veya hatta kullan\u0131c\u0131n\u0131n tercihlerine g\u00f6re par\u00e7alama stratejisini veya par\u00e7a boyutunu \u00e7al\u0131\u015fma zaman\u0131nda ayarlama yetene\u011fidir. \u00d6rne\u011fin:<\/p>\n<ul>\n<li><b>Sorgu Odakl\u0131 Par\u00e7alama:<\/b> Gelen sorgunun uzunlu\u011funa veya anahtar kelimelerine g\u00f6re daha k\u00fc\u00e7\u00fck veya daha b\u00fcy\u00fck par\u00e7alar olu\u015fturulabilir. K\u0131sa ve spesifik sorgular i\u00e7in daha k\u00fc\u00e7\u00fck par\u00e7alar yeterli olabilirken, geni\u015f kapsaml\u0131 sorgular i\u00e7in daha fazla ba\u011flam sa\u011flayan b\u00fcy\u00fck par\u00e7alar gerekebilir.<\/li>\n<li><b>Belge \u0130\u00e7eri\u011fi Odakl\u0131 Par\u00e7alama:<\/b> Bir belgenin farkl\u0131 b\u00f6l\u00fcmleri farkl\u0131 par\u00e7alama mant\u0131\u011f\u0131 gerektirebilir. \u00d6rne\u011fin, bir teknik dok\u00fcman\u0131n giri\u015f ve sonu\u00e7 b\u00f6l\u00fcmleri daha genel par\u00e7alama ile i\u015flenebilirken, detayl\u0131 teknik \u00f6zelliklerin bulundu\u011fu b\u00f6l\u00fcmler anlamsal veya yap\u0131sal par\u00e7alama ile daha hassas bir \u015fekilde ayr\u0131labilir.<\/li>\n<\/ul>\n<p>Dinamik par\u00e7alama, genellikle daha karma\u015f\u0131k bir m\u00fchendislik gerektirir ancak RAG sisteminin adaptasyon yetene\u011fini ve genel performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir.<\/p>\n<h4>Par\u00e7a Boyutu ve \u00d6rt\u00fc\u015fme Optimizasyonu<\/h4>\n<p>Do\u011fru <code>chunk_size<\/code> (par\u00e7a boyutu) ve <code>chunk_overlap<\/code> (par\u00e7a \u00f6rt\u00fc\u015fmesi) de\u011ferlerini bulmak, deneme yan\u0131lma ve metrik tabanl\u0131 de\u011ferlendirme gerektirir.<\/p>\n<ul>\n<li><b>Deneme Yan\u0131lma:<\/b> Farkl\u0131 par\u00e7a boyutlar\u0131 ve \u00f6rt\u00fc\u015fme de\u011ferleriyle denemeler yaparak, RAG sisteminizin geri kazan\u0131m do\u011frulu\u011funu ve yan\u0131t kalitesini test edin.<\/li>\n<li><b>De\u011ferlendirme Metrikleri:<\/b> Geri kazan\u0131m (recall), hassasiyet (precision), F1 skoru gibi metrikleri kullanarak farkl\u0131 par\u00e7alama yap\u0131land\u0131rmalar\u0131n\u0131n performans\u0131n\u0131 \u00f6l\u00e7\u00fcn. Ayr\u0131ca, LLM taraf\u0131ndan \u00fcretilen yan\u0131tlar\u0131n kalitesini (do\u011fruluk, alaka d\u00fczeyi, ak\u0131c\u0131l\u0131k) insan de\u011ferlendirmesi veya otomatik de\u011ferlendirme ara\u00e7lar\u0131yla \u00f6l\u00e7mek de \u00f6nemlidir.<\/li>\n<li><b>LLM Ba\u011flam Penceresi:<\/b> Se\u00e7ti\u011finiz LLM'in ba\u011flam penceresini g\u00f6z \u00f6n\u00fcnde bulundurun. Par\u00e7alar\u0131n\u0131z\u0131n toplam boyutu (geri kazan\u0131lan par\u00e7a say\u0131s\u0131 * ortalama par\u00e7a boyutu) bu pencereyi a\u015fmamal\u0131d\u0131r. Genellikle, ba\u011flam penceresinin %70-80'ini dolduracak \u015fekilde par\u00e7alar se\u00e7mek iyi bir ba\u015flang\u0131\u00e7 noktas\u0131 olabilir.<\/li>\n<\/ul>\n<h4>Zengin Metadata Kullan\u0131m\u0131<\/h4>\n<p>Par\u00e7alama yaparken, her bir par\u00e7aya orijinal belgeden veya par\u00e7an\u0131n kendisinden t\u00fcretilen ilgili metadata (\u00fcst veri) eklemek, geri kazan\u0131m s\u00fcrecini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde iyile\u015ftirebilir. Metadata \u00f6rnekleri:<\/p>\n<ul>\n<li><b>Kaynak Bilgisi:<\/b> Orijinal belge ad\u0131, URL'si, yazar\u0131, yay\u0131n tarihi.<\/li>\n<li><b>Konum Bilgisi:<\/b> Belge i\u00e7indeki sayfa numaras\u0131, b\u00f6l\u00fcm ba\u015fl\u0131\u011f\u0131, paragraf numaras\u0131.<\/li>\n<li><b>Belge Tipi:<\/b> PDF, Markdown, HTML, kod.<\/li>\n<li><b>\u00d6zet Bilgisi:<\/b> Par\u00e7an\u0131n k\u0131sa bir \u00f6zeti veya anahtar kelimeleri.<\/li>\n<\/ul>\n<p>Metadata, vekt\u00f6r aramas\u0131ndan sonra par\u00e7alar\u0131 filtrelemek veya s\u0131ralamak i\u00e7in kullan\u0131labilir. \u00d6rne\u011fin, kullan\u0131c\u0131 yaln\u0131zca \"2023 y\u0131l\u0131ndaki raporlardan\" bilgi istiyorsa, metadata filtresi ile sadece o y\u0131la ait belgelerden gelen par\u00e7alar LLM'e sunulabilir. Bu, alakas\u0131z bilgilerin LLM'e gitmesini engeller ve geri kazan\u0131m do\u011frulu\u011funu art\u0131r\u0131r.<\/p>\n<div class=\"code-container\">\n<pre><code>\nfrom langchain.text_splitter import CharacterTextSplitter\nfrom langchain.docstore.document import Document\n\n# \u00d6rnek metin ve metadata\nmetin_ile_metadata = \"Bu, 2023 y\u0131l\u0131nda yay\u0131nlanm\u0131\u015f \u00f6nemli bir \u015firket raporunun bir b\u00f6l\u00fcm\u00fcd\u00fcr. Finansal performans\u0131m\u0131z beklentilerin \u00fczerinde ger\u00e7ekle\u015fti.\"\nmetadata_ornegi = {\"kaynak\": \"\u015eirket Raporu 2023\", \"y\u0131l\": 2023, \"yazar\": \"AI Departman\u0131\"}\n\ntext_splitter = CharacterTextSplitter(\n    separator=\" \",\n    chunk_size=50,\n    chunk_overlap=0,\n    length_function=len\n)\n\n# Metni par\u00e7alarken metadata'y\u0131 ekleme\n# LangChain'in create_documents metodu, Document nesneleri bekler\n# Her par\u00e7aya orijinal belgenin metadata's\u0131 otomatik olarak kopyalan\u0131r.\ndoc = Document(page_content=metin_ile_metadata, metadata=metadata_ornegi)\nchunks_with_metadata = text_splitter.create_documents([doc])\n\nprint(f\"Toplam par\u00e7a say\u0131s\u0131 (metadata ile): {len(chunks_with_metadata)}\")\nfor i, chunk in enumerate(chunks_with_metadata):\n    print(f\"\\n--- Par\u00e7a {i+1} ---\")\n    print(f\"\u0130\u00e7erik: {chunk.page_content}\")\n    print(f\"Metadata: {chunk.metadata}\")\n<\/code><\/pre>\n<\/div>\n<p>Bu \u00f6rnekte, orijinal belgeye ait metadata'n\u0131n par\u00e7alara nas\u0131l eklendi\u011fini g\u00f6rebilirsiniz. Bu metadata, daha sonra geri kazan\u0131m a\u015famas\u0131nda filtreleme ve s\u0131ralama i\u00e7in kullan\u0131labilir.<\/p>\n<p>Par\u00e7alama, RAG sistemlerinin ba\u015far\u0131s\u0131 i\u00e7in temel bir ad\u0131md\u0131r ve tek bir \"herkese uyan tek beden\" \u00e7\u00f6z\u00fcm\u00fc yoktur. En iyi yakla\u015f\u0131m, veri setinizin \u00f6zelliklerini, uygulaman\u0131z\u0131n gereksinimlerini ve kulland\u0131\u011f\u0131n\u0131z LLM'in yeteneklerini dikkatlice de\u011ferlendirerek farkl\u0131 stratejileri denemek ve optimize etmektir. S\u00fcrekli test ve iyile\u015ftirme, RAG sisteminizin zaman i\u00e7inde daha ak\u0131ll\u0131 ve daha do\u011fru yan\u0131tlar \u00fcretmesini sa\u011flayacakt\u0131r.<\/p>\n<h3>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<p>RAG (Geri Kazan\u0131m Art\u0131r\u0131lm\u0131\u015f \u00dcretim) sistemleri, B\u00fcy\u00fck Dil Modellerinin (LLM) bilgi eksikliklerini gidererek ve g\u00fcncel verilerle zenginle\u015ftirerek daha do\u011fru ve ba\u011flam odakl\u0131 yan\u0131tlar \u00fcretmesini sa\u011flayan devrim niteli\u011finde bir yakla\u015f\u0131md\u0131r. Bu mimarinin temelinde yatan ve performans\u0131 do\u011frudan etkileyen en kritik ad\u0131mlardan biri ise \"par\u00e7alama (chunking)\" i\u015flemidir. B\u00fcy\u00fck metin belgelerini anlaml\u0131, y\u00f6netilebilir ve LLM'in ba\u011flam penceresine s\u0131\u011fabilecek k\u00fc\u00e7\u00fck par\u00e7alara ay\u0131rmak, geri kazan\u0131m kalitesini ve dolay\u0131s\u0131yla nihai yan\u0131t\u0131n do\u011frulu\u011funu belirler.<\/p>\n<p>Bu makalede, sabit boyutlu par\u00e7alamadan anlamsal ve belge odakl\u0131 yakla\u015f\u0131mlara kadar 5 farkl\u0131 par\u00e7alama stratejisini detayl\u0131ca inceledik. Her bir stratejinin kendine \u00f6zg\u00fc avantajlar\u0131 ve dezavantajlar\u0131 oldu\u011funu, ve \"en iyi\" par\u00e7alama y\u00f6nteminin veri setinizin yap\u0131s\u0131na, kullan\u0131m senaryonuza ve performans hedeflerinize g\u00f6re de\u011fi\u015febilece\u011fini g\u00f6rd\u00fck. Python ve LangChain k\u00fct\u00fcphanesi ile sunulan kod \u00f6rnekleri, bu stratejilerin pratikte nas\u0131l uygulanabilece\u011fine dair somut birer rehber niteli\u011findeydi.<\/p>\n<p>Unutulmamal\u0131d\u0131r ki, par\u00e7alama bir sanatt\u0131r ve s\u00fcrekli optimizasyon gerektirir. Dinamik par\u00e7alama, par\u00e7a boyutu ve \u00f6rt\u00fc\u015fme oranlar\u0131n\u0131n titizlikle ayarlanmas\u0131 ve zengin metadata kullan\u0131m\u0131 gibi ileri d\u00fczey teknikler, RAG sistemlerinizin yeteneklerini daha da ileriye ta\u015f\u0131yabilir. Amac\u0131m\u0131z her zaman, LLM'e sunulacak en alakal\u0131 ve ba\u011flam a\u00e7\u0131s\u0131ndan zengin bilgiyi sa\u011flamak olmal\u0131d\u0131r. Bu sayede, kullan\u0131c\u0131lar\u0131n\u0131za daha g\u00fcvenilir, do\u011fru ve de\u011ferli yapay zeka deneyimleri sunabilirsiniz.<\/p>\n<h4>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h4>\n<dl>\n<dt><b>1. RAG sistemlerinde par\u00e7alama neden bu kadar \u00f6nemlidir?<\/b><\/dt>\n<dd>Par\u00e7alama, b\u00fcy\u00fck metin belgelerini LLM'lerin s\u0131n\u0131rl\u0131 ba\u011flam pencerelerine s\u0131\u011fabilecek k\u00fc\u00e7\u00fck, anlaml\u0131 birimlere ay\u0131r\u0131r. Do\u011fru par\u00e7alama, LLM'e sunulan bilginin alaka d\u00fczeyini ve do\u011frulu\u011funu art\u0131rarak, modelin daha kaliteli ve do\u011fru yan\u0131tlar \u00fcretmesini sa\u011flar. Yanl\u0131\u015f par\u00e7alama ise bilgi kayb\u0131na, alakas\u0131z veri getirmeye veya ba\u011flam penceresi a\u015f\u0131m\u0131na yol a\u00e7abilir.<\/dd>\n<dt><b>2. Hangi par\u00e7alama stratejisi benim projem i\u00e7in en iyisidir?<\/b><\/dt>\n<dd>Tek bir \"en iyi\" strateji yoktur. Se\u00e7im, veri setinizin t\u00fcr\u00fcne, belgenin yap\u0131s\u0131na (d\u00fcz metin, Markdown, kod vb.), sorgular\u0131n karma\u015f\u0131kl\u0131\u011f\u0131na ve LLM'inizin ba\u011flam penceresi boyutuna ba\u011fl\u0131d\u0131r. Yap\u0131sal belgelere sahipseniz (\u00f6rn. Markdown), <code>RecursiveCharacterTextSplitter<\/code> veya belge odakl\u0131 par\u00e7alama daha iyi olabilir. Anlamsal b\u00fct\u00fcnl\u00fck kritikse, anlamsal par\u00e7alama denenebilir. H\u0131zl\u0131 bir ba\u015flang\u0131\u00e7 i\u00e7in sabit boyutlu par\u00e7alama iyi bir se\u00e7enektir.<\/dd>\n<dt><b>3. <code>chunk_size<\/code> ve <code>chunk_overlap<\/code> de\u011ferlerini nas\u0131l belirlemeliyim?<\/b><\/dt>\n<dd><code>chunk_size<\/code>, bir par\u00e7an\u0131n maksimum boyutunu belirler ve LLM'inizin ba\u011flam penceresine uygun olmal\u0131d\u0131r. <code>chunk_overlap<\/code>, par\u00e7alar aras\u0131ndaki ba\u011flam s\u00fcreklili\u011fini sa\u011flamak i\u00e7in kullan\u0131l\u0131r. Bu de\u011ferler genellikle deneme yan\u0131lma yoluyla ve RAG sisteminizin geri kazan\u0131m metrikleri (do\u011fruluk, geri \u00e7a\u011f\u0131rma) ve LLM yan\u0131t kalitesi de\u011ferlendirilerek optimize edilir. Genellikle <code>chunk_overlap<\/code> de\u011feri, <code>chunk_size<\/code>'\u0131n %10-20'si kadar olabilir.<\/dd>\n<dt><b>4. Metadata par\u00e7alama s\u00fcrecinde nas\u0131l bir rol oynar?<\/b><\/dt>\n<dd>Metadata (\u00fcst veri), her par\u00e7aya orijinal belge hakk\u0131nda ek ba\u011flam bilgisi (kaynak, yazar, tarih, sayfa numaras\u0131 vb.) eklemenizi sa\u011flar. Bu bilgiler, vekt\u00f6r veritaban\u0131ndan geri kazan\u0131lan par\u00e7alar\u0131 daha sonra filtrelemek, s\u0131ralamak veya LLM'e sunmadan \u00f6nce ek ba\u011flam sa\u011flamak i\u00e7in kullan\u0131labilir. \u00d6rne\u011fin, \"sadece son bir y\u0131ldaki raporlardan bilgi getir\" gibi sorgularda metadata filtrelemesi \u00e7ok etkilidir.<\/dd>\n<dt><b>5. Par\u00e7alama i\u015flemi sadece metin belgeleri i\u00e7in mi ge\u00e7erlidir?<\/b><\/dt>\n<dd>Hay\u0131r, par\u00e7alama konsepti sadece metin belgeleriyle s\u0131n\u0131rl\u0131 de\u011fildir. G\u00f6rsel veriler (g\u00f6r\u00fcnt\u00fclerin b\u00f6lgelere ayr\u0131lmas\u0131), ses verileri (ses kay\u0131tlar\u0131n\u0131n belirli zaman dilimlerine b\u00f6l\u00fcnmesi) veya yap\u0131land\u0131r\u0131lm\u0131\u015f veriler (tablolar\u0131n sat\u0131r veya s\u00fctunlara ayr\u0131lmas\u0131) gibi farkl\u0131 veri t\u00fcrleri i\u00e7in de benzer par\u00e7alama yakla\u015f\u0131mlar\u0131 uygulanabilir. \u00d6nemli olan, her veri t\u00fcr\u00fc i\u00e7in anlaml\u0131 ve geri kazan\u0131labilir par\u00e7alar olu\u015fturmakt\u0131r.<\/dd>\n<\/dl>\n<p>#RAG #Chunking #Python #LLM #YapayZeka #BilgiEri\u015fimi #Veri\u0130\u015fleme<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/python-text-chunking-strategies\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/python-text-chunking-strategies<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"RAG Uygulamalar\u0131nda Verimli Par\u00e7alama Stratejileri: 5 Y\u00f6ntem ve Python Uygulamalar\u0131 B\u00fcy\u00fck Dil Modelleri (Large Language Models &#8211; LLM) \u00e7a\u011f\u0131nda, kullan\u0131c\u0131lar\u0131n karma\u015f\u0131k sorular\u0131na do\u011fru ve g\u00fcncel yan\u0131tlar verebilmek, bu modellerin yeteneklerini ger\u00e7ek d\u00fcnya bilgileriyle birle\u015ftirmekten ge\u00e7iyor.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1403],"tags":[],"class_list":{"0":"post-45226","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-python","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>RAG Uygulamalar\u0131nda Verimli Par\u00e7alama Stratejileri: 5 Y\u00f6ntem ve Python Uygulamalar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"RAG Uygulamalar\u0131nda Verimli Par\u00e7alama Stratejileri: 5 Y\u00f6ntem ve Python Uygulamalar\u0131\" \/>\n<meta property=\"og:description\" content=\"RAG Uygulamalar\u0131nda Verimli Par\u00e7alama Stratejileri: 5 Y\u00f6ntem ve Python Uygulamalar\u0131 B\u00fcy\u00fck Dil Modelleri (Large Language Models - LLM) \u00e7a\u011f\u0131nda, kullan\u0131c\u0131lar\u0131n karma\u015f\u0131k sorular\u0131na do\u011fru ve g\u00fcncel yan\u0131tlar verebilmek, bu modellerin yeteneklerini ger\u00e7ek d\u00fcnya bilgileriyle birle\u015ftirmekten ge\u00e7iyor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-16T18:10:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-16T18:10:39+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"RAG Uygulamalar\u0131nda Verimli Par\u00e7alama Stratejileri: 5 Y\u00f6ntem ve Python Uygulamalar\u0131\",\"datePublished\":\"2026-10-16T18:10:00+00:00\",\"dateModified\":\"2026-10-16T18:10:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/\"},\"wordCount\":4376,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Python\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/\",\"name\":\"RAG Uygulamalar\u0131nda Verimli Par\u00e7alama Stratejileri: 5 Y\u00f6ntem ve Python Uygulamalar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-10-16T18:10:00+00:00\",\"dateModified\":\"2026-10-16T18:10:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"RAG Uygulamalar\u0131nda Verimli Par\u00e7alama Stratejileri: 5 Y\u00f6ntem ve Python Uygulamalar\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"RAG Uygulamalar\u0131nda Verimli Par\u00e7alama Stratejileri: 5 Y\u00f6ntem ve Python Uygulamalar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/","og_locale":"tr_TR","og_type":"article","og_title":"RAG Uygulamalar\u0131nda Verimli Par\u00e7alama Stratejileri: 5 Y\u00f6ntem ve Python Uygulamalar\u0131","og_description":"RAG Uygulamalar\u0131nda Verimli Par\u00e7alama Stratejileri: 5 Y\u00f6ntem ve Python Uygulamalar\u0131 B\u00fcy\u00fck Dil Modelleri (Large Language Models - LLM) \u00e7a\u011f\u0131nda, kullan\u0131c\u0131lar\u0131n karma\u015f\u0131k sorular\u0131na do\u011fru ve g\u00fcncel yan\u0131tlar verebilmek, bu modellerin yeteneklerini ger\u00e7ek d\u00fcnya bilgileriyle birle\u015ftirmekten ge\u00e7iyor.","og_url":"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-10-16T18:10:00+00:00","article_modified_time":"2026-10-16T18:10:39+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"17 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"RAG Uygulamalar\u0131nda Verimli Par\u00e7alama Stratejileri: 5 Y\u00f6ntem ve Python Uygulamalar\u0131","datePublished":"2026-10-16T18:10:00+00:00","dateModified":"2026-10-16T18:10:39+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/"},"wordCount":4376,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Python"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/","url":"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/","name":"RAG Uygulamalar\u0131nda Verimli Par\u00e7alama Stratejileri: 5 Y\u00f6ntem ve Python Uygulamalar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-10-16T18:10:00+00:00","dateModified":"2026-10-16T18:10:39+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/rag-uygulamalarinda-verimli-parcalama-stratejileri-5-yontem-ve-python-uygulamalari\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"RAG Uygulamalar\u0131nda Verimli Par\u00e7alama Stratejileri: 5 Y\u00f6ntem ve Python Uygulamalar\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/45226","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=45226"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/45226\/revisions"}],"predecessor-version":[{"id":45227,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/45226\/revisions\/45227"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=45226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=45226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=45226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}