среда, 28 января 2009 г.

Связывание информации из разных сайтов

Как сделать так, чтобы мой сайт стал лучше, чем тот, с которого я забирал первоначальную информацию? Скачивать информацию еще с одного сайта. Тогда у меня будет информации больше, глядишь, и пользователям будет интереснее у меня, т. к. теперь не надо посещать 2 сайта, а все есть на одном.
Я даже не предполагал, насколько много в интернете ресурсов с отзывами. Причем большинство из них на низах рейтинга. Выбрав новую «жертву», я довольно быстро подготовил скрипты для «выкачивания» информации из нее (всего несколько часов, по сравнению с днями, потраченными на первый источник, правда и опыт у меня уже был), запустил, выкачал. И началось самое геморройное... Надо как-то связать классификаторы статей из первого источника с классификаторами статей из второго источника, чтобы на моем сайте статьи про одинаковые места отдыха, полученные из разных источников, «лежали» в одном разделе. Т. е. курорт Варадеро на острове Куба с первого сайта, это тот же курорт Варадеро с острова Куба со второго сайта. А что делать, если на одном сайте Куба пишется «Куба», а на втором — «Cuba»? И какая Куба правильнее? В общем, надо создавать свой справочник курортов, содержащий как можно больше информации по странам, курортам, отелям, и привязывать к нему все ссылки на эти страны-курорты-отели. Опять же, откуда взять все это, чтобы информации было много, и чтобы она более менее была нормально упорядочена. Потому что меня не устраивает ссылка на Вьетнам — Вся страна — Отель супер-пупер, а надо Вьетнамкурорт — отель.
Побродив по интернету, нашел 3-й сайт, на котором больше есть информация о 35 тысячах отелей, причем отели упорядочены именно по странам и городам. Закачал. К сожалению, в этих 35 тысячах не обошлось без задвоений как городов, так и отелей. Но сильно на эту тему я заморачиваться не стал. Будут статьи, ссылающиеся на эти города-отели — вычищу.
Из информации, полученной с 3-го сайта, сделал «идеальный» справочник. К которому попробовал привязать классификаторы из первых двух сайтов. Примерно 70% информации удалось связать запросами к базе данных, для оставшихся 30% сделал форму и вручную прокрыжил. Долго, конечно, но что делать. Не хочется, чтобы у меня был мусор.
Заодно обратил внимание, что для многих статей есть ссылка только на страну, без привязки к городам и отелям. Непорядок. Несложным INSERT'ом попробовал исправить эту несправедливость, т. е. если статья ссылается только на страну Великобритания, а в тексте встречается слово Лондон, то надо добавить еще и ссылку на Лондон, чтобы пользователь не просматривал все статьи о Великобритании, когда ему интересны впечатления только о Лондона. И натолкнулся на особенность MySQL, в Oracle такого рода ошибки не было. Оказывается, если в MySQL запрос
SELECT instr('Москва — столица нашей Родины', 'МОСКВА')
выдает 1, а в Oracle — 0. Но «МОСКВА» и «Москва» — это ведь 2 разных слова, по крайней мере по написанию, а MySQL оптимизирован для поиска без учета case sensitive. Но проблема, как оказалось, решается просто. Если в запросе
SELECT 1
FROM articles a, cities c
WHERE a.text LIKE CONCAT('%', c.name, '%')
после LIKE поставить BINARY, то все ищется отлично. Таким образом, мне удалось не наделать лишних ссылок из статей на города, которые в этих статьях не упоминаются.

1 комментарий:

  1. Хм, про особенности работы instr в MySQL не знал. В любом случае, спасибо за статью.

    ОтветитьУдалить