Поиск делаем своими руками

Самоделки своими руками в домашних условиях из дерева, железа и пластика

На этом сайте мы собрали для вас оригинальные идеи, как своими руками изготовить различные самоделки для дома, квартиры, гаража или домашней мастерской из доступных (и зачастую — ненужных!) материалов. Причем не что-нибудь, лишь бы было, а действительно полезные и нужные вещи, которые вам пригодятся.

Все идеи, которые мы предлагаем, направлены, в первую очередь, на то, чтобы сделать ваш повседневный быт практичным и удобным, а рабочее место — максимально функциональным.

На сайте вы найдете интересные решения по оформлению интерьера, советы по ремонту, различные автомобильные хитрости, а также идеи самоделок для гаража и мастерской, и даже эксклюзивные DIY поделки.

Чтобы сделать что-то полезное, вовсе не обязательно иметь под рукой огромный арсенал инструментов. Многие самоделки вы можете изготовить, используя минимальный набор инструментов. Но есть, конечно, и более сложные в реализации проекты — для воплощения таких идей в жизнь потребуется определенный опыт.

Обратите внимание, что мы предлагаем только идеи, так сказать, «черновые наброски и зарисовки», и не даем каких-либо четких рекомендаций и советов, поскольку у каждого человека разные возможности для реализации той или иной задумки. Представленные на сайте идеи всегда можно подстроить под себя, додумать, доработать.

Домашние поделки

Чтобы сделать что-то интересное и полезное своими руками, совсем не обязательно тратить на это много сил и времени. Главное в этом деле — желание. Даже если вы чего-то не умеете делать, этому всегда можно научиться!

Собственноручно изготовленные «мелочи» и полезные идеи помогают обустроить окружающее пространство в доме конкретно под ваш вкус: комнату, гостиную, коридор, кухню, санузел и даже балкон — все это можно сделать особенным и индивидуальным.

Детали интерьера и мебель

На нашем сайте вы найдете идеи и советы мастеров, как сделать оригинальными любой дом или квартиру. Причем в большинстве случаев для этого не требуется обладать опытом в строительстве и ремонте.

Например, мы рекомендуем обратить внимание на классные идеи и решения по декорированию поверхности стен. Делая такой декор, вы сможете добиться потрясающего результата. Но тут нужно экспериментировать.

Если же вы хотите попробовать свои силы в самостоятельном изготовлении мебели для дома, то на нашем сайте вы найдете для себя много интересного: начиная от того, как склеивать столешницы и собирать полки или шкафы, и заканчивая более «деликатными» работами — например, как своими руками наклеить пластиковую кромку на мебель, или сделать мусорное ведро из баллона.

И это лишь малая часть того, что мы можем вам предложить! Для тех, кто постоянно теряет ключи в доме, мы можем предложить сделать органайзер с магнитным держателем для ключей. А если хотите сделать приятный сюрприз жене, то, наверняка, вас заинтересует туалетный столик с подсветкой и зеркалом.

Разные полезности для кухни

Самоделки для кухни призваны не только помогать в процессе приготовления пищи, но также способны украсить интерьер помещения! Мы предлагаем только самые смелые решения и идеи, которые вас обязательно заинтересуют.

Все приспособления и аксессуары отличаются между собой по уровню сложности. Если топорик для рубки костей из старой дисковой пилы сможет сделать далеко не каждый (тут нужен и опыт, и оборудование соответствующее), то, чтобы сделать, к примеру, разделочный столик с металлическим подносом, тут много опыта не потребуется.

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

Возможности гаража или маленькой мастерской

В обычном гараже чаще всего нет возможности развернуться и организовать полноценное производство каких-либо изделий или самоделок.

Ведь, чтобы сделать действительно классную вещь, может потребоваться специальное оборудование: например, токарный станок, сверлильный станок и, возможно, даже фрезерный станок с ЧПУ.

Однако даже в условиях маленькой домашней мастерской или гаража можно создавать различные полезные самоделки. Это могут быть как приспособления для облегчения работы (стойки для УШМ, токарные мини станки из электродрели, компактные универсальные рабочие столы и т.д.), так и какие-то детали и механизмы.

Например, на сайте вы можете найти подробный наглядный процесс изготовления разных тележек для транспортировки, а также электроталей, лебедок и прочих подъемных устройств, которые способны облегчить работу с тяжелыми и габаритными деталями (механизмами) или стройматериалами.

Читайте также:  Кожаные вазы своими руками

Изготовив все необходимые для работы приспособления (это отрезные станки, шлифовальные станки и т.д.), можно уже и заняться изготовлением конкретных самоделок: ножей или кованых элементов. В общем, даже в гараже есть возможность что-то делать полезное для себя.

Многообразие и доступность материалов

Старые и б/у вещи не обязательно выбрасывать на свалку — из них получатся отличные самоделки, которые непременно пригодятся в быту или на даче. Таким образом, вы не только дадите вторую жизнь старым вещам, но и сэкономите на покупке материалов. Например, из обрезков доски вы можете сделать столярную киянку, а из старого баллона — очаг для казана.

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

На нашем сайте собраны оригинальные идеи на любой вкус: и для тех, кто хочет сэкономить, и поэтому использует то, что имеется под рукой, и для тех, кто предпочитает делать что-либо только из новых (покупных) материалов.

Например, чтобы сделать раздвижную межкомнатную дверь в частном доме, можно использовать как старые, так и новые материалы.

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

Из остатков пластиковых или полипропиленовых труб можно также сделать много чего интересного — например, удобный переносной органайзер для хранения саморезов и болтиков с гайками.

Также из ПП и ПВХ труб можно изготовить приспособление для нарезки листовой фольги или сделать подставку для хранения напильников.

Заходите на наш сайт и приглашайте друзей — идей хватит на всех. Обратите внимание, что самоделки распределены по разным разделам и категориям, но мы советуем просматривать записи в общей ленте, так вы сможете найти больше интересного для себя.

Советуем поделки

© 2016-2021 Сделай своими руками — Сделай сам. Копирование материалов запрещено. Материал на сайте представлен исключительно в ознакомительных целях. Администрация сайта не несет ответственности за возможные последствия, после прочтения материала.

Источник

Поиск на сайте своими руками

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

У читателя может возникнуть вопрос: зачем писать все с нуля, если все уже давно написано? Да, у крупных поисковиков есть API, есть такие клевые проекты, как Sphinx и Apache Solr. Но у каждого из этих решений есть свои преимущества и недостатки. Пользуясь услугами поисковиков, типа Google и Яндекс, Вы получите множество плюшек, таких как мощный морфологический анализ, исправление опечаток и ошибок в запросе, распознавание неверной раскладки клавиатуры, однако без ложки дегтя тут не обойдется. Во первых, такой поиск не интегрируется в структуру сайта — он внешний, и Вы не сможете указать ему, какие данные наиболее важны, а какие не очень. Во вторых, содержимое сайта индексируется только с определенным интервалом, который зависит от выбранного поисковика, так что если на сайте что-нибудь обновится, придется дожидаться момента, когда эти изменения попадут в индекс и станут доступными в поиске. У Sphinx и Apache Solr дела с интеграцией и индексированием гораздо лучше, но не каждый хостинг позволит из запустить.

Ничто не мешает написать поисковый механизм самостоятельно. Предполагается, что сайт работает на PHP в связке с каким-нибудь сервером баз данных, например MySQL. Давайте сначала определимся, что требуется от поиска на сайте?

  • Поиск с учетом языковой морфологии. Не зависимо от падежа, окончания и
    других прелестей великого и могучего языка поиск должен находить то, что нужно
    пользователю. Другими словами, «яблок», «яблока», «яблоки» — это формы одного и того
    же слова «яблоко», что нужно учитывать в поисковом алгоритме. Одним из способов
    достижения данной цели является приведение каждого слова поискового запроса и слов
    содержимого сайта к базовой форме.
  • Возможность указать контекст поиска. То есть, возможность самостоятельно выбрать
    контент сайта, в пределах которого будет работать поисковый алгоритм, а также определить
    значимость для каждого из пределов. Например, рассмотрим интернет-магазин. Предполагается,
    что поисковый запрос чаще всего будет содержать название искомой продукции, поэтому поиск по
    названиям товара будет иметь наивысший приоритет. В качестве следующего приоритета можно
    выбрать поиск по свойствам товаров, затем поиск по описанию.
  • Индексирование содержимого сайта. Представьте ситуацию: одновременно около 30 человек
    выполняют поисковые запросы. Сервер принимает каждое соединение, управление потоком
    передается интерпретатору PHP. При каждом запросе заново инициализируется поисковый
    движок, заново перерывается содержимое сайта… Сложно сказать, сколько времени и
    ресурсов потребуется, чтобы обработать все эти запросы. Именно для того, чтобы не
    делать одну и ту же работу по сто раз, была придумана технология индексирования.
    Индексирование выполняется только при изменении или добавлении содержимого сайта,
    а поиск выполняется уже по индексу, а не по содержимому.
  • Механизм ранжирования. Ранжирование результатов поиска — это сортировка результатов поиска, выполняемая на основе оценки значимости найденных данных. Например, в каком-нибудь блоге выполняется поисковый запрос «космос». Данное слово содержится в двух статьях: в первой 16 раз, во второй — 5 раз. Вероятнее всего, первая статья будет иметь большее значение для инициатора поиска. Также каждой разновидности содержимого сайта при индексировании задается определенный коэффициент, который будет влиять на его позиции в поисковой выдаче.
Читайте также:  Переделать бензиновый генератор своими руками

Теперь пару слов о том, что нам предстоит реализовать:

  • морфологический анализатор,
  • алгоритм ранжирования,
  • алгоритм индексирования,
  • алгоритм поиска.

В конце статьи будет показан пример реализации поиска на примере простого интернет-магазина. Тем, кому лень все это изучать и просто нужен готовый поисковик, можно смело забирать движок из репозитория GitHub FireWind.

Принцип работы

Со стороны бэкенда поиск работает так:

  • содержимое сайта индексируется,
  • пользователь присылает запрос,
  • из запроса исключаются служебные части речи,
  • получившаяся строка разбивается на массив слов, переведенных в базовую форму,
  • поиск каждого слова полученного массива осуществляется в индексе,
  • результаты поиска ранжируются, сортируются и отдаются пользователю.

Подготовка

Задача поставлена, теперь можно перейти к делу. Я использую Linux в качестве рабочей ОС, однако постараюсь не использовать ее экзотических возможностей, чтобы любители Windows смогли «собрать» поисковый движок по аналогии. Все, что Вам нужно — это знание основ PHP и умение обращаться с MySQL. Поехали!

Наш проект будет состоять из ядра, где будут собраны все жизненно необходимые функции, а также модуля морфологического анализа и обработки текста. Для начала создадим корневую папку проекта firewind, а в ней создадим файл core.php — он и будет ядром.

Теперь вооружаемся своим любимым текстовым редактором и подготавливаем каркас:

Тут мы создали основной класс, который можно будет использовать на Ваших сайтах. На этом подготовительная часть заканчивается, пора двигаться дальше.

Морфологический анализатор

Русский язык — довольно сложная штука, которая радует своим разнообразием и шокирует иностранцев конструкциями, типа «да нет, наверное». Научить машину понимать его, да и любой другой язык, — довольно непростая задача. Наиболее успешны в этом плане поисковые компании, типа Google и Яндекс, которые постоянно улучшают свои алгоритмы и держат их в секрете. Придется нам сделать что-то свое, попроще. К счастью, колесо изобретать не придется — все уже сделано за нас. Встречайте, phpMorphy — морфологический анализатор, поддерживающий русский, английский и немецкий языки. Более подробную информацию можно получить тут, однако нас интересуют только две его возможности: лемматизация, то есть получение базовой формы слова, и получение грамматической информации о слове (род, число, падеж, часть речи и т.д.).

Нужна библиотека и словарь для нее. Все это добро можно найти тут. Библиотека находится в одноименной папке «phpmorphy», словари расположены в «phpmorphy-dictionaries». Скачиваем последние версии в корневую папку проекта и распаковываем:

Отлично! Библиотека готова к использованию. Пришло время написать «оболочку», которая абстрагирует работу с phpMorphy. Для этого создадим еще один файл morphyus.php в корневой директории:

Пока реализовано только два метода. get_words разбивает текст на массив слов, фильтруя при этом HTML-теги и сущности типа » «. Метод lemmatize возвращает массив лемм слова, либо false, если таковых не нашлось.

Механизм ранжирования на уровне морфологии

Давайте остановимся на такой единице языка, как предложение. Наиболее важной частью предложения является основа в виде подлежащего и/или сказуемого. Чаще всего подлежащее выражается существительным, а сказуемое глаголом. Второстепенные члены в основном употребляются для уточнения смысла основы. В разных предложениях одни и те же части речи порой имеют совершенно разное значение, и наиболее точно оценить это значение в контексте текста сегодня может только человек. Однако программно оценить значение какого-либо слова все-таки можно, хоть и не так точно. При этом алгоритм ранжирования должен опираться на так называемый профиль текста, который определяется его автором. Профиль представляет из себя ассоциативный массив, ключами которого являются части речи, а значениями соответственно ранг (или вес) каждой из них. Пример профиля я покажу в заключении, а пока попробуем перевести эти размышления на язык PHP, добавив еще один метод к классу morphyus:

Читайте также:  Конструкция акустических колонок своими руками

Индексирование содержимого сайта

Как уже говорилось выше, индексирование заметно ускоряет выполнение поискового запроса, так как поисковому движку не нужно обрабатывать контент каждый раз заново — поиск выполняется по индексу. Но что же все-таки происходит при индексировании? Если по порядку, то:

  • Сначала из текста формируется массив слов, и делается это с помощью метода get_words.
  • Согласно профилю, из текста отбрасываются незначимые части речи.
  • Значимые оцениваются по пятибальной шкале, с помощью метода weigh.
  • Для каждого сова выполняется поиск лемм, иначе говоря базовых форм.
  • Рассчитывается количество повторений каждого слова и суммарный ранг.
  • Все данные записываются в объект и в виде JSON записываются в базу данных.

В результате получается объект следующего формата:

Пишем инициализатор и первый метод ядра поискового движка:

Теперь при добавлении или изменении данных в таблицах достаточно просто вызвать данную функцию, чтобы проиндексировать их, но это не обязательно: индексирование может быть и отложенным. Первым аргументом метода make_index является исходный текст, вторым — коэффициент значимости индексируемых данных. Ранг каждого слова, кстати, расчитывается по формуле:

Хранение индексированных данных

Очевидно, что индекс нужно где-нибудь хранить, да еще и привязать к исходным данным. Наиболее подходящим местом для них будет база данных. Если индексируется содержимое файлов, то можно создать отдельную таблицу в базе данных, которая будет содержать индекс название каждого файла, а для содержимого, которое уже хранится в базе, можно добавить еще одно поле типа в структуру таблиц. Такой подход позволит разделять типы содержимого при поиске, например, названия и описание статей в случае блога.

Нерешенным остался лишь вопрос формата индексированного содержимого, ведь make_index возвращает объект, и так просто в базу данных или файл его не запишешь. Можно использовать JSON и хранить его в полях типа LONGTEXT, можно BSON или CBOR, используя тип данных LONGBLOB. Два последних формата позволяют представлять данные в более компактном виде, чем первый.

Как говорится, «хозяин — барин», так-что решать, где и как все будет храниться, Вам.

Benchmark

Давайте проверим, что у нас получилось. Я взял текст своей любимой статьи «Темная материя интернета», а именно содержимое узла #content html_format и сохранил его в отдельный файл.

На моей машине с конфигурацией:
CPU: Intel Core i7-4510U @ 2.00GHz, 4M Cache
RAM: 2×4096 Mb
OS: Ubuntu 14.04.1 LTS, x64
PHP: 5.5.9-1ubuntu4.5

Индексирование заняло около секунды:

Думаю, вполне неплохой результат.

Реализация поиска

Остался последний и самый главный метод, метод поиска. В качестве первого аргумента метод принимает индекс поискового запроса, в качестве второго — индекс содержимого, в котором выполняется поиск. В результате выполнения возвращается суммарный ранг, рассчитанный на основе ранга найденных слов, либо 0, если ничего не нашлось. Это позволит сортировать поисковую выдачу.

Все! Поисковый движок готов к использованию. Но есть одно но… На самом деле это не джин-волшебник, и просто закинув его на свой сайт Вы не получите ничего. Его нужно интегрировать, причем этот процесс во многом зависит от архитектуры Вашего сайта. Рассмотрим этот процесс на примере небольшого интернет магазина.

Реализация поиска на примере интернет-магазина

Допустим, информация о продаваемой продукции хранится в таблице production:

А описание в таблице description:

Поле production.keywords будет содержать индекс ключевых слов продукта, description.index будет содержать индексированное описание. И все это будут храниться в формате JSON.

Вот пример функции добавления нового продукта:

Здесь поисковый механизм был интегрирован в функцию добавления нового продукта магазина. А теперь обработчик поисковых запросов:

Данный сценарий принимает поисковый запрос в виде GET-параметра query и выполняет поиск. В результате выводятся найденные продукты магазина.

Заключение

В статье был описан один из вариантов реализации поиска для сайта. Это самая первая его версия, поэтому буду только рад узнать Ваши замечания, мнения и пожелания. Присоединяйтесь к моему проекту на Github: https://github.com/axilirator/firewind. В планах добавить туда еще кучу всяких возможностей, вроде кэширования поисковых запросов, подсказок при вводе поискового запроса и алгоритма побуквенного сравнения, который поможет бороться с опечатками.

Всем спасибо за внимание, ну и с днем информационной безопасности!

Источник

Оцените статью
Своими руками