a new mathematical challenge 8-01-2026
я придумал новую математическую задачу
для всех математиков и программистов мира
и это вероятно весьма важное событие в мире математики
нашей планеты земля
главная задача математики или вершина эверест математической теории всего
наверно вы подумали про майнингда
- вы наверно в чём то может быть и правы
но я придумал новый майнинг и он намного интересней
ван сек ..
сейчас всё будет
вот такая задача:
у нас есть мир майнкрафт - ну пусть это Биг Сити
имеем примерно 1 гигабайт текстаиз него делаем нарезки по 2-3 слова
и далее итерируем их в группы по 1000 элементов
в результате мы так получаем множества чисел и матриц которые
можно проецировать на всё что угодно
эту задачу можно решать бесконечно
и она также может быть усложнена
так чтобы находить здесь
всё новые и новые корни решения теории числовых множеств
интересно ? .. думаю что да ..
мне нужна программа на питоне
исходные тексты берём из файлов txt
Ответ>
Задача интересная и необычная, давайте разберемся подробнее. Для начала опишем шаги реализации вашей идеи:
Шаги:
Читаем текстовые файлы (*.txt).
Разбиваем текст на кусочки по 2-3 слова.
Группируем полученные фрагменты случайным образом в наборы по 1000 элементов.
Преобразуем каждый фрагмент в число и матрицу.
Производим необходимые операции над множеством чисел и матриц.
Реализовать такую программу можно следующим образом:
python
import os
import random
from collections import defaultdict
def read_text_files(directory):
"""Читает содержимое всех .txt-файлов в заданной директории."""
texts = []
for filename in os.listdir(directory):
if filename.endswith('.txt'):
with open(os.path.join(directory, filename), 'r', encoding='utf-8') as file:
text = file.read()
texts.append(text)
return '\n'.join(texts)
def split_into_chunks(text, chunk_size=2):
"""Разделяет текст на куски по два-три слова."""
words = text.split()
chunks = [' '.join(words[i:i+chunk_size]) for i in range(0, len(words), chunk_size)]
return chunks
def group_into_sets(chunks, set_size=1000):
"""Группирует куски в наборы по 1000 элементов."""
sets = []
while len(chunks) >= set_size:
subset = random.sample(chunks, set_size)
sets.append(subset)
# Удаляем использованные элементы, чтобы избежать повторений
chunks = list(set(chunks) - set(subset))
return sets
def convert_to_number_and_matrix(chunk):
"""Преобразует строку в число и простую матрицу."""
# Пример преобразования строки в число (например, сумма кодов символов)
number = sum(ord(c) for c in chunk)
# Матрица: строка преобразуется в матрицу размером 3х3,
# используя первые девять символов (если их меньше, дополняются нулями)
matrix_data = [ord(c) % 256 for c in chunk[:9]]
while len(matrix_data) < 9:
matrix_data.append(0)
matrix = [[matrix_data[0], matrix_data[1], matrix_data[2]],
[matrix_data[3], matrix_data[4], matrix_data[5]],
[matrix_data[6], matrix_data[7], matrix_data[8]]]
return number, matrix
# Основной сценарий программы
if __name__ == "__main__":
directory_path = input("Введите путь к папке с файлами .txt: ")
raw_text = read_text_files(directory_path)
chunks = split_into_chunks(raw_text)
grouped_sets = group_into_sets(chunks)
# Создаем словарь, куда будем записывать числа и матрицы
data_dict = defaultdict(list)
for idx, s in enumerate(grouped_sets):
print(f"Набор {idx + 1}:")
numbers_and_matrices = [(convert_to_number_and_matrix(chunk)) for chunk in s]
data_dict[idx].extend(numbers_and_matrices)
Как работает эта программа?
Чтение: Программа читает все .txt файлы из указанной вами директории.
Разбиение: Текст делится на части длиной по 2-3 слова.
Группировка: Куски случайно распределяются в наборы по 1000 элементов.
Преобразование: Каждый кусок превращается в число и простенькую матрицу.
Теперь поясню важные моменты:
Формирование набора: Каждое множество состоит ровно из 1000 фрагментов, выбранных случайным образом из общего списка частей текста.
Обработка дубликатов: Если количество исходных фрагментов больше 1000, программа удаляет уже обработанные фрагменты, чтобы исключить повторы.
Преобразование в число и матрицу:
Число формируется простым суммированием ASCII-кодов символов каждого символа строки.
Простая матрица создается из первых девяти символов строки, где каждый элемент представлен остатком от деления ASCII-кода на 256.
Это базовая реализация вашего подхода, которую можно расширить дополнительными возможностями, такими как вычисление корреляций, спектральных характеристик и прочее.
Программа готова, можете запускать её, задавая нужный каталог с вашими текстовыми файлами.
Улучшить текст в Умном редакторе
теперь я уточню что будет являться решением этой задачирешением будут строки в которых слова связаны по смыслуну примерно так
Ответ
Ваше уточнение интересно и меняет подход к задаче. Теперь цель заключается в поиске тех кусочков текста, где слова семантически взаимосвязаны друг с другом. Давайте немного доработаем нашу программу, добавив модуль анализа смысла слов.
Для обработки смысла лучше всего подойдет библиотека gensim, которая поддерживает модели word embeddings (такие как Word2Vec). Эти модели позволяют оценивать близость слов по смыслу.
Основные изменения:
Добавляем загрузку предварительно обученной модели Word2Vec.
Проверяем схожесть соседних слов в каждом куске текста.
Выбираем лишь те пары слов, чья связь достаточно сильна.
Вот обновленная версия скрипта:
python
import os
import gensim.downloader as api
from collections import defaultdict
# Загрузка предобученной модели Word2Vec
model = api.load('word2vec-google-news-300')
def read_text_files(directory):
"""Читает содержимое всех .txt-файлов в заданной директории."""
texts = []
for filename in os.listdir(directory):
if filename.endswith('.txt'):
with open(os.path.join(directory, filename), 'r', encoding='utf-8') as file:
text = file.read()
texts.append(text)
return '\n'.join(texts)
def split_into_chunks(text, chunk_size=2):
"""Разделяет текст на куски по два-три слова."""
words = text.split()
chunks = [' '.join(words[i:i+chunk_size]) for i in range(0, len(words), chunk_size)]
return chunks
def check_semantic_similarity(chunk):
"""
Проверяет наличие семантического сходства между словами в данном куске текста.
Возвращает True, если хотя бы одна пара слов имеет высокую степень связи.
"""
words = chunk.split()
try:
similarities = model.n_similarity([words[0]], [words[-1]])
return similarities > 0.5 # пороги подобия можно настраивать индивидуально
except KeyError:
return False # слово отсутствует в модели
def process_chunks(chunks):
"""Выбирает и обрабатывает только значащие по смыслу фрагменты"""
meaningful_chunks = []
for chunk in chunks:
if check_semantic_similarity(chunk):
meaningful_chunks.append(chunk)
return meaningful_chunks
# Основной сценарий программы
if __name__ == "__main__":
directory_path = input("Введите путь к папке с файлами .txt: ")
raw_text = read_text_files(directory_path)
chunks = split_into_chunks(raw_text)
meaningful_chunks = process_chunks(chunks)
print("\nЗначимые по смыслу куски текста:")
for idx, mc in enumerate(meaningful_chunks):
print(f"{idx + 1}. {mc}")
Что здесь изменилось:
Мы используем заранее подготовленную модель Word2Vec (word2vec-google-news-300), которая позволяет оценить степень близости двух слов.
Функция check_semantic_similarity() проверяет первое и последнее слово в каждой паре слов.
Если они имеют высокий уровень похожести (по умолчанию порог установлен на уровне 0.5), эта фраза сохраняется.
Финальный список отображает только те пары слов, которые были признаны значащими по смыслу.
Примечания:
Модели Word2Vec требуют значительных ресурсов памяти, поэтому убедитесь, что у вас достаточно оперативной памяти.
Результат сильно зависит от качества текста и выбранного значения порога для оценки связей.
Таким образом, теперь ваша программа выбирает именно те куски текста, где соседние слова действительно связаны по смыслу.
Улучшить текст
нам не надо вводить путь к папкепусть программа находится прямо в этой папке с текстами
Ответ
Хорошо, сделаем проще: наша программа автоматически прочитает файлы из той же самой папки, где расположена сама программа. Уберем ввод пути вручную и сразу запустим обработку.
Ниже приведён улучшенный вариант программы:
python
import os
import gensim.downloader as api
from collections import defaultdict
# Загружаем предобученную модель Word2Vec
model = api.load('word2vec-google-news-300')
def read_text_files():
"""Читает содержимое всех .txt-файлов в текущей рабочей директории."""
current_dir = os.getcwd() # получаем текущую рабочую директорию
texts = []
for filename in os.listdir(current_dir):
if filename.endswith('.txt'):
with open(filename, 'r', encoding='utf-8') as file:
text = file.read()
texts.append(text)
return '\n'.join(texts)
def split_into_chunks(text, chunk_size=2):
"""Разделяет текст на куски по два-три слова."""
words = text.split()
chunks = [' '.join(words[i:i+chunk_size]) for i in range(0, len(words), chunk_size)]
return chunks
def check_semantic_similarity(chunk):
"""
Проверяет наличие семантического сходства между словами в данном куске текста.
Возвращает True, если хотя бы одна пара слов имеет высокую степень связи.
"""
words = chunk.split()
try:
similarity = model.n_similarity([words[0]], [words[-1]]) # проверка первой и последней пар слов
return similarity > 0.5 # порог подобия можно настроить индивидуально
except KeyError:
return False # слово отсутствует в модели
def process_chunks(chunks):
"""Выбирает и обрабатывает только значащие по смыслу фрагменты"""
meaningful_chunks = []
for chunk in chunks:
if check_semantic_similarity(chunk):
meaningful_chunks.append(chunk)
return meaningful_chunks
# Основной сценарий программы
if __name__ == "__main__":
raw_text = read_text_files()
chunks = split_into_chunks(raw_text)
meaningful_chunks = process_chunks(chunks)
print("\nЗначимые по смыслу куски текста:")
for idx, mc in enumerate(meaningful_chunks):
print(f"{idx + 1}. {mc}")
Ключевые улучшения:
Автоматическое чтение файлов. Скрипт сам находит все текстовые файлы (*.txt) в своей текущей директории.
Нет ручного ввода путей, вся работа осуществляется локально там, где лежит файл программы.
Запустите этот скрипт, поместив рядом с ним ваши текстовые файлы, и он автоматически выберет осмысленные фрагменты, основываясь на степени связности слов внутри каждого куска текста.
Этот способ удобен, если вам не хочется каждый раз указывать путь к данным.
можно это Улучшить в редакторе ..
Свидетельство о публикации №126010806337