поиск повторов групп слов в текстах txt
нам нужно найти все повторы групп слов в фразах
вводим число слов в группе повтора
например 3-7
отбрасываем все повторы кроме одного
и то что получилось записываем в новый файл txt
Отличная задача! Это классическая задача поиска и удаления повторяющихся n-грамм (последовательностей слов) из текста. Вот пошаговый алгоритм для её решения на Python.
План решения:
Считать все текстовые файлы из папки программы.
Объединить их содержимое в одну строку (или обрабатывать по отдельности, в зависимости от задачи).
Токенизировать текст: разбить строку на отдельные слова.
Сгенерировать n-граммы для заданного диапазона (например, от 3 до 7 слов).
Найти уникальные n-граммы, автоматически отбрасывая дубликаты (используя структуру данных set).
Записать результат в новый файл.
Код программы:
import os
from collections import defaultdict
def find_and_remove_duplicate_ngrams(folder_path, output_file, min_n, max_n):
"""
Находит все повторяющиеся n-граммы (группы слов) в текстовых файлах папки
и записывает уникальный набор в новый файл.
Args:
folder_path (str): Путь к папке с файлами .txt
output_file (str): Имя выходного файла
min_n (int): Минимальная длина n-граммы (например, 3)
max_n (int): Максимальная длина n-граммы (например, 7)
"""
# Прочитать все текстовые файлы в указанной папке
all_text = ""
for filename in os.listdir(folder_path):
if filename.endswith(".txt"):
with open(os.path.join(folder_path, filename), 'r', encoding='utf-8') as file:
all_text += file.read() + " " # Добавляем пробел между файлами
# Преобразовать текст в список слов (токенизация)
words = all_text.split()
# Создать множество для хранения УНИКАЛЬНЫХ n-грамм
# Множество (set) автоматически игнорирует дубликаты
unique_ngrams = set()
# Пройти по всем словам и сгенерировать n-граммы для длин от min_n до max_n
for n in range(min_n, max_n + 1):
for i in range(len(words) - n + 1):
# Извлечь последовательность из n слов
ngram = ' '.join(words[i:i+n])
# Добавить её в множество (дубликаты проигнорируются)
unique_ngrams.add(ngram)
# Записать все уникальные n-граммы в выходной файл
with open(output_file, 'w', encoding='utf-8') as out_file:
for ngram in sorted(unique_ngrams): # sorted() для удобства чтения
out_file.write(ngram + '\n')
print(f"; Готово! Найдено и сохранено {len(unique_ngrams)} уникальных n-грамм.")
print(f"; Результат записан в файл: {output_file}")
# = ИНСТРУКЦИЯ ПО ИСПОЛЬЗОВАНИЮ =
# Положите этот скрипт в папку с вашими .txt файлами
# Замените 'my_folder' на путь к вашей папке (или оставьте '.', если скрипт уже в ней)
# Замените 'result.txt' на желаемое имя выходного файла
# Укажите нужный диапазон n-грамм в вызове функции (например, 3 и 7)
if __name__ == "__main__":
# ЗДЕСЬ ЗАДАЙТЕ ПАРАМЕТРЫ
find_and_remove_duplicate_ngrams(
folder_path='.', # Папка с файлами ('.' - текущая папка)
output_file='unique_phrases.txt', # Имя выходного файла
min_n=3, # Минимальная длина фразы
max_n=7 # Максимальная длина фразы
)
Как это использовать:
Сохраните код в файл с расширением .py (например, find_ngrams.py) и поместите его в папку с вашими текстовыми файлами.
Запустите скрипт из командной строки или просто запустите его в вашей IDE.
Результат будет сохранен в файл unique_phrases.txt (или с другим указанным вами именем) в той же папке.
также Важно
Программа учитывает точные совпадения (с учётом регистра и знаков препинания). Фраза "Привет, мир" и "привет мир" будут считаться разными.
Если нужна более продвинутая обработка (приведение к нижнему регистру, удаление знаков препинания), код можно легко доработать.
-> повторы групп слов которые мы отбросили
для статистики сохранить в новом файле повторы.txt
так Мы можем модифицировать предыдущий код, чтобы сохранять повторяющиеся n-граммы в отдельный файл повторы.txt. Для этого мы будем использовать словарь для подсчета количества вхождений каждой n-граммы. После завершения обработки текста, мы можем записать все n-граммы, которые встречаются более одного раза, в файл.
Вот обновлённый код:
import os
from collections import defaultdict
def find_and_remove_duplicate_ngrams(folder_path, output_file, duplicates_file, min_n, max_n):
"""
Находит все повторяющиеся n-граммы (группы слов) в текстовых файлах папки
и записывает уникальный набор в новый файл, а также повторяющиеся n-граммы в отдельный файл.
Args:
folder_path (str): Путь к папке с файлами .txt
output_file (str): Имя выходного файла для уникальных n-грамм
duplicates_file (str): Имя выходного файла для повторяющихся n-грамм
min_n (int): Минимальная длина n-граммы (например, 3)
max_n (int): Максимальная длина n-граммы (например, 7)
"""
# Прочитать все текстовые файлы в указанной папке
all_text = ""
for filename in os.listdir(folder_path):
if filename.endswith(".txt"):
with open(os.path.join(folder_path, filename), 'r', encoding='utf-8') as file:
all_text += file.read() + " " # Добавляем пробел между файлами
# Преобразовать текст в список слов (токенизация)
words = all_text.split()
# Создать словарь для подсчета n-грамм
ngram_count = defaultdict(int)
# Пройти по всем словам и сгенерировать n-граммы для длин от min_n до max_n
for n in range(min_n, max_n + 1):
for i in range(len(words) - n + 1):
# Извлечь последовательность из n слов
ngram = ' '.join(words[i:i+n])
# Увеличить счётчик для этой n-граммы
ngram_count[ngram] += 1
# Разделить уникальные и повторяющиеся n-граммы
unique_ngrams = set()
duplicate_ngrams = set()
for ngram, count in ngram_count.items():
if count == 1:
unique_ngrams.add(ngram)
else:
duplicate_ngrams.add(ngram)
# Записать все уникальные n-граммы в выходной файл
with open(output_file, 'w', encoding='utf-8') as out_file:
for ngram in sorted(unique_ngrams): # sorted() для удобства чтения
out_file.write(ngram + '\n')
# Записать повторяющиеся n-граммы в файл для дубликатов
with open(duplicates_file, 'w', encoding='utf-8') as dup_file:
for ngram in sorted(duplicate_ngrams):
dup_file.write(ngram + '\n')
print(f"; Готово! Найдено и сохранено {len(unique_ngrams)} уникальных n-грамм.")
print(f"; Результат записан в файл: {output_file}")
print(f"; Повторы записаны в файл: {duplicates_file}")
# === ИНСТРУКЦИЯ ПО ИСПОЛЬЗОВАНИЮ ===
# Положите этот скрипт в папку с вашими .txt файлами
# Замените 'my_folder' на путь к вашей папке (или оставьте '.', если скрипт уже в ней)
# Замените 'result.txt' на желаемое имя выходного файла для уникальных n-грамм
# Замените 'duplicates.txt' на желаемое имя выходного файла для дубликатов
# Укажите нужный диапазон n-грамм в вызове функции (например, 3 и 7)
if __name__ == "__main__":
# ЗДЕСЬ ЗАДАЙТЕ ПАРАМЕТРЫ
find_and_remove_duplicate_ngrams(
folder_path='.', # Папка с файлами ('.' - текущая папка)
output_file='unique_phrases.txt', # Имя выходного файла для уникальных n-грамм
duplicates_file='повторы.txt', # Имя выходного файла для повторяющихся n-грамм
min_n=3, # Минимальная длина фразы
max_n=7 # Максимальная длина фразы
)
Как использовать эту программу :
Сохраните код в файл с расширением .py (например, find_ngrams.py)
и поместите его в папку с вашими текстовыми файлами.
Запустите скрипт из командной строки или просто запустите его в вашей IDE.
Результаты будут сохранены в файлы unique_phrases.txt (уникальные n-граммы)
и повторы.txt (повторяющиеся n-граммы) в той же папке.
*
Свидетельство о публикации №125082500723