соединяем пары слов из списка методом их пересечен

 Имеем список групп пар слов
 находим пересечения слов  в этих парах
 и затем делаем из них группы по 4 слова

 список групп слов:

я могу
могу это
это понять
это было
было не так
не так сложно


найдены пересечения пар:

я могу это понять
это было не так сложно

список групп слов находится в файле слова.txt



   **


def load_phrases(filename):
    with open(filename, encoding='utf-8') as f:
        phrases = [line.strip().split() for line in f if line.strip()]
    return phrases

def find_overlaps(phrases):
    # Создадим словарь: ключ - первые N-1 слов фразы, значение - сама фраза
    prefix_map = {}
    for phrase in phrases:
        prefix = tuple(phrase[:-1])
        prefix_map.setdefault(prefix, []).append(phrase)
    return prefix_map

def merge_phrases(phrases):
    prefix_map = find_overlaps(phrases)
    merged = []

    for phrase in phrases:
        current = phrase[:]
        while True:
            suffix = tuple(current[1:])
            if suffix in prefix_map:
                # Берём первую подходящую фразу для слияния
                next_phrase = prefix_map[suffix][0]
                # Добавляем последнее слово следующей фразы к текущей
                current = current + next_phrase[-1:]
            else:
                break
       
        # Добавляем только если длина фразы 4 или более
        if len(current) >= 4:
            merged.append(current)

    # Убираем дубли
    merged_unique = []
    seen = set()
    for m in merged:
        t = tuple(m)
        if t not in seen:
            seen.add(t)
            merged_unique.append(m)
   
    return merged_unique

if __name__ == "__main__":
    phrases = load_phrases("слова.txt")
    merged_phrases = merge_phrases(phrases)
    for phrase in merged_phrases:
        print(" ".join(phrase))






ищем в базе списка групп слов похожие по смыслу слова


# Установка зависимостей
import nltk
from gensim.models import Word2Vec

# Скачаем необходимые инструменты NLTK
nltk.download('punkt')

# Функция предварительной обработки текста
def preprocess(text):
    # Приводим весь текст к нижнему регистру
    text = text.lower()
   
    # Разбиваем текст на токены (слова)
    tokens = nltk.word_tokenize(text)
   
    return tokens

# Читаем данные из файла
file_path = "слова.txt"
with open(file_path, 'r', encoding='utf-8') as file:
    data = file.readlines()

# Обрабатываем каждую строку, превращая её в последовательность токенов
processed_data = []
for line in data:
    processed_data.append(preprocess(line.strip()))

# Создаем модель Word2Vec
model = Word2Vec(
    sentences=processed_data,
    vector_size=100,     # Размерность вектора для каждого слова
    window=5,             # Окно анализа контекста вокруг слова
    min_count=1,          # Минимальное количество появления слова в тексте
    workers=4             # Количество потоков для параллельной обработки
)

# Тестирование модели
while True:
    word = input("\nВведите слово для поиска слов: ").strip().lower()
    try:
        similar_words = model.wv.most_similar(word)
        print(f"\nПохожие слова для '{word}':")
        for w, score in similar_words:
            print(f"{w}: {score:.4f}")
    except KeyError:
        print(f"Слово '{word}' отсутствует в модели.")


Рецензии