соединяем пары слов из списка методом их пересечен
находим пересечения слов в этих парах
и затем делаем из них группы по 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}' отсутствует в модели.")
Свидетельство о публикации №125060406013