Проверка уникальности текста – это важная задача в различных областях, таких как образование, журналистика, контент-маркетинг и защита авторских прав. Она позволяет выявить плагиат, дубликаты или заимствованный контент. В этой статье мы рассмотрим, как с помощью Python можно реализовать проверку уникальности текста и определить процент оригинальности.
Алгоритм проверки уникальности
Проверка уникальности текста обычно включает в себя сравнение данного текста с другими источниками или базой данных. Алгоритм может включать несколько шагов:
- Предварительная обработка текста: Очистка текста от ненужных символов, преобразование в нижний регистр, удаление стоп-слов (наиболее распространенных слов, не несущих смысловой нагрузки) и токенизация – разделение текста на отдельные слова или токены.
- Создание отпечатка текста: Преобразование обработанного текста в уникальный отпечаток, который может быть представлен в виде хеш-кода или векторного представления.
- Сравнение отпечатков: Сравнение отпечатка проверяемого текста с отпечатками в базе данных или с другими текстами для выявления совпадений.
- Расчет уникальности: Определение процента уникальности текста на основе количества совпадений и общего объема текста.
Реализация на Python
Для реализации проверки уникальности текста на Python мы будем использовать некоторые полезные библиотеки:
re
– для работы с регулярными выражениями и очистки текста;hashlib
– для создания хеш-кода текста;numpy
– для работы с массивами и матричных операций (необязательно, но может быть полезно для векторного представления текста).
Начнем с импорта необходимых модулей:
import re
import hashlib
import numpy as np
1. Предварительная обработка текста
Сначала определим функцию для очистки текста. Мы удалим знаки препинания, цифры, преобразуем текст в нижний регистр и удалим стоп-слова. Для стоп-слов мы можем использовать предопределенный список или создать собственный.
def clean_text(text):
# Удаление знаков препинания и цифр
text = re.sub(r'[^а-я ]', '', text.lower())
# Разделение текста на слова
words = text.split()
# Список стоп-слов (можно заменить на собственный)
stopwords = ['и', 'на', 'из', 'он', 'она', 'они', 'это', 'в', 'с', 'по', 'а', 'но', 'если']
# Фильтрация стоп-слов
filtered_words = [word for word in words if word not in stopwords]
return ' '.join(filtered_words)
2. Создание отпечатка текста
Для создания уникального отпечатка текста мы будем использовать хеш-функцию SHA-256 из библиотеки hashlib
. SHA-256 обеспечивает высокую вероятность того, что два разных текста не дадут один и тот же хеш.
def text_fingerprint(text):
# Очистка текста
cleaned_text = clean_text(text)
# Создание хеш-кода SHA-256
hash_object = hashlib.sha256(cleaned_text.encode())
hex_dig = hash_object.hexdigest()
return hex_dig
3. Сравнение отпечатков и расчет уникальности
Теперь реализуем функцию, которая будет сравнивать отпечатки двух текстов и возвращать процент уникальности. Мы будем считать, что если два текста имеют одинаковый отпечаток, они полностью совпадают.
def uniqueness_check(text1, text2):
fingerprint1 = text_fingerprint(text1)
fingerprint2 = text_fingerprint(text2)
if fingerprint1 == fingerprint2:
return 0 # Полное совпадение, текст не уникален
# Вычисление процента уникальности
unique_words1 = set(clean_text(text1).split())
unique_words2 = set(clean_text(text2).split())
common_words = unique_words1.intersection(unique_words2)
uniqueness_percentage = (len(unique_words1) + len(unique_words2) - 2 * len(common_words)) / (len(unique_words1) + len(unique_words2)) * 100
return uniqueness_percentage
В этой функции мы сначала проверяем, совпадают ли отпечатки текстов. Если да, то возвращаем 0% уникальности. В противном случае, мы вычисляем процент уникальности, используя количество уникальных слов в каждом тексте и количество общих слов.
Пример использования
Давайте проверим уникальность двух текстов:
text1 = "Python - мощный и универсальный язык программирования. Он позволяет разрабатывать различные приложения, включая веб-сайты, игры и научные проекты. Язык Python прост в изучении и имеет обширные библиотеки."
text2 = "Язык программирования Python используется для создания веб-сайтов, игр и научных приложений. Он универсален и прост в освоении благодаря обширным библиотекам."
uniqueness = uniqueness_check(text1, text2)
print(f"Процент уникальности текста: {uniqueness:.2f}%")
Результатом будет процент уникальности, который покажет, насколько текст отличается от другого.
Расширение базы данных
В реальных сценариях вам, вероятно, потребуется база данных отпечатков текстов для сравнения. Вы можете хранить эти отпечатки в базе данных, такой как SQLite или MySQL. При проверке уникальности текста его отпечаток будет сравниваться со всеми отпечатками в базе данных.
Заключение
Проверка уникальности текста на Python – это мощный инструмент для выявления плагиата и дубликатов. Используя хеш-функции и методы обработки текста, можно эффективно сравнивать и анализировать большие объемы контента. Реализация, представленная в этой статье, является базовой и может быть расширена для более сложных сценариев, включая использование векторных представлений текста и машинного обучения для более точного сравнения.
import re
import hashlib
# Функция для очистки текста
def clean_text(text):
# Удаление знаков препинания и цифр
text = re.sub(r'[^а-я ]', '', text.lower())
return text
# Функция для создания отпечатка текста (хеш-кода SHA-256)
def text_fingerprint(text):
cleaned_text = clean_text(text)
hash_object = hashlib.sha256(cleaned_text.encode())
return hash_object.hexdigest()
# Функция для проверки уникальности двух текстов
def uniqueness_check(text1, text2):
fingerprint1 = text_fingerprint(text1)
fingerprint2 = text_fingerprint(text2)
if fingerprint1 == fingerprint2:
return 0, "Тексты идентичны"
# Вычисление процента уникальности
unique_words1 = set(clean_text(text1).split())
unique_words2 = set(clean_text(text2).split())
common_words = unique_words1.intersection(unique_words2)
uniqueness_percentage = (len(unique_words1) + len(unique_words2) - 2 * len(common_words)) / (len(unique_words1) + len(unique_words2)) * 100
return uniqueness_percentage, "Тексты уникальны"
# Пример использования
text1 = "Python - мощный и универсальный язык программирования. Он позволяет разрабатывать различные приложения, включая веб-сайты, игры и научные проекты. Язык Python прост в изучении и имеет обширные библиотеки."
text2 = "Язык программирования Python используется для создания веб-сайтов, игр и научных приложений. Он универсален и прост в освоении благодаря обширным библиотекам."
uniqueness, message = uniqueness_check(text1, text2)
print(f"Процент уникальности текста: {uniqueness:.2f}%. {message}")