[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите сделать выборку
Rmiha
Здравствуйте!

Подскажите пожалуйста, у меня в таблице SQL которая состоит с множества полей есть поле 'text', записей в таблице 120000, так вот некоторые тексты в этом поле 'text' схожи на 60 -70% процентов, вопрос состоит в том как правильно сделать выборку с базы похожих текстов и удалить их.

Например
text №1 - Шкафы-купе, большой выбор систем (зеркало, пескоструй, бамбук, оракал, различные комбинации) готовые изделия, а так же шкафы-купе под заказ. ООО "Твой шкаф"
text №2 - Шкафы-купе Solo system, большой выбор систем (различные комбинации,зеркало, пескоструй, бамбук, оракал, ) готовые изделия, а так же шкафы-купе под заказ. ООО "Твой шкаф"
text №3 - Solo system шкафы-купе, большой выбор систем (зеркало, пескоструй, бамбук, оракал, различные комбинации) готовые изделия, а так же шкафы-купе под заказ. ООО "Твой шкаф"

Из похожих трех текстов оставить 1 остальные нужно удалить, но это пример на 3 текста, а в базе 120000 текстов

Заранее спасибо за помощь
sergeiss
(почесал затылок, крепко задумался)

Я бы так подошел... Описываю алгоритм, который пришел в голову, а не его полную реализацию.

1. Каждый текст разбить на массив слов. Если есть текст в кавычках, то это должна быть неделимая единица, типа одного слова. Можно также в качестве неделимых оставить слова с дефисами.
2. Сравнить массивы "каждый с каждым". При совпадении на некоторый процент считаем, что это одно и то же. Ставим каким-нибудь метки, типа одинаковых айдишников, для "совпавших" текстов. Тут можно учитывать также и количество совпадений одинаковых слов. Например, в одном тексте слово "шкаф" встречается 10 раз, а в другом - 1 раз. Значит, тут не особо хорошее совпадение. А если 10 и 11 раз, то это уже намного лучше.
3. По окончании сравнения можем сказать, какие же тексты совпали, сколько их в каждой группе "клонов".
4. Принимаем решение, что с ними делать smile.gif Вариантов "объединения" тут может быть много, один из которых - просто тупо удалить все тексты из каждой группы, кроме одного. И считаем его наиболее правильным. То ли это будет самый длинный текст, то ли по каким еще критериям... Я не знаю. Сам решай.

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

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
dadli
Rmiha
ну можно било варянт: отсортировать кожди текст по алфабиту, так ми получили похожие тексти (правилнее холивар символов, но контент бил похожи), а потом удалили записеи с помошчю GROUP BY. ( как надо отсортировать текст по алфабиту, решение здес:
http://stackoverflow.com/questions/3427208...3427756#3427756 )

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

_____________


когда чарли чаплин принимал участие в конкурсе: "клон чарли чаплинов", то чарли занимал третю позицию.

Rmiha
Цитата (sergeiss @ 17.10.2012 - 16:25)
(почесал затылок, крепко задумался)

Я бы так подошел... Описываю алгоритм, который пришел в голову, а не его полную реализацию.

1. Каждый текст разбить на массив слов. Если есть текст в кавычках, то это должна быть неделимая единица, типа одного слова. Можно также в качестве неделимых оставить слова с дефисами.
2. Сравнить массивы "каждый с каждым". При совпадении на некоторый процент считаем, что это одно и то же. Ставим каким-нибудь метки, типа одинаковых айдишников, для "совпавших" текстов. Тут можно учитывать также и количество совпадений одинаковых слов. Например, в одном тексте слово "шкаф" встречается 10 раз, а в другом - 1 раз. Значит, тут не особо хорошее совпадение. А если 10 и 11 раз, то это уже намного лучше.
3. По окончании сравнения можем сказать, какие же тексты совпали, сколько их в каждой группе "клонов".
4. Принимаем решение, что с ними делать smile.gif Вариантов "объединения" тут может быть много, один из которых - просто тупо удалить все тексты из каждой группы, кроме одного. И считаем его наиболее правильным. То ли это будет самый длинный текст, то ли по каким еще критериям... Я не знаю. Сам решай.

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

Вы можете реализовать написанное?
sergeiss
Цитата (Rmiha @ 17.10.2012 - 18:20)
Вы можете реализовать написанное?

Это разово надо сделать или так, чтобы систематически запускалась такая проверка?

Можно попробовать, я думаю smile.gif Вроде как не особо и сложно. Задача интересная. И проверь личку, я там дал контакты.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.