У меня есть база данных с данными в плохом состоянии. Я ищу способ уменьшить набор значений в столбце до минимума, не отбрасывая информацию.Как найти похожие значения в Oracle?
Пример:
SELECT VALUE, COUNT(*) FROM TABLE GROUP BY VALUE;
VALUE |COUNT(*)
FOO FOO |50000
FOO.FOO |40000
FOO DOO |40
BAR BAR |60000
BAR.BAR |45000
BAR BAZ |30
...
Я хотел бы найти запрос, который может показать мне группы, к которым данные сходящимся (и помочь мне сделать осознанный выбор FOO FOO
< ->FOO.FOO
и автоматизировать FOO DOO
- >FOO FOO
или FOO.FOO
)
База данных Oracle 10g. Мне известны функции UTL_MATCH.EDIT_DISTANCE
и UTL_MATCH.JARO_WINKLER
, но в этом случае я не могу обернуть вокруг себя. Предыдущий GROUP BY
запрос должен содержать менее 10000 строк.
Знаете ли вы, что алгоритм вы хотите использовать? Вы знаете домен своих данных, мы этого не делаем, поэтому вы знаете, какие изменения могут быть сделаны, не отбрасывая информацию. В общем, такого рода вещи чрезвычайно сложны. Если вы хотите сказать, например, что вы свернете любое значение, которое составляет 2 или меньше одиночных символов, от другого значения, которое происходит чаще, вы можете это сделать. Но тогда вам нужно будет указать порядок, в котором должны выполняться свертывания, если вы хотите получить детерминированный результат. И вам придется решать, каковы будут сводки. –
Существуют алгоритмы машинного обучения, которые позволяют компьютеру попытаться создать разные «ведра» аналогичных значений. Вероятно, они более надежны, чем простой алгоритм, который я обсуждал выше, но, вероятно, также требуют намного больше работы для реализации и понимания того, как правильно установить все параметры. Любой алгоритм, вероятно, потребует некоторого ручного обзора результатов, прежде чем позволить системе автоматически начать комбинирование значений. –
Похоже, вам нужно создать некоторые промежуточные структуры данных, где вы свяжете свои описания с вашими ключами. Как только вы удовлетворитесь, вы можете продолжить и заполнить свою таблицу с уникальными значениями. –