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

Полная таблица ASCII (0-127) — https://www.asciitable.com/
Полная база Unicode — https://symbl.cc/ru/unicode-table/
Утилиту можно использовать для тестирования сервисов проверки на плагиат (Антиплагиат.ВУЗ и аналоги). Ранее аналогичную схему использовали для обхода таких сервисов — добавление скрытых символов делало текст абсолютно уникальным, хотя визуально он выглядел точно также. Суть достаточно проста: подобрать символ, который не определяется системой и не отображается визуально.
Далее будет код программы и скомпилированные файл exe. Код можно использовать в качестве основы для своих проектов, адаптируя по собственные задачи.
Скомпилированный файл: https://disk.yandex.ru/d/YkTXSU5ZTPAdDA
import tkinter as tk from tkinter import filedialog, messagebox from docx import Document import os import re def is_word_char(char): """Проверяет, является ли символ частью слова (буква или цифра)""" return char.isalpha() or char.isdigit() def insert_symbol_inside_words(): file_path = file_entry.get() if not file_path: messagebox.showerror("Ошибка", "Файл не выбран!") return try: char_code = int(char_entry.get()) symbol = chr(char_code) except ValueError: messagebox.showerror("Ошибка", "Некорректный код символа! Введите число (например, 46 для точки)") return try: interval = int(interval_entry.get()) if interval <= 0: raise ValueError except ValueError: messagebox.showerror("Ошибка", "Интервал должен быть целым числом > 0") return try: doc = Document(file_path) def process_text(text): result = [] word_chars_count = 0 for char in text: if is_word_char(char): word_chars_count += 1 result.append(char) if word_chars_count % interval == 0: result.append(symbol) else: word_chars_count = 0 result.append(char) return ''.join(result) # Обработка параграфов for paragraph in doc.paragraphs: if paragraph.text: paragraph.text = process_text(paragraph.text) # Обработка таблиц for table in doc.tables: for row in table.rows: for cell in row.cells: for paragraph in cell.paragraphs: if paragraph.text: paragraph.text = process_text(paragraph.text) # Сохранение файла base_name, ext = os.path.splitext(file_path) new_file_path = f"{base_name}_modified{ext}" doc.save(new_file_path) messagebox.showinfo("Успех", f"Файл сохранён как:\n{new_file_path}") except Exception as e: messagebox.showerror("Ошибка", f"Произошла ошибка:\n{str(e)}") def select_file(): file_path = filedialog.askopenfilename( title="Выберите файл Word", filetypes=[("Word Files", "*.docx"), ("All Files", "*.*")] ) if file_path: file_entry.delete(0, tk.END) file_entry.insert(0, file_path) # Настройка GUI root = tk.Tk() root.title("Модификатор Word-файлов (внутри слов)") root.geometry("500x200") # Поле для кода символа (десятичный формат) tk.Label(root, text="Код символа (десятичный):").pack(pady=5) char_entry = tk.Entry(root, width=10) char_entry.pack() char_entry.insert(0, "46") # 46 = точка (.) # Поле для интервала tk.Label(root, text="Количество символов внутри слов:").pack(pady=5) interval_entry = tk.Entry(root, width=5) interval_entry.pack() interval_entry.insert(0, "3") # Поле для выбора файла tk.Label(root, text="Файл Word:").pack(pady=5) file_entry = tk.Entry(root, width=50) file_entry.pack(pady=5) tk.Button(root, text="Выбрать файл", command=select_file).pack() # Кнопка обработки tk.Button( root, text="Вставить символ внутри слов", command=insert_symbol_inside_words ).pack(pady=10) tk.Label(root, text="Файл будет создан в том же каталоге").pack() root.mainloop()