Задать вопрос
@motcart

Как разобрать вложенный список с помощью sklearn?

Подскажите как с помощью sklearn обработать такой датасет в виде списка:
tt = {
    'key1': ['value1', 'value2', 'value3'],
    'key2': ['value2', 'value4'],
     ...
}

Список формируется динамически, может быть разное количесвто ключей и значений.

Пользователь вводит строку
data = input()

Из списка надо выбрать ключ подходящий не менее чем на 60% сравнив ввод пользователя и каждый value.
Я смог сделать вывод для списка вида [ключ:значение], но не могу понять как это сделать когда в значении тоже список.
  • Вопрос задан
  • 96 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@motcart Автор вопроса
Сам же и отвечу. Подсказали в тг чате по питону.

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

tt = {
    'key1': ['value1', 'value2', 'value3'],
    'key2': ['value2', 'value4'],
}

def compare_strings(user_input):
    vectorizer = TfidfVectorizer()
    all_values = [item for sublist in tt.values() for item in sublist]
    all_values.append(user_input) # Добавляем входную строку
    vectors = vectorizer.fit_transform(all_values)
    user_vector = vectors[-1] # Вектор входной строки

    results = []
    for key, values in tt.items():
        for value in values:
            value_vector = vectors[all_values.index(value)]
            similarity = cosine_similarity(user_vector, value_vector)[0][0]
            results.append({'key': key, 'value': value, 'similarity': similarity * 100})

    return results

user_input = input("Введите строку: ")
results = compare_strings(user_input)
for result in results:
    print(f"Ключ: {result['key']}, Значение: {result['value']}, Процент совпадения: {result['similarity']:.2f}%")
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Greenway Global Новосибирск
от 150 000 ₽
SpectrumData Екатеринбург
от 200 000 до 300 000 ₽
AST Москва
До 350 000 ₽
20 янв. 2025, в 16:47
700 руб./в час
20 янв. 2025, в 16:04
300000 руб./за проект