/
afanasevn
/
PdfEncoder
Обзор
Документация
Войти
/
afanasevn
/
PdfEncoder
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/PdfEncoder.Infrastructure/Llm/DocumentContextTextBuilder.cs
56 строк
2 KB
IBS\NAfanasev
Parse results functional update
07 июл 2026, 00:06
07 июл 2026, 00:06
8e97443
Код
Авторство
О чём код?
using System.Text; using PdfEncoder.Domain.Models; namespace PdfEncoder.Infrastructure.Llm; /// <summary> /// Сборка плоского текста страниц из <see cref="DocumentContext"/> для LLM-промптов. /// </summary> public static class DocumentContextTextBuilder { /// <summary> /// Объединяет text blocks всех страниц контекста в один текст. /// </summary> /// <param name="context">Контекст документа.</param> public static string BuildPageText(DocumentContext context) { var builder = new StringBuilder(); foreach (var page in context.Pages.OrderBy(page => page.PageNumber)) { builder.AppendLine($"[page {page.PageNumber}]"); foreach (var block in page.TextBlocks) { builder.AppendLine(block.Text); } } return builder.ToString().Trim(); } /// <summary> /// Обрезает текст до указанного числа символов для компактного LLM-промпта. /// </summary> /// <param name="text">Исходный текст.</param> /// <param name="maxLength">Максимальная длина.</param> public static string TruncateText( string text, int maxLength) { if (string.IsNullOrEmpty(text) || text.Length <= maxLength) { return text; } return text[..maxLength].TrimEnd(); } /// <summary> /// True, если в контексте есть хотя бы один непустой text block. /// </summary> /// <param name="context">Контекст документа.</param> public static bool HasExtractableText(DocumentContext context) { return context.Pages.Any(page => page.TextBlocks.Any(block => !string.IsNullOrWhiteSpace(block.Text))); } }