Сообщество - Программирование на python

Программирование на python

1 005 постов 11 951 подписчик

Популярные теги в сообществе:

5

5 задач обработки Word-документов, которые должен автоматизировать каждый Python-разработчик

Документы Word по-прежнему глубоко встроены в бизнес-процессы. Будь то генерация контрактов, извлечение данных из отчётов, конвертация файлов или объединение нескольких документов — многие из этих задач до сих пор выполняются вручную. Это не только отнимает время, но и чревато ошибками.

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

На этой странице:

  • Задача 1: Генерация документов Word из шаблонов

  • Задача 2: Извлечение структурированных данных из файлов Word

  • Задача 3: Сравнение двух документов Word на предмет изменений

  • Задача 4: Конвертация документов Word в PDF

  • Задача 5: Объединение нескольких документов Word в один

  • Заключение

Задача 1: Генерация документов Word из шаблонов

Зачем это автоматизировать?

Многие приложения нуждаются в создании динамических документов, таких как:

  • Счета и квитанции

  • Трудовые договоры

  • Сертификаты о завершении

  • Ежемесячные клиентские отчёты

Ручное редактирование каждого экземпляра — повторяющаяся и медленная задача. Используя шаблон и подставляя данные, вы можете сгенерировать сотни документов за секунды.

Рекомендуемый инструмент: python-docx-template

Эта библиотека построена на основе python-docx и интегрирует шаблонизатор Jinja2. Вы просто размещаете заполнители вида {{ customer_name }} внутри шаблона .docx, а затем визуализируете его с вашими данными.

Преимущества:

  • Открытый исходный код (лицензия MIT)

  • Сохраняет всё форматирование шаблона

  • Поддерживает циклы и условия (используя синтаксис Jinja2)

Ограничение: Очень сложная логика или вложенные таблицы могут потребовать дополнительной осторожности, но для 95% случаев использования библиотека работает безупречно.

Пример кода

Сначала установите библиотеку:

pip install python-docx-template

Создайте файл шаблона invoice_template.docx с заполнителями:

Счёт для {{ customer_name }}

Дата: {{ date }}

Итоговая сумма: ${{ total }}

Затем сгенерируйте итоговый документ:

from docxtpl import DocxTemplate

doc = DocxTemplate("invoice_template.docx")

context = {

"customer_name": "Алиса Джонсон",

"date": "2026-06-03",

"total": "1299.99"

}

doc.render(context)

doc.save("invoice_alice.docx")

Лучшие сценарии использования

  • Автоматизированные системы выставления счетов

  • Генерация кадровых документов

  • Создание сертификатов для онлайн-курсов

Задача 2: Извлечение структурированных данных из файлов Word

Зачем это автоматизировать?

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

Рекомендуемый инструмент: python-docx

python-docx — это фактический стандарт для чтения и записи файлов .docx. Он предоставляет доступ к абзацам, таблицам, элементам форматирования (runs) и стилям. Хотя он не поддерживает файлы .doc (старый двоичный формат), они становятся всё более редкими.

Ограничения, о которых следует знать:

  • Библиотека сначала читает все абзацы, затем все таблицы — вы не можете легко восстановить смешанный макет (текст → таблица → текст).

  • Для сложных манипуляций со стилями часто приходится работать на уровне XML.

Пример кода

from docx import Document

doc = Document("survey_results.docx")

# Извлечение всех данных из таблиц

for idx, table in enumerate(doc.tables):

print(f"--- Таблица {idx+1} ---")

for row in table.rows:

row_data = [cell.text.strip() for cell in row.cells]

print(", ".join(row_data))

Если вам нужно экспортировать данные в CSV-файл:

import csv

with open("extracted_data.csv", "w", newline="", encoding="utf-8") as f:

writer = csv.writer(f)

for table in doc.tables:

for row in table.rows:

writer.writerow([cell.text.strip() for cell in row.cells])

Лучшие сценарии использования

  • Перенос устаревших данных из форм Word в базу данных

  • Агрегация финансовых данных из нескольких ежемесячных отчётов

  • Анализ содержимого больших коллекций документов

Задача 3: Сравнение двух документов Word на предмет изменений

Зачем это автоматизировать?

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

Рекомендуемый инструмент: difflib + python-docx

Поскольку создать чистое open-source решение для получения вывода Word с отслеживанием изменений очень сложно, мы будем использовать встроенный в Python модуль difflib для сравнения необработанного текста двух документов. Это даёт вам быстрый, поддающийся скриптованию способ обнаружения различий.

Ограничения:

  • Он не создаёт документ Word с отметками о правках (красной строкой).

  • Он сравнивает абзацы, а не символы (но вы можете его адаптировать).

  • Старые файлы .doc не поддерживаются.

Для юридически значимого сравнения (отслеживание изменений внутри файла Word) вам понадобится коммерческая библиотека, такая как Aspose.Words. Однако для большинства внутренних проверок и обнаружения изменений подхода на основе текста вполне достаточно.

Пример кода

from docx import Document

import difflib

def get_paragraph_texts(docx_path):

doc = Document(docx_path)

return [p.text for p in doc.paragraphs if p.text.strip()]

original = get_paragraph_texts("contract_v1.docx")

revised = get_paragraph_texts("contract_v2.docx")

diff = difflib.unified_diff(

original, revised,

fromfile="Оригинал",

tofile="Изменённый",

lineterm=""

)

for line in diff:

print(line)

Чтобы сделать вывод более читаемым, вы можете записать его в HTML-отчёт:

html_diff = difflib.HtmlDiff()

with open("diff_report.html", "w") as f:

f.write(html_diff.make_file(original, revised, "Оригинал", "Изменённый"))

Лучшие сценарии использования

  • Аудит изменений в юридических контрактах

  • Отслеживание обновлений в нормативных документах

  • Сравнение студенческих работ с эталонным документом

Задача 4: Конвертация документов Word в PDF

Зачем это автоматизировать?

PDF — это универсальный формат для распространения, печати и архивирования. Ручная конвертация (открыть Word → Сохранить как PDF) становится узким местом, когда вам нужно ежедневно конвертировать десятки или сотни файлов. Автоматизация устраняет этот шаг и встраивает конвертацию в ваш конвейер обработки.

Основная рекомендация: docx2pdf (бесплатное, наивысшее качество)

docx2pdf — это не парсер, а тонкая обёртка, которая использует сам Microsoft Word для выполнения конвертации — точно так же, как операция «Сохранить как PDF», которую вы делаете вручную. Поэтому макет, шрифты, таблицы, колонтитулы воспроизводятся идеально.

Требования:

  • Microsoft Word должен быть установлен на компьютере (Windows или macOS).

  • Скрипт запускается в той же операционной системе, где доступен Word.

Ограничения:

  • Не работает на Linux-серверах (нет Word).

  • Головные серверные среды (например, Docker без графического интерфейса) не могут надёжно запускать эту библиотеку.

Если вы соответствуете требованиям, это лучшее бесплатное решение из доступных.

Пример кода

pip install docx2pdf

from docx2pdf import convert

# Конвертация одного файла

convert("report.docx", "report.pdf")

# Конвертация всех .docx файлов в папке

convert("input_folder/", "output_folder/")

Запасное решение: Spire.Doc для Python (когда Word недоступен)

Если вы работаете на Linux-сервере или в среде, где Microsoft Office не может быть установлен, вы можете использовать коммерческую библиотеку, такую как Spire.Doc. Она не зависит от Word и работает полностью автономно.

Примечание: Бесплатная версия имеет ограничения — она обрабатывает только первые 500 абзацев и 25 таблиц, а сконвертированные PDF могут содержать водяной знак. Для промышленного использования требуется лицензия.

pip install Spire.Doc

from spire.doc import Document, FileFormat

doc = Document()

doc.LoadFromFile("report.docx")

doc.SaveToFile("report.pdf", FileFormat.PDF)

doc.Close()

Альтернатива (полностью открытый исходный код, кросс-платформенная): Вы можете вызвать LibreOffice из командной строки, используя subprocess:

import subprocess

subprocess.run(["libreoffice", "--headless", "--convert-to", "pdf", "report.docx"])

Это работает на Linux, Windows и macOS, но требует отдельной установки LibreOffice.

Итоги по задаче 4

Задача 5: Объединение нескольких документов Word в один

Зачем это автоматизировать?

Типичные сценарии включают:

  • Объединение ежемесячных финансовых отчётов в квартальную сводку

  • Слияние отдельных разделов контракта в основной договор

  • Сборка пакета документации из нескольких глав

Выполнение этого вручную (копирование-вставка) часто разрушает форматирование и крайне медленно для большого количества файлов.

Рекомендуемый инструмент: docxcompose

docxcompose принимает один документ в качестве «основного» и добавляет к нему другие, сохраняя базовое форматирование. Библиотека легковесна и проста в использовании.

Ограничения (важно):

  • Верхние и нижние колонтитулы, а также разрывы разделов часто теряются , потому что библиотека выполняет слияние, добавляя страницы в тот же раздел.

  • Текстовые поля, сложные вложенные таблицы и некоторые пользовательские стили могут не сохраниться при слиянии.

  • Проект не поддерживался активно с 2018 года.

Для простых документов (обычный текст, простые таблицы, немного стилей) библиотека работает удивительно хорошо. Для сложных отчётов с разными колонтитулами для каждой главы потребуется более надёжное (скорее всего, коммерческое) решение, или вы можете вручную копировать элементы с помощью python-docx — это больше работы, но полностью контролируемо.

Пример кода

pip install docxcompose

from docxcompose.composer import Composer

from docx import Document

master = Document("chapter1.docx")

composer = Composer(master)

composer.append(Document("chapter2.docx"))

composer.append(Document("chapter3.docx"))

composer.save("full_report.docx")

Если docxcompose не работает с вашими документами, вот более надёжный (но более длинный) подход: перебрать все элементы каждого документа и добавить их в новый основной документ, используя чистый python-docx. Упрощённый фрагмент:

from docx import Document

master = Document()

for file in ["part1.docx", "part2.docx"]:

doc = Document(file)

for element in doc.element.body:

master.element.body.append(element)

master.save("merged.docx")

Имейте в виду, что эта низкоуровневая манипуляция XML может нарушить стили, если выполнять её неаккуратно.

Лучшие сценарии использования

  • Объединение простых отчётов с большим объёмом текста

  • Добавление приложений к основному документу

  • Сборка наборов документации из Markdown, сконвертированных в Word

Заключение

В таблице ниже обобщены рекомендуемые инструменты и их компромиссы.

Автоматизируя эти пять задач, вы можете сэкономить часы повторяющейся ручной работы. Начните с решений с открытым исходным кодом — они покроют большинство повседневных потребностей. Для критически важного форматирования корпоративного уровня (юридически значимое сравнение, идеальная конвертация в PDF на Linux, безупречное слияние) рассмотрите коммерческие библиотеки, такие как Aspose.Words. Но для большинства Python-разработчиков код, показанный выше, уже преобразит то, как вы работаете с документами Word.

Так что вперёд, автоматизируйте генерацию счетов, извлечение данных или конвертацию отчётов — ваш будущее «я» скажет вам спасибо.

Показать полностью 2
3

Точное извлечение текста и таблиц из документов Word с помощью Python

Извлечение структурированного содержимого из документов Word, особенно текста и таблиц, является распространенной задачей в процессах обработки данных. Хотя экосистема Python предлагает множество библиотек, таких как python-docx, работа со сложной структурой документов или одновременное извлечение текста и таблиц может быть затруднительной. В таких случаях Free Spire.Doc for Python предоставляет более стабильное и функциональное решение.

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

Предварительная подготовка

Free Spire.Doc for Python — это мощная библиотека для работы с документами Word, поддерживающая различные форматы, включая .doc и .docx. Установить её можно с помощью команды:

pip install spire.doc.free

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

Извлечение всего текста и сохранение в TXT-файл

Встроенный метод GetText() позволяет получить весь текст из документа Word. На практике часто требуется не только вывести текст, но и сохранить его для дальнейшего использования. В следующем примере весь текст документа извлекается и записывается в файл .txt:

from spire.doc import *

from spire.doc.common import *

# Создание объекта Document и загрузка файла Word

doc = Document()

doc.LoadFromFile("input.docx")

# Извлечение всего текста из документа

full_text = doc.GetText()

# Запись текста в TXT-файл

with open("output.txt", "w", encoding="utf-8") as file:

file.write(full_text)

doc.Close()

print("Извлечение текста завершено. Результат сохранён в output.txt")

Основные моменты

  • Метод GetText() извлекает весь текст в порядке чтения, включая абзацы, заголовки, верхние и нижние колонтитулы, игнорируя изображения, фигуры и другие нетекстовые элементы.

  • Для корректной обработки национальных символов используется кодировка UTF-8.

  • После завершения работы обязательно вызывайте doc.Close(), чтобы освободить системные ресурсы.

Точное извлечение и экспорт всех таблиц

Таблицы в документах Word часто содержат важные данные, такие как отчёты, списки и инвентаризационные ведомости. Spire.Doc предоставляет удобную иерархию объектов:

Документ → Раздел → Таблица → Строка → Ячейка → Абзац

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

from spire.doc import *

from spire.doc.common import *

import os

# Создание выходной директории

output_dir = "output/Tables"

os.makedirs(output_dir, exist_ok=True)

# Загрузка документа Word

doc = Document()

doc.LoadFromFile("Sample.docx")

# Перебор всех разделов

for section_idx in range(doc.Sections.Count):

section = doc.Sections.get_Item(section_idx)

tables = section.Tables

for table_idx in range(tables.Count):

table = tables.get_Item(table_idx)

table_data = ""

# Перебор всех строк и ячеек

for row_idx in range(table.Rows.Count):

row = table.Rows.get_Item(row_idx)

for col_idx in range(row.Cells.Count):

cell = row.Cells.get_Item(col_idx)

# Сбор текста из всех абзацев внутри ячейки

cell_text = ""

for para_idx in range(cell.Paragraphs.Count):

cell_text += cell.Paragraphs.get_Item(para_idx).Text + " "

table_data += cell_text.strip()

# Разделение столбцов символом табуляции

if col_idx < row.Cells.Count - 1:

table_data += "\t"

table_data += "\n" # Конец строки

# Сохранение текущей таблицы

output_path = f"{output_dir}/WordTable_{section_idx+1}_{table_idx+1}.txt"

with open(output_path, "w", encoding="utf-8") as f:

f.write(table_data)

print(f"Сохранено: {output_path}")

doc.Close()

Разбор кода

  • Вложенные циклы обеспечивают обработку всех таблиц во всех разделах документа.

  • Содержимое каждой ячейки извлекается через коллекцию Paragraphs, что позволяет сохранить текст, разделённый переносами строк или форматированием.

  • Выходные файлы именуются по шаблону SectionIndex_TableIndex, что упрощает определение источника данных.

Примечание: В данном примере обрабатываются только таблицы верхнего уровня. Если документ содержит вложенные таблицы внутри ячеек, логику можно расширить с помощью рекурсивного обхода.

Рекомендации и важные замечания

1. Производительность и использование памяти

При работе с большими документами, содержащими сотни страниц, рекомендуется обрабатывать только необходимый тип данных. Если нужны только таблицы, можно пропустить извлечение текста, и наоборот. Кроме того, обязательно вызывайте doc.Close(), чтобы избежать утечек ресурсов.

2. Обработка объединённых ячеек

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

Если необходимо сохранить исходную структуру таблицы, можно использовать свойства Cell.ColumnSpan и Cell.RowSpan для построения матрицы с учётом объединённых ячеек.

3. Ограничения бесплатной версии

Бесплатная версия Spire.Doc позволяет обрабатывать документы, содержащие до 500 абзацев или 25 таблиц , чего обычно достаточно для большинства повседневных задач обработки документов и тестирования библиотеки.

Заключение

С помощью Free Spire.Doc for Python можно извлекать текст и таблицы из документов Word всего несколькими десятками строк кода. Два подхода, рассмотренные в этой статье — сохранение текста в TXT-файлы и экспорт таблиц по отдельности — легко интегрируются в существующие процессы обработки данных.

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

Если вам требуется работать со сложными макетами документов или сохранять расширенную структуру таблиц, Spire.Doc также предоставляет дополнительные API, такие как ExportToHtml() и SaveToFile(), обеспечивая ещё большую гибкость при обработке документов.

Показать полностью
10

Как я написал портативный файлообменник

Интерфейс программы FlashStash

Каждый раз, когда нужно перекинуть файл, код или ссылку с ПК на телефон (или другу в той же Wi-Fi сети), начинается классическая возня. Либо гоняешь через «Избранное» в мессенджерах (где режется качество и файлы вечно висят в облаке), либо поднимаешь локальные веб-серверы через консоль. Мне это надоело, и я решил написать свою утилиту — FlashStash.

Основная идея: софт должен запускаться в один клик, работать без интернета внутри локалки, иметь всеядный предпросмотр файлов прямо в браузере и не требовать от пользователя установки Питона или настройки окружения.

После нескольких итераций проект дорос до версии 1.6, и я хочу поделиться тем, как устроена утилита изнутри и с какими техническими проблемами пришлось столкнуться.

Что под капотом и как это работает

Бэкенд написан на Python + Flask, а фронтенд работает на чистом JS. Процесс использования максимально упрощен:

  1. Запускается один исполняемый файл FlashStash.exe.

  2. Программа сама определяет локальный IP-адрес компьютера, поднимает сервер и автоматически открывает веб-интерфейс в браузере хоста.

  3. Чтобы подключить смартфон или другой ПК к общему пространству, нужно просто ввести в адресную строку браузера IP-адрес, который отображается в консоли сервера.

  4. При этом для каждого загруженного файла в интерфейсе генерируется отдельный QR-код — это позволяет мгновенно скачивать конкретные файлы на телефон через камеру, не вбивая ссылки вручную.

Проект собран как Zero-Dependency Portable Build. Внутри архива лежит скомпилированный .exe файл со своей иконкой и встроенное портативное ядро Python. То есть утилиту можно закинуть на абсолютно «голую» Windows (желательно прямо на Рабочий стол), кликнуть, и всё сразу заведётся.

Как развивался проект: от костылей к нормальной архитектуре

В процессе разработки вылезло несколько неочевидных проблем, которые пришлось оперативно закрывать.

1. Борьба с «одноразовой» безопасностью

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

В версии 1.6 я переписал эту логику. Теперь все хэндлы, пароли файлов и история текстового буфера обмена намертво пишутся в локальные JSON-файлы. Данные идеально выдерживают перезапуск сервера и не нагружают систему лишними тяжелыми СУБД.

2. Закрытие уязвимости Path Traversal

Когда пишешь локальный веб-сервер для обмена файлами, легко забыть про базовую безопасность путей. В первых билдах бэкенд принимал имя файла из адресной строки практически «как есть».

Продвинутый пользователь в локальной сети мог провернуть атаку Path Traversal, отправив запрос вида ../, выйти за пределы папки обмена и стянуть системные файлы с хост-машины. Чтобы это исправить, я внедрил жесткую фильтрацию и санитаризацию входных путей через os.path.basename. Теперь бэкенд отсекает любые попытки побега из папки shared_files.

3. Всеядный предпросмотр (All-in-One)

Мне не хотелось, чтобы пользователь скачивал файл только ради того, чтобы узнать, что внутри. Поэтому фронтенд получил встроенные плееры для аудио и видео, просмотрщик картинок и текстовых документов. Из интересного — добавил просмотрщик архивов: структура файлов внутри .zip и .rar отображается прямо на веб-странице до скачивания самого архива.

Наведение порядка: Wipe_All_Data

Поскольку Питон при работе создаёт скрытый кэш (__pycache__), а папка shared_files постепенно забивается реальными файлами, перед заливкой проекта на GitHub или передачей папки другу её нужно как-то чистить. Сам запущенный Питон свои процессы и кэш удалить не может (Windows выдаёт Access Denied).

Для этого я написал отдельный служебный батник Wipe_All_Data.bat на английском (чтобы кодовая база репозитория выглядела аккуратно). Он делает три вещи:

  1. Жестко тушит активные процессы сервера через taskkill.

  2. Под ноль вычищает папки с файлами, паролями и текстами.

  3. Сканирует дерево директорий и сносит весь кэш компилятора Питона, сжимая вес папки до исходного минимума.

Итоги

Проект получился именно таким, каким я хотел его видеть в повседневной жизни — легким, быстрым и независимым. Исходный код полностью открыт, пощупать портативный билд v1.6 и оценить реализацию можно на гитхабе.

👉 https://github.com/arxbyte/FlashStash/releases/tag/v1.6

Буду рад конструктивной критике в комментариях. Пишите, каких фич вам не хватает в локальных файлообменниках и как бы вы улучшили текущую архитектуру.

Показать полностью
101

Ответ на пост «Конец реверс-инжинирингу: релиз Markov Shield AI — софт, который "намертво" привязывает код к железу»1

Средний по тяжести случай ИИ-психоза.

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

Итак, что у нас в бинарниках(файлах v144_engine.so и v144_cpu_engine.so, исходников которых нету в репо)? Запихиваем их сюда https://dogbolt.org/ и смотрим. Второй чет не запихнулся, но там аналогичная история.

Почему же все это дерьмо не работает?

Смотрим сюда.

Стараемся не хихикать от "аппаратных регистров". Помним что у человека ИИ-психоз.
И что мы видим?
Есть dll(в репо идет .so, но это тоже самое, только для линукса) . Из нее вызывается функция, которая возвращает результат. Если этот результат хорош, то все хорошо(работаем дальше), если плох, то гнусные хацкеры нас хакнули, удаляем у пользователя диск C:/ в отместку заканчиваем тяжело работать.

В итоге чтобы обойти такую чудовищно сложную защиту(вы видели сколько там кепочек^ и мохнатых точечек* ???) нам нужно либо тут написать

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

Все.

Непробиваемая защита пробита.

Показать полностью 3

Конец реверс-инжинирингу: релиз Markov Shield AI — софт, который «намертво» привязывает код к железу1

Всем привет. Сегодня я выкидываю в паблик технологию, которая закрывает вопрос взлома и реверса софта раз и навсегда. Это не просто очередная «обфускация», которую школьник расковыряет за вечер. Это математический детерминизм на уровне ядра.

Что это такое?
.
Современная защита софта (DRM, анти-читы, лицензионные ключи) — это всегда игра в кошки-мышки. Взломщик рано или поздно находит точку входа. Мы решили эту проблему на уровне фундаментальной математики.

В основе системы лежит V144 Protector Core. Она использует теорию резонансных инвариантов Ефима Маркова. Вместо того чтобы просто проверять лицензию, программа в реальном времени сверяет состояние системы с математической константой .

Почему это нельзя взломать?

Markov Shield AI — это первая в мире система детерминированной защиты на аппаратном уровне, базирующаяся на инвариантах нерефлексивных банаховых пространств (Матрица V144). Система обеспечивает гарантированную защиту от состязательных атак без использования вероятностных методов.

Если по-простому: я превратил код в «математический монолит». Программа срастается с конкретным железом (Hardware-ID) так, что при попытке запустить её на другом компе или залезть внутрь отладчиком, она не просто выдает ошибку, а теряет свою математическую целостность.

Ниже картинки"програмиста" думающего что он взломал код с помощью ИИ и Ghidra,на самом деле ИИ не смог и с галюцинировал, а Ghidra захлебнулась в самом начале только надкусив код.😂😂😂😂😂😆😆

Почему это нельзя взломать?

NP-трудность: Я доказал, что восстановление логики из моего бинарника — это задача, на которую у современных суперкомпьютеров уйдут миллиарды лет. Это физика и математика, против них не попрешь.

Инвариант ζ = 1.024: Система в реальном времени мониторит «резонанс» данных. Малейшая попытка подсунуть фейковые веса или изменить инструкцию — и ядро блокируется.

GPU-Native: Защита крутится прямо в CUDA-ядрах вашей видеокарты. Хакеры привыкли работать с CPU, а тут их ждет сюрприз на уровне тензорных вычислений.

Для кого это?

Если ты разработчик ИИ и не хочешь, чтобы твою нейронку за $100к украли и перепродали.

Если тебе нужна реальная защита интеллектуальной собственности в софте

Если ты хочешь, чтобы твой софт работал только там, где ты разрешил.

Финтех и Криптография: защита кошельков и транзакций от подмены кода в памяти.

Gamedev и Анти-чит: создание игр, которые невозможно взломать или модифицировать сторонним софтом.

Промышленный софт (IoT): защита прошивок критически важного оборудования от диверсий.

Защита IP: превращение уникальных коммерческих алгоритмов в «черный ящик» для конкурентов.

Где потрогать?

Я выложил бинарные ядра (GPU и CPU) на GitHub. Внутри — движки, которые успешно прошли аудит 64 антивирусов.
Ссылка на GitHub:
https://github.com/fomamarkov-creator/Markov-Shield-AI-Publi...
Инструкция прилагается на GitHub.

Попробуйте взломать (тестирование):

Основная цель публикации — «краш-тест» от сообщества.
Вы можете:Скачать демо-бинарник, защищенный этой системой.
Попробовать запустить его под отладчиком (debugger) или изменить в нем хотя бы один байт.
Проверить, действительно ли программа «умирает» и теряет математическую целостность при таких манипуляциях.

В чем суть проверки?

Вам нужно убедиться, работает ли заявленный «математический замок». По утверждению автора, защита построена на NP-трудности и резонансных инвариантах.
Обычные инструменты реверса (вроде IDA Pro или Ghidra) должны столкнуться с тем, что код выглядит как «неприступный монолит», который невозможно декомпилировать в читаемую логику.

Лицензия — AGPLv3 для личного пользования.
Для коммерции и военки — пишите в личку или почту :ef.87@mail.ru fomamarkov@gmail.com

Ломайте, тестируйте, пишите в комментах, что думаете. Только не удивляйтесь, если ваш дебаггер просто «сломает зубы».

Показать полностью 3
3

Как конвертировать Word в Markdown (и обратно) с помощью Python

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

Однако «барьер формата» между ними часто вызывает головную боль: нужно ли вручную копировать, вставлять и подгонять оформление абзац за абзацем? Конечно же, нет. В этой статье будет подробно рассказано, как использовать Free Spire.Doc в среде Python, чтобы эффективно выполнять двунаправленную конвертацию между Word и Markdown.

Почему стоит выбрать Free Spire.Doc?

На рынке есть множество библиотек для обработки документов, но Spire.Doc особенно хорошо справляется с преобразованием между Word и Markdown. Она не только корректно обрабатывает базовый текст, но и отлично распознает и конвертирует сложные структуры — такие как заголовки, абзацы, таблицы и списки. Более того, она поддерживает оба формата Word: .doc и .docx, а также стандартный синтаксис Markdown. Конвертированные документы аккуратно отформатированы и логично структурированы, требуя почти никаких дополнительных правок.

Установка библиотеки Spire.Doc:

pip install spire.doc.free

Word → Markdown: всего три строки ключевого кода

from spire.doc import *

from spire.doc.common import *

# Создаем объект Document

document = Document()

# Загружаем Word-файл (поддерживает .docx и .doc)

document.LoadFromFile("input.docx")

# Сохраняем как файл Markdown

document.SaveToFile("WordToMarkdown.md", FileFormat.Markdown)

document.Close()

После выполнения кода все уровни заголовков в документе Word автоматически сопоставляются с тегами Markdown #–######, абзацы сохраняют корректные переносы строк, таблицы конвертируются в синтаксис таблиц Markdown, а упорядоченные/неупорядоченные списки распознаются правильно. Весь процесс занимает всего несколько секунд, значительно повышая эффективность работы.

Markdown → Word: так же просто

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

from spire.doc import *

from spire.doc.common import *

document = Document()

# Загружаем файл Markdown

document.LoadFromFile("input.md")

# Сохраняем как документ Word (поддерживает .docx и .doc)

document.SaveToFile("MdToDocx.docx", FileFormat.Docx)

# Если нужен старый формат .doc, можно сохранить отдельно

# document.SaveToFile("MdToDoc.doc", FileFormat.Doc)

document.Close()

Конвертированный документ Word автоматически применяет стили по умолчанию: четкая иерархия заголовков, полные границы таблиц и разумные отступы для списков — документ готов к печати или дальнейшей верстке.

Обработка изображений: проблема встраивания Base64 и решения

При конвертации Word в Markdown есть легко упускаемая из виду проблема: обработка изображений . По умолчанию Spire.Doc конвертирует встраиваемые изображения в Word в кодировку Base64 и напрямую встраивает их в файл Markdown. Плюс этого подхода в том, что один файл становится самодостаточным — им удобно делиться.

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

Решение оптимизации: извлечь изображение для внешних ссылок

Лучше извлечь изображения в отдельную папку, а затем ссылаться на них в Markdown через относительные пути. Хотя Spire.Doc напрямую не предоставляет параметр «автоматически внешнее вынесение ссылок на изображения при сохранении», мы можем решить задачу вручную: извлечь изображения и заменить ссылки.

from spire.doc import *

import os

document = Document()

document.LoadFromFile("input.docx")

# Создаем директорию для изображений

image_dir = "images"

os.makedirs(image_dir, exist_ok=True)

# Проходим по всем изображениям и извлекаем их

for i, image inenumerate(document.Images):

withopen(f"{image_dir}/img_{i}.png", "wb") as f:

f.write(image.ImageData)

# Сначала конвертируем в Markdown (все еще со встроенными Base64)

document.SaveToFile("temp.md", FileFormat.Markdown)

# Далее с помощью regex или замены строк заменяем Base64-изображения на локальные ссылки

# Этот шаг нужно выполнить вручную или с помощью дополнительного скрипта

document.Close()

Если документов много, процесс можно полностью автоматизировать: распарсить сгенерированный Markdown-файл, найти блоки Base64-изображений, декодировать их и сохранить локально, затем заменить на формат ![](images/img_x.png). Коллекция document.Images в Spire.Doc дает нам возможность извлекать изображения, и в сочетании со скриптингом можно добиться полной автоматизации этой оптимизации.

Практические сценарии применения

Это решение было проверено в нескольких реальных ситуациях:

  1. Миграция технической документации : пакетно конвертировать существующие руководства по продуктам в формате Word в Markdown для импорта в VuePress или Docsify базы знаний.

  2. Публикации в нескольких форматах : писать в Markdown и конвертировать в Word, чтобы соответствовать требованиям клиента или руководителя к официальным документам.

  3. Совместный обзор : команда просматривает изменения в режиме Word «Отслеживание изменений», затем возвращает обратно в Markdown одним кликом, чтобы продолжить разработку.

Итоги

С библиотекой Spire.Doc разработчики на Python могут выполнять двунаправленную конвертацию между Word и Markdown всего несколькими строками кода, при этом полностью сохраняя ключевые структуры — заголовки, абзацы, таблицы и списки. Для документов с большим числом изображений объединение извлечения изображений с решениями для внешних ссылок позволяет эффективно контролировать размер файлов и улучшать опыт управления документами. Если вы часто переключаетесь между этими форматами, попробуйте это решение — и попрощайтесь с утомительной ручной версткой.

Показать полностью
4

Краткое руководство по извлечению таблиц из PDF с помощью Python

В работе с анализом данных мы часто сталкиваемся с необходимостью извлечения табличных данных из PDF-файлов. Однако прямое копирование таблиц из PDF часто приводит к хаосу в форматировании и смещению данных. Эта статья шаг за шагом покажет вам, как использовать библиотеку Free Spire.PDF for Python для быстрого и точного распознавания и извлечения таблиц из PDF, а также сохранения данных в распространённых форматах, таких как CSV и Excel.

1. Подготовка: Установка необходимых библиотек

Сначала вам нужно установить библиотеку Spire.PDF. Откройте терминал или командную строку и выполните следующую команду:

pip install spire.pdf.free

Если вы планируете экспортировать извлечённые данные в формат Excel, рекомендуется также установить pandas и openpyxl:

pip install pandas openpyxl

2. Основной код: Извлечение таблиц из PDF

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

from spire.pdf import PdfDocument, PdfTableExtractor

# 1. Загрузить PDF-файл

pdf = PdfDocument()

pdf.LoadFromFile("sample.pdf")

# 2. Создать экстрактор таблиц

table_extractor = PdfTableExtractor(pdf)

# 3. Извлечь все таблицы с первой страницы

tables = table_extractor.ExtractTable(0)

# 4. Пройтись по каждой таблице

for table in tables:

row_count = table.GetRowCount()

column_count = table.GetColumnCount()

# Извлечь содержимое ячеек построчно

for i in range(row_count):

row_data = []

for j in range(column_count):

cell_text = table.GetText(i, j)

row_data.append(cell_text)

print(row_data)

Пояснение к коду

  • LoadFromFile(): Загружает PDF-файл из указанного пути

  • PdfTableExtractor(): Создаёт экземпляр экстрактора таблиц

  • ExtractTable(номер страницы): Извлекает все таблицы с указанной страницы, нумерация страниц начинается с 0

  • GetRowCount() / GetColumnCount(): Получает количество строк и столбцов таблицы

  • GetText(строка, столбец): Получает текстовое содержимое указанной ячейки

3. Расширенная обработка: Пакетное извлечение из многостраничного PDF

Если PDF содержит несколько страниц, вы можете использовать цикл для пакетного извлечения всех таблиц:

from spire.pdf import PdfDocument, PdfTableExtractor

pdf = PdfDocument()

pdf.LoadFromFile("multi_page_report.pdf")

# Пройтись по всем страницам

for page_index in range(pdf.Pages.Count):

extractor = PdfTableExtractor(pdf)

tables = extractor.ExtractTable(page_index)

print(f"\n=== Страница {page_index + 1} найдено {len(tables)} таблиц ===")

for t, table in enumerate(tables):

print(f"--- Таблица {t+1} ---")

rows = table.GetRowCount()

cols = table.GetColumnCount()

for i in range(rows):

row = [table.GetText(i, j) for j in range(cols)]

print(row)

4. Экспорт данных: Сохранение в файлы CSV или Excel

Извлечённые табличные данные можно легко преобразовать в другие форматы. Следующий пример сохраняет данные в CSV-файл:

import csv

from spire.pdf import PdfDocument, PdfTableExtractor

pdf = PdfDocument()

pdf.LoadFromFile("sample.pdf")

extractor = PdfTableExtractor(pdf)

tables = extractor.ExtractTable(0)

if tables:

table = tables[0]

rows = table.GetRowCount()

cols = table.GetColumnCount()

# Собрать все данные

data = []

for i in range(rows):

row_data = [table.GetText(i, j) for j in range(cols)]

data.append(row_data)

# Записать в CSV-файл

with open("output.csv", "w", newline="", encoding="utf-8") as f:

writer = csv.writer(f)

writer.writerows(data)

print(f"Успешно экспортировано {rows} строк × {cols} столбцов данных в output.csv")

Чтобы экспортировать данные в Excel-файл, вы можете использовать pandas:

import pandas as pd

# Предположим, что data — это извлечённый выше двумерный список

df = pd.DataFrame(data[1:], columns=data[0]) # Первая строка как заголовки столбцов

df.to_excel("output.xlsx", index=False)

print("Данные сохранены как output.xlsx")

5. Часто возникающие проблемы и советы

  1. Неполное распознавание таблицы? Проверьте, имеет ли таблица в PDF чёткие границы. Для отсканированных документов или PDF на основе изображений требуется технология OCR; Spire.PDF в основном подходит для текстовых PDF.

  2. Обработка объединённых ячеек: Spire.PDF автоматически обрабатывает объединённые ячейки. GetText() возвращает содержимое ячейки в верхнем левом углу объединённой области, а для остальных позиций возвращает пустую строку.

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

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

Показать полностью
1

MiniMax M3 выглядит как один из самых сильных открытых релизов этого года

Одна модель, чтобы работать в как агент, держать длинный контекст (1M) и понимать разные типы модальностей.

Бенчмарки

- 59.0% на SWE-Bench Pro

- 66.0% на Terminal Bench 2.1

- 34.8% на SWE-fficiency

- 28.8% на KernelBench Hard

- 74.2% на MCP Atlas

- контекст до 1M токенов за счёт MiniMax Sparse Attention

- нативная мультимодальность

Отдельно запустили MiniMax Code - среду для работы с кодом на базе новой модели.

По ценам: в первые 7 дней дают скидку 50% на стандартное использование с контекстом до 512K.

Китайцы выкладывают в open source модель, которая обходит и Opus, и GPT-5.5 на BrowseComp и SVG Bench.

При этом она ещё и лучше GPT-5.5 на SWE-Bench Pro, KernelBench Hard и BankerToolBench, а Opus обгоняет на OSWorld Verified.

API: http://platform.minimax.io  

Тарифы по токенам: https://platform.minimax.io/subscribe/token-plan  

MiniMax Code: http://code.minimax.io

Примеры работы и разбор модели: t.me/ai_machinelearning_big_data

#MiniMax #ai #ml

Показать полностью 1
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества