модель фразы из слов

есть фраза  ввода input
нужно сделать словарь из текста txt
и затем определить части речи слов нашей фразы
(существительное, глагол, прилагательное, наречие, местоимение и так далее )
- затем найти эти же части речи в словаре
и сделать предложение в котором слова не связаны склонением
но имеют те же части речи и в той же последовательности что в первичной фразе
определить части речи слов можем с помощью NLTK





import collections

def create_dictionary(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        text = file.read().lower()
        words = text.split()
        dictionary = collections.defaultdict(list)
        for word in words:
            dictionary[len(word)].append(word)
        return dictionary


import nltk
from nltk import pos_tag, word_tokenize

def get_pos_tags(sentence):
    tokens = word_tokenize(sentence)
    tagged = pos_tag(tokens)
    return tagged


def create_new_sentence(sentence, dictionary):
    tagged = get_pos_tags(sentence)
    new_sentence = []
    for word, tag in tagged:
        word_length = len(word)
        if word_length in dictionary and dictionary[word_length]:
            new_word = dictionary[word_length].pop()
            new_sentence.append(new_word)
        else:
            new_sentence.append(word)
    return ' '.join(new_sentence)



file_path = 'текст.txt'

sentence = input("Введите фразу: ")

dictionary = create_dictionary(file_path)
new_sentence = create_new_sentence(sentence, dictionary)

print(new_sentence)






= ещё один другой алгоритм ->



import random

def define_ideas(words):
    # Для примера, просто вернем слова без изменений
    return words

def group_words(words):
    # Пример группировки слов по темам
    groups = {
        'природа': [],
        'время': [],
        'действие': []
    }
   
    for word in words:
        if word in ['солнце', 'море']:
            groups['природа'].append(word)
        elif word == 'лето':
            groups['время'].append(word)
        elif word == 'отдых':
            groups['действие'].append(word)
   
    return groups

def create_basic_sentences(groups):
    sentences = []
    if groups['природа']:
        sentences.append(f"{random.choice(groups['действие'])} у {random.choice(groups['природа'])}.")
    return sentences

def add_context(sentences, groups):
    if groups['время']:
        context_sentence = f"{random.choice(groups['время'])} я люблю " + ' '.join(sentences)
        return context_sentence
    return sentences[0]

def check_meaning(phrase):
    # В данном случае просто выведем фразу
    print("Полученная фраза:", phrase)

def main():
    words = ["солнце", "море", "лето", "отдых"]
   
    # Шаг 1: Определение основных идей
    ideas = define_ideas(words)
   
    # Шаг 2: Группировка слов
    grouped_words = group_words(ideas)
   
    # Шаг 3: Создание базовых предложений
    basic_sentences = create_basic_sentences(grouped_words)
   
    # Шаг 4: Добавление контекста
    final_phrase = add_context(basic_sentences, grouped_words)
   
    # Шаг 5: Проверка на смысл
    check_meaning(final_phrase)

if __name__ == "__main__":
    main()



Объяснение кода:
Определение идей: В функции define_ideas мы просто возвращаем слова без изменений. В реальном приложении можно было бы использовать более сложные методы для анализа слов.

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

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

Добавление контекста: В функции add_context мы добавляем временной контекст к базовым предложениям.

Проверка на смысл: В функции check_meaning мы просто выводим полученную фразу






import itertools

# Чтение файла
with open('слова.txt', 'r', encoding='utf-8') as file:
    content = file.read()

# Разделение на наборы слов
word_sets = [set.split() for set in content.split('=\n')]

# Генерация всех возможных комбинаций
combinations = list(itertools.product(*word_sets))

# Форматирование и вывод результата
for combo in combinations:
    print(' '.join(combo))




файл данных txt

набор слов 1
=
набор слов 2
=
набор слов 3


Рецензии