
Cуществует база данных, заполненная текстовыми ответами на некие вопросы:
Пример:
один лдин вдвоем втроем один влвоем и т.д
Необходимо каждому уникальному значению поставить в соответствие уникальный код (любое число), причем значения «один» и «лдин» считаются одинаковыми.
в конечном итоге необходимо вывести данную базу с числовыми значениями
Пример:
один 31 вдвоем 41 втроем 59
Пробовал реализовать на python, используя SequenceMatcher
и fuzzy
, но безуспешно.
1 Ответы


-
Первым делом заберите данные из вашей т.н. базы данных, используйте библиотеки для работы с DB (например psycopg2 — для postgresql, csv — если это csv-файл вдруг и т.д.).
-
Примените к полученным данным вашу функции-фильтр, которая будет считать, что «один» это «лдин» и почистит ненужные значения. Например она может выглядеть следующим образом и включать в себя справочник поправок. Вы можете его создать всё в той же базе или конфигурационном файле.
def f_replace(x): my_dict = {"лдин": "один", "тры": "три"} # return [my_dict[a] if a in my_dict else a for a in x] t = [] for m in x: if m in my_dict: t.append(my_dict[m]) else: t.append(m) return t
-
Полученные данные добавьте в set(), тем самым исключив дублирующиеся элементы.
t = ["один", "один", "три", "три"] set(t) set(['один', 'три'])
-
Добавьте числовые идентификаторы:
t2 = {'один', 'три'} t3 = [[x, y] for x, y in zip(t2, range(1, len(t2) + 1))] for i, j in t3: print i, j три 1 один 2
*Используйте utf-8, если русские символы.