Небольшой проект на 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()