Предисловие
Мое решение было проверено на правильность.Мне нужно иметь возможность поиска по списку объектов, и это решение, которое сработало для меня.Однако мое решение не было проверено на производительность, и меня это не волнует, поскольку мои наборы данных довольно малы.Для больших наборов данных я настоятельно рекомендую использовать сторонний инструмент, вероятно, какой-то облачный инструмент поиска будет масштабируемым и с приемлемой производительностью.
Решение
нечеткий процесс.может обрабатывать словарь, в котором ищутся только значения, а результатом является список кортежей со следующей структурой
(query, score, key)
Где query
и score
такие же, как при использовании экстракта со списками и key
- это ключ, который соответствует строковому значению (значения должны быть только строками).Итак, вам нужно будет создать обработанный словарь имен эмитентов с ключами в качестве индексов, например
issuer_names_dict = dict(enumerate([issuer.name for issuer in issuers]))
Затем вы можете передать этот словарь в process.extract
(я думаю, что вы должны использовать extractBests, так как вы используете обрезкупорог)
best_issuers = process.extractBests(word, issuer_names_dict, score_cutoff=threshold, limit=5)
Наконец вам нужно собрать список результатов
res = [issuers[z] for (x,y,z) in best_issuers]