2013-08-21 4 views
1

У меня есть база данных с данными в плохом состоянии. Я ищу способ уменьшить набор значений в столбце до минимума, не отбрасывая информацию.Как найти похожие значения в 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 строк.

+0

Знаете ли вы, что алгоритм вы хотите использовать? Вы знаете домен своих данных, мы этого не делаем, поэтому вы знаете, какие изменения могут быть сделаны, не отбрасывая информацию. В общем, такого рода вещи чрезвычайно сложны. Если вы хотите сказать, например, что вы свернете любое значение, которое составляет 2 или меньше одиночных символов, от другого значения, которое происходит чаще, вы можете это сделать. Но тогда вам нужно будет указать порядок, в котором должны выполняться свертывания, если вы хотите получить детерминированный результат. И вам придется решать, каковы будут сводки. –

+0

Существуют алгоритмы машинного обучения, которые позволяют компьютеру попытаться создать разные «ведра» аналогичных значений. Вероятно, они более надежны, чем простой алгоритм, который я обсуждал выше, но, вероятно, также требуют намного больше работы для реализации и понимания того, как правильно установить все параметры. Любой алгоритм, вероятно, потребует некоторого ручного обзора результатов, прежде чем позволить системе автоматически начать комбинирование значений. –

+2

Похоже, вам нужно создать некоторые промежуточные структуры данных, где вы свяжете свои описания с вашими ключами. Как только вы удовлетворитесь, вы можете продолжить и заполнить свою таблицу с уникальными значениями. –

ответ

0

Основная проблема заключается в том, чтобы определить, что такое «похоже». Вам нужно указать DETERMINISTIC способ сказать, похожи ли две строки или нет.

Подумайте о создании функции MyFanceAreSimilarFunction(string1,string2), которую вы должны заполнить. Если вы знаете, как проверить, похожи ли они, вы сможете его кодировать :). Впоследствии просто добавить его в предложение where.

Кроме того, посмотрите на SOUNDEX

Смежные вопросы