группируем пары слов в новые группы

у нас есть список пар слов
который хранится в файле txt  utf-8
нам необходимо найти векторы между этими парами
которые можно соединить в группы из 4х слов
на основе склонений, и родов слов ( словоформ )

также можно из списка одиночных слов
делать подходящие по склонению пары слов
или из одного слова и пары делать тройку слов
которые также связаны вместе
но это уже другая программа хотя она похожа на первую
по содержанию конструкции этого алгоритма


например:

так что
у нас
это есть
они понимают
мы знаем
возможно это
такие пары
это было
это так
так хорошо
что если
мы можем
найти ответ
тогда возможно
это даст
это то
это было
что нам
было нужно
нам то
что мы
хотели получить
на основе
этих знаний
можно узнать
зачем нам
это нужно
хорошая задача
получен ответ
мы этого
не знаем
хорошо что


далее новые комбинации групп слов :

что нам было нужно
зачем нам это нужно
на основе этих знаний
мы можем найти ответ
хорошо что получен ответ
так хорошо это было




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

 шаг 1: Чтение данных из файла
Сначала нужно прочитать пары слов из файла.
Предположим, что файл называется pairs.txt.

# Чтение пар слов из файла
def read_word_pairs(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        pairs = [line.strip().split() for line in file if line.strip()]
    return pairs



  шаг 2: Анализ слов с помощью pymorphy2
Установите библиотеку pymorphy2, если она еще не установлена:

pip install pymorphy2

Так можно использовать pymorphy2 для анализа форм слов.


import pymorphy2

morph = pymorphy2.MorphAnalyzer()

def analyze_word(word):
    return morph.parse(word)

def get_word_info(word):
    parsed = analyze_word(word)
    return parsed[0]  # Возвращаем первую (наиболее вероятную) форму



  шаг 3: Группировка слов по склонению и роду
Теперь можно создать функцию, которая будет группировать слова по их характеристикам.

def group_words(pairs):
    grouped = {}
   
    for pair in pairs:
        word1_info = get_word_info(pair[0])
        word2_info = get_word_info(pair[1])
       
        key = (word1_info.gender, word1_info.case, word1_info.number)  # Используем род, падеж и число для группировки
       
        if key not in grouped:
            grouped[key] = []
        grouped[key].append(pair)
   
    return grouped


  шаг 4: Создание новых словосочетаний
Можно реализовать функцию, которая будет генерировать новые комбинации на основе существующих слов.

def create_combinations(grouped):
    combinations = []
   
    for key, pairs in grouped.items():
        if len(pairs) >= 2:  # Нужно как минимум 2 пары для создания комбинаций
            for i in range(len(pairs)):
                for j in range(i + 1, len(pairs)):
                combinations.append((pairs[i][0], pairs[i][1], pairs[j][0], pairs[j][1]))
   
    return combinations




Пример использования
Теперь можно использовать все эти функции вместе:

file_path = 'pairs.txt'
pairs = read_word_pairs(file_path)
grouped = group_words(pairs)
combinations = create_combinations(grouped)

for combo in combinations:
    print(combo)


Этот алгоритм позволяет группировать пары слов по склонению и роду, а также создавать новые комбинации.
Вы можете доработать его, добавив дополнительные условия и улучшив обработку. Например, можно добавить обработку одиночных слов, чтобы создавать тройки слов.


* далее делаем один код из этих блоков программы для пар слов



Вот полный код программы, которая читает пары слов из файла, анализирует их с помощью pymorphy2, группирует по склонению и роду, а также создает новые комбинации слов.

import pymorphy2

# Функция для чтения пар слов из файла
def read_word_pairs(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        pairs = [line.strip().split() for line in file if line.strip()]
    return pairs

# Инициализация морфологического анализатора
morph = pymorphy2.MorphAnalyzer()

# Функция для анализа слова
def analyze_word(word):
    return morph.parse(word)

# Функция для получения информации о слове
def get_word_info(word):
    parsed = analyze_word(word)
    return parsed[0]  # Возвращаем первую (наиболее вероятную) форму

# Функция для группировки слов по склонению и роду
def group_words(pairs):
    grouped = {}
   
    for pair in pairs:
        word1_info = get_word_info(pair[0])
        word2_info = get_word_info(pair[1])
       
        key = (word1_info.gender, word1_info.case, word1_info.number) 

# Используем род, падеж и число для группировки
       
        if key not in grouped:
            grouped[key] = []
        grouped[key].append(pair)
   
    return grouped

# Функция для создания новых комбинаций
def create_combinations(grouped):
    combinations = []
   
    for key, pairs in grouped.items():
        if len(pairs) >= 2:  # Нужно как минимум 2 пары для создания комбинаций
            for i in range(len(pairs)):
                for j in range(i + 1, len(pairs)):
                combinations.append((pairs[i][0], pairs[i][1], pairs[j][0], pairs[j][1]))
   
    return combinations

# Основная функция
def main():
    file_path = 'pairs.txt'  #  путь к вашему файлу с парами слов
    pairs = read_word_pairs(file_path)
    grouped = group_words(pairs)
    combinations = create_combinations(grouped)

    # Выводим найденные комбинации
    for combo in combinations:
        print(combo)

if __name__ == "__main__":
    main()


Как использовать:
Убедитесь, что у вас установлена библиотека pymorphy2.
Если нет, установите её с помощью команды:

pip install pymorphy2
Создайте текстовый файл pairs.txt и добавьте в него ваши пары слов, например:

что так
у нас
это есть
они понимают
мы знаем


Запустите программу.
Она прочитает пары слов из файла, проанализирует их и выведет новые комбинации, основанные на их склонении и роде.

Этот код объединяет все блоки в одну программу и позволяет вам получить желаемый результат.



  **


Ошибка, с которой вы столкнулись, связана с тем, что объект, возвращаемый pymorphy2, не имеет атрибутов gender, case и number напрямую. Вместо этого, вам нужно использовать методы и свойства этого объекта для получения нужной информации.

Вот исправленная версия кода, которая корректно извлекает род,
падеж и число из объекта Parse:



import pymorphy2

# Функция для чтения пар слов из файла
def read_word_pairs(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        pairs = [line.strip().split() for line in file if line.strip()]
    return pairs

# Инициализация морфологического анализатора
morph = pymorphy2.MorphAnalyzer()

# Функция для анализа слова
def analyze_word(word):
    return morph.parse(word)

# Функция для получения информации о слове
def get_word_info(word):
    parsed = analyze_word(word)
    return parsed[0]  # Возвращаем первую (наиболее вероятную) форму

# Функция для группировки слов по склонению и роду
def group_words(pairs):
    grouped = {}
   
    for pair in pairs:
        word1_info = get_word_info(pair[0])
        word2_info = get_word_info(pair[1])
       
        # Используем род, падеж и число для группировки
        key = (word1_info.tag.gender, word1_info.tag.case, word1_info.tag.number)
       
        if key not in grouped:
            grouped[key] = []
        grouped[key].append(pair)
   
    return grouped

# Функция для создания новых комбинаций
def create_combinations(grouped):
    combinations = []
   
    for key, pairs in grouped.items():
        if len(pairs) >= 2:  # Нужно как минимум 2 пары для создания комбинаций
            for i in range(len(pairs)):
                for j in range(i + 1, len(pairs)):
                combinations.append((pairs[i][0], pairs[i][1], pairs[j][0], pairs[j][1]))
   
    return combinations

# Основная функция
def main():
    file_path = 'pairs.txt'  # Здесь укажите путь к вашему файлу с парами слов
    pairs = read_word_pairs(file_path)
    grouped = group_words(pairs)
    combinations = create_combinations(grouped)

    # Выводим найденные комбинации в нужном формате
    for combo in combinations:
        print(' '.join(combo))  # Объединяем слова в строку с пробелами

if __name__ == "__main__":
    main()



Изменения в коде:
В функции group_words я заменил word1_info.gender, word1_info.case и word1_info.number на word1_info.tag.gender, word1_info.tag.case и word1_info.tag.number. Эти свойства содержат нужную информацию о слове.

*
В части, где программа выводит комбинации, я заменил print(combo) на print(' '.join(combo)).
Это позволяет объединить слова в строку, разделяя их пробелами.






получены новые группы слов

например это что либо
например это так что
например это у нас
например это возможно это
например это это было
например это это так
например это так хорошо
например это что если
например это найти ответ
например это тогда возможно
например это это даст
например это это есть
например это это то
например это это было
например это это так
например это для того
например это это что
например это что нам
например это что мы
например это на основе
например это можно узнать
например это зачем нам
например это это нужно
например это не знаем
например это хорошо что
например это что нам
например это нужно понять
например это далее так
что либо так что
что либо у нас
что либо возможно это
что либо это было
что либо это так
что либо так хорошо
что либо что если
что либо найти ответ
что либо тогда возможно
что либо это даст
что либо это есть
что либо это то
что либо это было
что либо это так
что либо для того
что либо это что
что либо что нам
что либо что мы
что либо на основе
что либо можно узнать
что либо зачем нам
что либо это нужно
что либо не знаем
что либо хорошо что
что либо что нам
что либо нужно понять
что либо далее так
так что у нас
так что возможно это
так что это было
так что это так
так что так хорошо
так что что если
так что найти ответ
так что тогда возможно
так что это даст
так что это есть
так что это то
так что это было
так что это так
так что для того
так что это что
так что что нам
так что что мы
так что на основе
так что можно узнать
так что зачем нам
так что это нужно
так что не знаем
так что хорошо что
так что что нам
так что нужно понять
так что далее так
у нас возможно это
у нас это было
у нас это так
у нас так хорошо
у нас что если
у нас найти ответ
у нас тогда возможно
у нас это даст
у нас это есть
у нас это то
у нас это было
у нас это так
у нас для того
у нас это что
у нас что нам
у нас что мы
у нас на основе
у нас можно узнать
у нас зачем нам
у нас это нужно
у нас не знаем
у нас хорошо что
у нас что нам
у нас нужно понять
у нас далее так
возможно это это было
возможно это это так
возможно это так хорошо
возможно это что если
возможно это найти ответ
возможно это тогда возможно
возможно это это даст
возможно это это есть
возможно это это то
возможно это это было
возможно это это так
возможно это для того
возможно это это что
возможно это что нам
возможно это что мы
возможно это на основе
возможно это можно узнать
возможно это зачем нам
возможно это это нужно
возможно это не знаем
возможно это хорошо что
возможно это что нам
возможно это нужно понять
возможно это далее так
это было это так
это было так хорошо
это было что если
это было найти ответ
это было тогда возможно
это было это даст
это было это есть
это было это то
это было это было
это было это так
это было для того
это было это что
это было что нам
это было что мы
это было на основе
это было можно узнать
это было зачем нам
это было это нужно
это было не знаем
это было хорошо что
это было что нам
это было нужно понять
это было далее так
это так так хорошо
это так что если
это так найти ответ
это так тогда возможно
это так это даст
это так это есть
это так это то
это так это было
это так это так
это так для того
это так это что
это так что нам
это так что мы
это так на основе
это так можно узнать
это так зачем нам
это так это нужно
это так не знаем
это так хорошо что
это так что нам
это так нужно понять
это так далее так
так хорошо что если
так хорошо найти ответ
так хорошо тогда возможно
так хорошо это даст
так хорошо это есть
так хорошо это то
так хорошо это было
так хорошо это так
так хорошо для того
так хорошо это что
так хорошо что нам
так хорошо что мы
так хорошо на основе
так хорошо можно узнать
так хорошо зачем нам
так хорошо это нужно
так хорошо не знаем
так хорошо хорошо что
так хорошо что нам
так хорошо нужно понять
так хорошо далее так
что если найти ответ
что если тогда возможно
что если это даст
что если это есть
что если это то
что если это было
что если это так
что если для того
что если это что
что если что нам
что если что мы
что если на основе
что если можно узнать
что если зачем нам
что если это нужно
что если не знаем
что если хорошо что
что если что нам
что если нужно понять
что если далее так
найти ответ тогда возможно
найти ответ это даст
найти ответ это есть
найти ответ это то
найти ответ это было
найти ответ это так
найти ответ для того
найти ответ это что
найти ответ что нам
найти ответ что мы
найти ответ на основе
найти ответ можно узнать
найти ответ зачем нам
найти ответ это нужно
найти ответ не знаем
найти ответ хорошо что
найти ответ что нам
найти ответ нужно понять
найти ответ далее так
тогда возможно это даст
тогда возможно это есть
тогда возможно это то
тогда возможно это было
тогда возможно это так
тогда возможно для того
тогда возможно это что
тогда возможно что нам
тогда возможно что мы
тогда возможно на основе
тогда возможно можно узнать
тогда возможно зачем нам
тогда возможно это нужно
тогда возможно не знаем
тогда возможно хорошо что
тогда возможно что нам
тогда возможно нужно понять
тогда возможно далее так
это даст это есть
это даст это то
это даст это было
это даст это так
это даст для того
это даст это что
это даст что нам
это даст что мы
это даст на основе
это даст можно узнать
это даст зачем нам
это даст это нужно
это даст не знаем
это даст хорошо что
это даст что нам
это даст нужно понять
это даст далее так
это есть это то
это есть это было
это есть это так
это есть для того
это есть это что
это есть что нам
это есть что мы
это есть на основе
это есть можно узнать
это есть зачем нам
это есть это нужно
это есть не знаем
это есть хорошо что
это есть что нам
это есть нужно понять
это есть далее так
это то это было
это то это так
это то для того
это то это что
это то что нам
это то что мы
это то на основе
это то можно узнать
это то зачем нам
это то это нужно
это то не знаем
это то хорошо что
это то что нам
это то нужно понять
это то далее так
это было это так
это было для того
это было это что
это было что нам
это было что мы
это было на основе
это было можно узнать
это было зачем нам
это было это нужно
это было не знаем
это было хорошо что
это было что нам
это было нужно понять
это было далее так
это так для того
это так это что
это так что нам
это так что мы
это так на основе
это так можно узнать
это так зачем нам
это так это нужно
это так не знаем
это так хорошо что
это так что нам
это так нужно понять
это так далее так
для того это что
для того что нам
для того что мы
для того на основе
для того можно узнать
для того зачем нам
для того это нужно
для того не знаем
для того хорошо что
для того что нам
для того нужно понять
для того далее так
это что что нам
это что что мы
это что на основе
это что можно узнать
это что зачем нам
это что это нужно
это что не знаем
это что хорошо что
это что что нам
это что нужно понять
это что далее так
что нам что мы
что нам на основе
что нам можно узнать
что нам зачем нам
что нам это нужно
что нам не знаем
что нам хорошо что
что нам что нам
что нам нужно понять
что нам далее так
что мы на основе
что мы можно узнать
что мы зачем нам
что мы это нужно
что мы не знаем
что мы хорошо что
что мы что нам
что мы нужно понять
что мы далее так
на основе можно узнать
на основе зачем нам
на основе это нужно
на основе не знаем
на основе хорошо что
на основе что нам
на основе нужно понять
на основе далее так
можно узнать зачем нам
можно узнать это нужно
можно узнать не знаем
можно узнать хорошо что
можно узнать что нам
можно узнать нужно понять
можно узнать далее так
зачем нам это нужно
зачем нам не знаем
зачем нам хорошо что
зачем нам что нам
зачем нам нужно понять
зачем нам далее так
это нужно не знаем
это нужно хорошо что
это нужно что нам
это нужно нужно понять
это нужно далее так
не знаем хорошо что
не знаем что нам
не знаем нужно понять
не знаем далее так
хорошо что что нам
хорошо что нужно понять
хорошо что далее так
что нам нужно понять
что нам далее так
нужно понять далее так
было можно было нужно
они понимают мы знаем
они понимают такие пары
они понимают мы можем
они понимают мы этого
они понимают новые комбинации
мы знаем такие пары
мы знаем мы можем
мы знаем мы этого
мы знаем новые комбинации
такие пары мы можем
такие пары мы этого
такие пары новые комбинации
мы можем мы этого
мы можем новые комбинации
мы этого новые комбинации


Рецензии