💡 Tam çalışan örnek GitHub’da mevcuttur: parse-docx-to-markdown-chunks-dotnet
Eski Yöntem Zorlayıcıydı
Başlık tabanlı Markdown bölütleme, .NET veri alma hazırlık yolu olup Office ve PDF dosyalarını gömmeden önce bölüm‑boyutlu metne dönüştürür. Bu olmadan, ekipler genellikle tüm Word dosyasını tek bir vektöre döker. Kapak paragrafı ve görev maddesi aynı gömme içinde paylaşılır, bu yüzden kosinüs araması yanlış bölümü sıralar. Bunu üç sayfalık dahili bir kılavuzda gördüm: her sorgu başlık bloğunu ilk olarak çekiyordu çünkü indeks yazarların zaten yazdığı # / ## yapısını hiç görmemişti.
Kendi DOCX‑to‑Markdown dönüştürücünüzü yazmak, Open XML stillerinde gezinmek, liste seviyelerini eşlemek ve bir sonraki yükleme PDF olduğunda biçimlendirilmiş Markdown yolunun null döndürmesiyle hâlâ başarısız olmak anlamına gelir. Sabit‑boyutlu token pencereleri bu başlıkları görmez. Gece boyunca veri kümeleri boş kabukları devasa kılavuzlarla karıştırır çünkü kimse önce sayfa sayısı ya da boyut kontrolü yapmaz.
Tam dosya gömmelerinin gerçek maliyeti: yanlış‑bölüm yanıtları, çöp yüklemeler üzerinde boşa harcanan çıkarım harcaması ve operatörlerin kötü bir toplu işlem sırasında açabileceği
chunk-01.mdartefaktı olmaması.
Daha İyi Bir Yol Var
GroupDocs.Parser for .NET, bu karmaşayı dört odaklanmış çağrıyla değiştirir: GetDocumentInfo, GetFormattedText(FormattedTextMode.Markdown), Markdown null olduğunda GetText ve chunk‑NN.md yazan küçük bir başlık yürütücüsü. Aynı Parser tipi Word DOCX ayrıştırmasını ve PDF metin geri dönüşünü kapsar, böylece tek bir C# hizmet yolu tutarsınız.
Şunlara ihtiyacınız olacak:
- .NET 8 SDK
- GroupDocs.Parser 26.10.0 (geçici lisans)
- Bir Word DOCX (örnek 3 sayfa / 14820 bayt) ve isteğe bağlı bir PDF
dotnet add package GroupDocs.Parser --version 26.10.0
Yeni Yol: İncele, Çıkar, Geri Dön, Böl
Aşağıda geçişten sonra aynı veri alma hazırlığı gösterilmiştir. parse-docx-to-markdown-chunks-dotnet altındaki konsol örneği bilgi, Markdown, PDF metni ve gönderilen DOCX için dört başlık bölütü yazar.
Adım 1 - GetDocumentInfo ile Kontrol Et
Tam bir çıkarım için ödeme yapmadan önce dosya türü, sayfa sayısı ve boyutunu isteyin.
using var parser = new Parser(sourcePath);
var info = parser.GetDocumentInfo();
var sb = new StringBuilder();
sb.AppendLine($"Source: {Path.GetFileName(sourcePath)}");
sb.AppendLine($"File type: {info?.FileType}");
sb.AppendLine($"Pages: {info?.PageCount}");
sb.AppendLine($"Size: {info?.Size} bytes");
File.WriteAllText(outputPath, sb.ToString());
Bu gerçekleri iş kimliğinin yanına kaydedin. Örnek DOCX’te Microsoft Word Open XML Document, 3 sayfa ve 14820 bayt görmelisiniz.
Adım 2 - GetFormattedText’ten Markdown Tercih Et
Word ve biçimlendirilmiş çıkarımı destekleyen formatlar için bölütleyiciye ATX başlıklarını koruyun.
using var parser = new Parser(sourcePath);
using TextReader? reader = parser.GetFormattedText(
new FormattedTextOptions(FormattedTextMode.Markdown));
if (reader == null)
{
return null;
}
string markdown = reader.ReadToEnd();
File.WriteAllText(outputPath, markdown, Encoding.UTF8);
return markdown;
Null, yolları değiştirmek için bir işarettir, çökme değildir. Chunk araçları ve git farkları okunabilir kalması için UTF‑8 yazın.
Adım 3 - PDF için GetText ile Geri Dön
Markdown modu null döndürdüğünde, dosyayı düz metin katmanı ile işlem hattında tutun.
using var parser = new Parser(sourcePath);
using TextReader? reader = parser.GetText();
if (reader == null)
{
return null;
}
string text = reader.ReadToEnd();
File.WriteAllText(outputPath, text, Encoding.UTF8);
return text;
.txt bekleyin, uydurulmuş # başlıkları değil. Örnek host PDF dalı için Result/sample-pdf.txt yazar.
Adım 4 - Markdown’ı # ve ## ile Böl
Satırları dolaşın; yeni bir ATX # veya ## göründüğünde biriktirilenleri boşaltın; chunk‑NN.md yazın.
var chunks = new List<string>();
var current = new StringBuilder();
using (var reader = new StringReader(markdown))
{
string? line;
while ((line = reader.ReadLine()) != null)
{
bool isHeading = line.StartsWith("# ", StringComparison.Ordinal)
|| line.StartsWith("## ", StringComparison.Ordinal);
if (isHeading && current.Length > 0)
{
chunks.Add(current.ToString().TrimEnd());
current.Clear();
}
current.AppendLine(line);
}
}
Önce eski chunk-*.md dosyalarını silin. Daha derin ### satırları mevcut bölüm içinde kalır. Örnek DOCX Result/chunks/ altında dört dosya üretir.
Tam dosya gömmelerini bu yol ile ne zaman değiştirmeliyim?
Tam dosya gömmelerini, giriş Word DOCX ve PDF karıştırdığında ve indeksin bölüm‑boyutlu Markdown’a ihtiyacı olduğunda değiştirin. İlk olarak GetDocumentInfo çalıştırın, Office dosyaları için Markdown deneyin, biçimlendirilmiş okuyucu null olduğunda GetText çağırın ve yalnızca # / ## işaretçileri mevcut olduğunda bölün. Ayrı bir bölüt politikası ekleyene kadar yapılandırılmamış PDF metnini yalnız bırakın. Bu sıra örnek konsol uygulamasıyla eşleşir ve operatörler için hata modlarını açık tutar.
Operatörler İçin Neler Değişti
| Önce | Sonra |
|---|---|
| Dosya başına bir gömme | Başlık bloğu başına bir gömme |
| Özel Open XML Markdown | GetFormattedText Markdown modu |
| PDF, null biçimlendirilmiş okuyucu olduğunda atıldı | GetText bir metin artefakti yazar |
| Ucuz ön‑kontrol yok | Sayfa sayısı ve boyut kontrolü çalışır |
Her Parser ve TextReader nesnesini serbest bırakın. Gece boyunca hacim öncesi bir lisans ya da geçici lisans uygulayın. Yüklemeleri güvensiz giriş olarak ele alın ve izole bir işçide ayrıştırın.
Kendi Dosyalarınızda Deneyin
parse-docx-to-markdown-chunks-dotnet deposunu klonlayın, GroupDocs.Parser 26.10.0’ı geri yükleyin ve documents/sample.docx üzerinde çalıştırın. Ardından aynı dört yöntemi kılavuzlarınızdan birine yönlendirin ve oluşturulan chunk-*.md dosyalarını açın.