Категория

Редактирование документов с помощью ИИ в C#: сохранение форматирования

2026-09-18 06:28:38 Jack Du
AI Summarize:
ChatGPT
ChatGPT ✓
Claude ✓
Grok ✓
Perplexity ✓
Quick
Quick
Concise overview
Highlights
Key takeaways
Detailed
Structured explanation
Brief
One sentence summary
Summarize |

C# Implementation of AI Document Redaction with Format Preservation

Документы, используемые в сфере обслуживания клиентов, финансов, управления персоналом и юридических процессах, часто содержат имена, адреса электронной почты, номера телефонов, домашние адреса, номера счетов и другую конфиденциальную информацию. Прежде чем такие файлы можно будет передать, заархивировать или использовать для анализа, идентифицирующую информацию, возможно, потребуется удалить или заменить.

Традиционные программы редактирования полагаются на предопределённые правила поиска и отдельную логику обработки для каждого формата документа. AI Agent SDK предлагает другой подход: разработчики могут описать требование редактирования на естественном языке, позволяя агенту выявить конфиденциальную информацию и изменить соответствующие элементы документа Office. В этой статье демонстрируется, как редактировать файлы Word, Excel и PowerPoint на C#, сохраняя их исходную структуру и форматирование.

Что такое редактирование документов?

Редактирование документов — это процесс удаления или замены информации, которая не должна быть раскрыта. К распространённым объектам редактирования относятся:

  • Личные имена
  • Адреса электронной почты
  • Номера телефонов и факсов
  • Домашние или почтовые адреса
  • Даты рождения
  • Идентификаторы клиентов и сотрудников
  • Банковские номера и номера счетов
  • Другая конфиденциальная или личная идентифицирующая информация

Для редактируемых файлов Office редактирование — это больше, чем просто изменение обычного текста. Конфиденциальное содержимое может присутствовать в абзацах и таблицах Word, ячейках Excel, фигурах PowerPoint, колонтитулах или других элементах документа. Полезный рабочий процесс редактирования должен удалять обнаруженное значение, не изменяя без необходимости окружающую разметку, стили, изображения, диаграммы или структуру документа.

Три способа редактирования документов Office на C#

Существует три общих подхода к реализации: традиционные API для работы с документами, прямая интеграция с LLM и AI Agent SDK.

Традиционное редактирование на основе API

Традиционная реализация обычно начинается с точной замены текста или регулярных выражений. Например, Spire.Doc for .NET предоставляет API для поиска и замены текста в документах Word.

Следующий упрощённый псевдокод иллюстрирует рабочий процесс редактирования на основе правил. Он намеренно неполон и показывает лишь основные задачи, которые должно решать приложение.

Document document = new Document();
document.LoadFromFile("Input.docx");

// Patterns must be defined and maintained by the developer.
Regex emailPattern = new Regex("...");
Regex phonePattern = new Regex("...");
Regex accountPattern = new Regex("...");

document.Replace(emailPattern, "[REDACTED]");
document.Replace(phonePattern, "[REDACTED]");
document.Replace(accountPattern, "[REDACTED]");

// Additional logic may still be required for different content containers.
foreach (Section section in document.Sections)
{
    ProcessParagraphs(section);
    ProcessTables(section.Tables);
    ProcessHeadersAndFooters(section.HeadersFooters);
    ProcessTextBoxes(section);
}

document.SaveToFile("Redacted.docx", FileFormat.Docx);

Этот подход хорошо работает, когда конфиденциальные значения следуют предсказуемым шаблонам. Адреса электронной почты, номера телефонов и стандартизированные идентификационные номера часто можно найти с помощью регулярных выражений.

Сложность возрастает, когда информация зависит от контекста. Программе может потребоваться определить, является ли слово именем человека, является ли число номером счёта или номером счёта-фактуры, а также является ли местоположение частным адресом или публичным адресом компании. Разработчикам также необходимо добавить различную логику обхода и замены для Word, Excel и PowerPoint.

Прямая интеграция с LLM

Большая языковая модель может понимать контекст более эффективно, чем набор регулярных выражений. Например, она может распознать имя человека в предложении, даже если имя не следует предсказуемому шаблону.

Однако LLM не обеспечивает автоматически полную обработку документов Office. Прямая интеграция обычно требует, чтобы приложение:

  1. Извлекало текст из каждого соответствующего элемента документа.
  2. Разделяло содержимое на подходящие запросы.
  3. Отправляло извлечённый текст модели.
  4. Сопоставляло результаты модели с исходными абзацами, ячейками или фигурами.
  5. Заменяло конфиденциальное содержимое, не теряя его форматирование.
  6. Сохраняло изменённый файл в исходном формате.

Если документ преобразуется в обычный текст перед отправкой модели, информация о таблицах, текстовых диапазонах, шрифтах, выравнивании и других свойствах разметки может быть потеряна. Поэтому разработчик по-прежнему отвечает за связывание семантических результатов модели с объектной моделью документа Office.

AI Agent SDK

AI Agent SDK сочетает понимание естественного языка с возможностями обработки документов. Вместо определения каждого правила обнаружения и ручной координации каждого шага замены разработчик предоставляет документ и описывает желаемый результат.

Spire.Agent.Office использует базовые возможности Spire.Office for .NET для работы с объектами Word, Excel и PowerPoint. В документе Word, например, уровень обработки может получать доступ к разделам, абзацам, текстовым диапазонам, таблицам, ячейкам, колонтитулам, изображениям, гиперссылкам и их форматированию. Модель выявляет конфиденциальное содержимое, а API документов изменяют соответствующие элементы.

Именно такая обработка на уровне объектов позволяет заменять текст, сохраняя окружающую структуру и стили документа.

Традиционный API против LLM против AI Agent SDK

Подход Контекстное обнаружение Сохранение форматирования Реализация для нескольких форматов Трудозатраты на разработку Лучше всего подходит для
Традиционный API и регулярные выражения Ограничено, если не добавлена дополнительная логика NLP Надёжное и контролируемое Обычно требуется отдельная логика Высокие Фиксированные шаблоны и высокодетерминированные правила
Office API с прямыми вызовами LLM Сильное Должно быть реализовано разработчиком Для каждого формата требуется логика извлечения и обратной записи Очень высокие Полностью настраиваемые AI-конвейеры
AI Agent SDK Сильное Обеспечивается за счёт обработки с учётом документа Общая инструкция может применяться к нескольким форматам Office Ниже Контекстно-зависимое редактирование с меньшим объёмом кода оркестрации

Традиционный подход остаётся полезным, когда каждый объект редактирования следует известному шаблону и приложение требует строго детерминированного поведения. Подход с Agent SDK становится более привлекательным, когда документы содержат разнообразную контекстную информацию или когда один и тот же рабочий процесс должен поддерживать несколько форматов Office.

Настройка проекта C#

Создайте консольное приложение C# и добавьте в проект Spire.Agent.Office и его необходимые зависимости. Вам также потребуется действующий SpireToken для AI-обработки.

Приведённый ниже пример поддерживает следующие форматы:

  • Word: DOC и DOCX
  • Excel: XLS и XLSX
  • PowerPoint: PPT и PPTX

PDF не включён в этот пример.

Редактирование документов Word, Excel и PowerPoint с помощью AI-агента

Следующий код определяет исходный формат по его расширению, загружает соответствующий объект документа Office и передаёт одну и ту же инструкцию по редактированию AI-процессору.

using Spire.Agent.Office.AI;
using Spire.Agent.Office.Extensions;
using Spire.Presentation;
using Spire.Doc;
using Spire.Xls;

string inputPath = @"E:\Documents\Input.docx";
string outputPath = @"E:\Documents\Redacted.docx";
string spireToken = "your spireToken";

string instruction = """
Find personal information such as names, email addresses, phone numbers, addresses, 
account numbers, and other sensitive information. Replace the detected content with 
“[REDACTED]” while preserving the original document structure and formatting.
""";

// Configure the AI processing options
AIOptions options = new AIOptions();
options.SpireToken = spireToken;

// Select the appropriate document object according to the file extension
string extension = Path.GetExtension(inputPath).ToLower();

if (extension == ".doc" || extension == ".docx")
{
    using (Document document = new Document())
    {
        document.LoadFromFile(inputPath);
        AIDocumentProcessor processor = document.AI(options);
        processor.ExecuteInstruction(
            document,
            instruction,
            outputPath,
            Array.Empty<string>());
    }
}
else if (extension == ".xls" || extension == ".xlsx")
{
    using (Workbook workbook = new Workbook())
    {
        workbook.LoadFromFile(inputPath);
        AIDocumentProcessor processor = workbook.AI(options);
        processor.ExecuteInstruction(
            workbook,
            instruction,
            outputPath,
            Array.Empty<string>());
    }
}
else if (extension == ".ppt" || extension == ".pptx")
{
    using (Presentation presentation = new Presentation())
    {
        presentation.LoadFromFile(inputPath);
        AIDocumentProcessor processor = presentation.AI(options);
        processor.ExecuteInstruction(
            presentation,
            instruction,
            outputPath,
            Array.Empty<string>());
    }
}

Если в вашем проекте отключены неявные глобальные using-директивы, также добавьте using System; и using System.IO; для Array и Path.

Определение входных данных, выходных данных и инструкции

inputPath указывает исходный документ, а outputPath определяет, куда будет сохранён отредактированный файл. Расширения входного и выходного файлов должны совпадать, чтобы результат оставался в исходном формате.

Инструкция на естественном языке определяет как область обнаружения, так и требуемое изменение. В этом примере агент ищет распространённые типы личной информации и заменяет их на [REDACTED].

Вы можете скорректировать инструкцию для более узкого рабочего процесса. Например:

Find email addresses, phone numbers, and customer account numbers. Replace each detected value with “[REDACTED]”. Do not redact company names, product names, invoice numbers, or dates. Preserve the original layout and formatting.

Добавление явных исключений может уменьшить количество ложных срабатываний, когда документ содержит деловые идентификаторы, похожие на номера личных счетов.

Настройка AI-обработки

AIOptions хранит SpireToken, используемый службой AI-обработки:

AIOptions options = new AIOptions();
options.SpireToken = spireToken;

Один и тот же объект параметров можно использовать с экземпляром документа Word, Excel или PowerPoint.

Выбор подходящего типа документа

Программа считывает расширение файла и создаёт соответствующий объект:

  • Document для файлов Word
  • Workbook для файлов Excel
  • Presentation для файлов PowerPoint

Каждый объект предоставляет метод расширения AI(). Он возвращает AIDocumentProcessor, который выполняет инструкцию на естественном языке для загруженного документа.

Пустой массив вложений указывает на то, что инструкция не требует никаких вспомогательных файлов:

processor.ExecuteInstruction(
    document,
    instruction,
    outputPath,
    Array.Empty<string>());

Результат редактирования

В тестовом документе Word конфиденциальная информация присутствовала в обычных абзацах, таблице с информацией о клиенте и нижнем колонтитуле страницы. После обработки имена, адреса электронной почты, номера телефонов, адреса и информация о счетах были заменены на [REDACTED].

Структура таблицы, форматирование абзацев, заголовки, цвета и разметка нижнего колонтитула остались на месте. Этот результат важен, поскольку он демонстрирует, что рабочий процесс не просто извлекает документ как обычный текст и пересобирает его с нуля. Он изменяет соответствующие элементы документа, сохраняя окружающую их структуру.

Original Word document vs. Redacted Version

Важные соображения по AI-редактированию

Проверьте результат перед передачей

AI-редактирование не является абсолютно детерминированным. Модель может пропустить необычный идентификатор или ошибочно классифицировать обычное содержимое как конфиденциальное. Документы, предназначенные для внешнего распространения, следует проверять после обработки, особенно в юридических, финансовых, медицинских процессах или процессах, чувствительных к соблюдению требований.

Сделайте инструкцию конкретной

Инструкция должна описывать как то, что необходимо удалить, так и то, что должно остаться. Если номера счетов-фактур, названия компаний, коды продуктов или публичные адреса офисов не должны редактироваться, укажите эти исключения явно.

Видимая замена — не всегда полная очистка

Замена видимого текста не обязательно удаляет каждую копию информации из файла. Конфиденциальные данные также могут присутствовать в:

  • Комментариях и отслеживаемых изменениях
  • Свойствах документа и метаданных
  • Скрытых листах или скрытых слайдах
  • Заметках докладчика PowerPoint
  • Встроенных файлах и объектах
  • Изображениях, содержащих текст
  • Более ранних версиях или резервных копиях

Для рабочих процессов с высокими требованиями к безопасности эти места следует проверять отдельно. Если документ содержит отсканированные страницы или скриншоты, перед оценкой текста внутри изображений может потребоваться OCR.

Сохраните исходный файл

Сохраняйте отредактированный результат по новому пути, а не перезаписывайте исходный документ. Раздельное хранение файлов упрощает сравнение результата, исследование пропущенного содержимого и повторение процесса с улучшенной инструкцией.

Заключение

Традиционное редактирование на основе API обеспечивает точный контроль, но разработчики должны определять правила обнаружения и поддерживать отдельную логику обхода для разных форматов документов и контейнеров содержимого. Прямая интеграция с LLM улучшает контекстное распознавание, однако всё ещё требует существенного слоя извлечения, сопоставления и обратной записи для сохранения форматирования Office.

AI Agent SDK объединяет эти возможности. С помощью одной инструкции на естественном языке и небольшого объёма кода на C# один и тот же рабочий процесс может обрабатывать файлы Word, Excel и PowerPoint, выявлять контекстную конфиденциальную информацию и заменять её в рамках исходной структуры документа. Результат всё равно следует проверять, но реализация значительно проще, чем ручное построение всего конвейера обнаружения и оркестрации документов.

Часто задаваемые вопросы

Может ли один и тот же код редактировать файлы Word, Excel и PowerPoint?

Да. В примере выбирается Document, Workbook или Presentation в зависимости от расширения входного файла, и к каждому формату применяется одна и та же инструкция на естественном языке.

Сохраняет ли AI-агент исходное форматирование?

Агент работает с базовыми объектами документа Office, что позволяет заменять конфиденциальный текст в абзацах, ячейках, таблицах и фигурах, сохраняя окружающую структуру и форматирование. Итоговый результат всё же следует проверять, поскольку необычно сложные макеты могут потребовать дополнительной проверки.

Могу ли я использовать другую метку редактирования?

Да. Измените [REDACTED] в инструкции на другую метку, например [PRIVATE], [REMOVED] или значение, специфичное для категории, например [EMAIL REDACTED].

Когда традиционный API лучше AI-редактирования?

Традиционный API может быть предпочтительнее, когда каждое конфиденциальное значение следует фиксированному шаблону, правила редко меняются и результат должен быть полностью детерминированным. Замены с помощью регулярных выражений часто достаточно для стандартизированных адресов электронной почты, номеров телефонов или идентификационных номеров.

Гарантирует ли замена текста, что документ безопасен для публикации?

Нет. Замена видимого текста не удаляет автоматически комментарии, отслеживаемые изменения, метаданные, скрытое содержимое, встроенные объекты, текст внутри изображений или предыдущие версии файлов. Документы, чувствительные к безопасности, требуют дополнительной проверки и валидации перед публикацией.

См. также