Сегодня я напишу статью, о том как сделать простую версию так называемого «живого поиска». Для тех кто не в курсе, живой поиск — это когда при вводе искомого текста, появляется подсказка, с возможными вариантами. Примером тому служит Яндекс и Google.
По сути «живой поиск» это обычный AJAX скрипт, который обращается к базе данных, производит в ней поиск, и возвращает ответ скрипту. Для работы поиска я буду использовать Jquery.
Итак, создадим простую форму поиска:
Простой живой поиск .search_area < width: 350px; margin: 0px; position: relative; >#search_box < width:200px; padding:2px; margin:1px; border:1px solid #000; >#search_advice_wrapper < display:none; width: 350px; background-color: rgb(80, 80, 114); color: rgb(255, 227, 189); -moz-opacity: 0.95; opacity: 0.95; -ms-filter:»progid:DXImageTransform.Microsoft.Alpha»(Opacity=95); filter: progid:DXImageTransform.Microsoft.Alpha(opacity=95); filter:alpha(opacity=95); z-index:999; position: absolute; top: 24px; left: 0px; >#search_advice_wrapper .advice_variant < cursor: pointer; padding: 5px; text-align: left; >#search_advice_wrapper .advice_variant:hover < color:#FEFFBD; background-color:#818187; >#search_advice_wrapper .active Обратите внимание на autocomplete=»off» у input’а, это для того чтобы отключить подсказки браузера, которые он показывает при повторном наборе текста в форме.
Теперь займемся созданием javascript скрипта.
Поиск заданного текста в PDF с помощью python
var suggest_count = 0; var input_initial_value = »; var suggest_selected = 0; $(window).load(function()< // читаем ввод с клавиатуры $(«#search_box»).keyup(function(I)< // определяем какие действия нужно делать при нажатии на клавиатуру switch(I.keyCode) < // игнорируем нажатия на эти клавишы case 13: // enter case 27: // escape case 38: // стрелка вверх case 40: // стрелка вниз break; default: // производим поиск только при вводе более 2х символов if($(this).val().length>2)< input_initial_value = $(this).val(); // производим AJAX запрос к /ajax/ajax.php, передаем ему GET query, в который мы помещаем наш запрос $.get(«/ajax/ajax.php», < «query»:$(this).val() >,function(data) < //php скрипт возвращает нам строку, ее надо распарсить в массив. // возвращаемые данные: [‘test’,’test 1′,’test 2′,’test 3′] var list = eval(«(«+data+»)»); suggest_count = list.length; if(suggest_count >0) < // перед показом слоя подсказки, его обнуляем $(«#search_advice_wrapper»).html(«»).show(); for(var i in list)< if(list[i] != »)< // добавляем слою позиции $(‘#search_advice_wrapper’).append(‘break; > >); //считываем нажатие клавишь, уже после вывода подсказки $(«#search_box»).keydown(function(I) < switch(I.keyCode) < // по нажатию клавишь прячем подсказку case 13: // enter case 27: // escape $(‘#search_advice_wrapper’).hide(); return false; break; // делаем переход по подсказке стрелочками клавиатуры case 38: // стрелка вверх case 40: // стрелка вниз I.preventDefault(); if(suggest_count)< //делаем выделение пунктов в слое, переход по стрелочкам key_activate( I.keyCode-39 ); >break; > >); // делаем обработку клика по подсказке $(‘.advice_variant’).live(‘click’,function()< // ставим текст в input поиска $(‘#search_box’).val($(this).text()); // прячем слой подсказки $(‘#search_advice_wrapper’).fadeOut(350).html(»); >); // если кликаем в любом месте сайта, нужно спрятать подсказку $(‘html’).click(function()< $(‘#search_advice_wrapper’).hide(); >); // если кликаем на поле input и есть пункты подсказки, то показываем скрытый слой $(‘#search_box’).click(function(event)< //alert(suggest_count); if(suggest_count) $(‘#search_advice_wrapper’).show(); event.stopPropagation(); >); >); function key_activate(n)< $(‘#search_advice_wrapper div’).eq(suggest_selected-1).removeClass(‘active’); if(n == 1 suggest_selected < suggest_count)< suggest_selected++; >else if(n == -1 suggest_selected > 0) < suggest_selected—; >if( suggest_selected > 0) < $(‘#search_advice_wrapper div’).eq(suggest_selected-1).addClass(‘active’); $(«#search_box»).val( $(‘#search_advice_wrapper div’).eq(suggest_selected-1).text() ); >else < $(«#search_box»).val( input_initial_value ); >>
Я постарался описать этот скрипт по максимуму в комментариях. По сути скрипт делется на несколько частей:
Поиск текста в файлах Windows 11, 10 Поиск в Ворде, архивах
- Считываем ввод с клавиатуры, получаем данные из базы данных и выводим их
- Делаем скрытие слоя с подсказками, при нажатии на Escape и Enter
- Делаем переход по слою с подсказками, через нажатие стрелок клавиатуры ( вверх и вниз)
- Скрытие слоя с подсказками при клике на поле сайта и открытие его при клике на input
- При клике на подсказку мы вписываем слово в input поиска и прячем форму подсказки.
А теперь давайте посмотрим содержимое файла /ajax/ajax.php, к которому мы подключаемся за теми самыми подсказками.
if(!empty($_GET[‘query’]))< $query = (string)$_GET[‘query’]; $array = array(); $request = $db->query(«SELECT `description`, `name` FROM `prefix_name` WHERE `description` LIKE ‘%». $db->real_escape_string($query) . «%’ OR `name` LIKE ‘%». $db->real_escape_string($query) . «%’ LIMIT 0, 10»); while($data =$db->fetch_assoc($request)) < $array[] = $data[‘name’]; >echo «[‘».implode(«‘,'», $array).»‘]»; > exit();
Источник: www.jelu.ru
Как создать программу для поиска текста
Все, что необходимо начинающему и опытному программисту
Практический пример. Поиск текста в файлах, заданных маской.
Данная программа производит поиск указанного текста в файлах, соответствующих введенной маске. Маска задается в формате MSDOS: * — любой символ в любом количестве, ? — один любой символ. Для поиска файлов и текста в них используются регулярные выражения (которые должны были вам встречаться в предыдущих курсах).
Домашнее задание
- Создать программу, которая ищет в указанном каталоге файлы, удовлетворяющие заданной маске, и дата последней модификации которых находится в указанном диапазоне. Поиск производится как в указанном каталоге, так и в его подкаталогах. Результаты поиска сбрасываются в файл отчета.
- Создать программу для поиска указанного текста в файлах, удовлетворяющих заданной маске, и замене этого тектса на другой указанный текст. Поиск производится как в указанном каталоге, так и в его подкаталогах.
- Создать программу для поиска по всему диску файлов и каталогов, удовлетворяющих заданной маске. Необходимо вывести найденную информацию на экран в компактном виде (с нумерацией объектов) и запросить у пользователя о дальнейших действиях. Варианты действий: удалить все найденное, удалить указанный файл (каталог), удалить диапазон файлов (каталогов).
Источник: www.programmer-lib.ru
Обработка естественного языка: интеллектуальный поиск по тексту с использованием Spacy и Python
Поиск по тексту — одно из ключевых направлений приложений машинного обучения в области естественного языка.
Но что, если нам нужно искать несколько ключевых слов в большом документе (более 100 страниц). Кроме того, что, если бы у нас был контекстный поиск (поиск по ключевым словам со схожим значением) в нашем документе! — Обычное решение ‘CTRL + F’ либо заняло бы много времени, чтобы выполнить эту задачу ( или в случае контекстного поиска он не сможет найти какой-либо значимый текст).
Эта статья поможет читателям понять, как мы можем использовать машинное обучение для решения этой проблемы с помощью Spacy (мощная библиотека НЛП с открытым исходным кодом) и Python.
Предварительная обработка данных
Первым шагом при создании любого решения на основе машинного обучения является предварительная обработка данных. В нашем случае мы будем предварительно обрабатывать PDF-документ с помощью пакета PyPDF2 на Python, а затем конвертировать весь текст в объект документа Spacy. Для читателей, которые не работали над Spacy — это расширенная библиотека с открытым исходным кодом на Python, используемая для различных задач НЛП. Для пользователей, которые хотят узнать больше о Spacy, перейдите по этой ссылке, чтобы прочитать документацию и узнать больше о Spacy — https://spacy.io/
Сначала мы загрузим документ PDF, очистим текст и затем преобразуем его в объект документа Spacy. Для выполнения этой задачи можно использовать следующий код:
Сначала нам нужно будет загрузить модель Spacy «en_core_web_lg», которая представляет собой предварительно обученную модель английского языка, доступную в Spacy. Spacy также обеспечивает поддержку нескольких языков (больше можно найти в ссылке на документацию). Кроме того, в Spacy есть несколько вариантов моделей (маленькие, средние и большие), и в нашем случае мы будем работать с большой моделью, так как мы должны работать с векторами слов, которые поддерживаются только с большим вариантом модели.
Параметр «setCustomBoundaries ()» используется как метод сегментации предложений клиентов, а не вариант по умолчанию. Тот же метод может быть изменен в зависимости от документа, с которым мы имеем дело.
Когда у нас будет готов объект документа Spacy, мы можем перейти к следующей части обработки входного запроса (ключевых слов), который нам нужно найти в документе.
Обработка запроса — поиск похожих ключевых слов
Прежде чем перейти к кодированию, давайте рассмотрим более широкий подход, которому мы следуем, чтобы получить более точные результаты поиска по искомому документу.
Вплоть до этапа предварительной обработки данных мы уже преобразовали текст нашего PDF-документа в объект документа Spacy. Теперь нам также нужно преобразовать наши ключевые слова в объект документа Spacy, преобразовать их в эквивалентную векторную форму ((300,) измерение), а затем найти похожие ключевые слова, используя косинусное сходство. В конце у нас будет исчерпывающий список похожих ключевых слов вместе с исходными ключевыми словами, по которым мы теперь можем выполнять поиск по нашему документу для получения точных результатов.
Обратитесь к приведенному ниже коду для выполнения этой задачи.
Теперь, когда мы нашли слова, похожие по контексту на наши исходные ключевые слова, давайте займемся последней частью поиска.
Поиск ключевых слов по тексту
Для поиска мы будем использовать класс PhraseMatcher класса Matcher Spacy. На этом этапе важно помнить, что объект документа Spacy отличается от простой строки Python, и поэтому мы не можем напрямую использовать if then else для поиска результатов.
Обратитесь к приведенному ниже коду для выполнения этой задачи.
Приведенный выше код будет искать каждое ключевое слово, которое у нас есть, по всему тексту и вернет нам все предложение, где бы оно ни было найдено.
Приведенный выше код сгенерирует следующий вывод:
Вы можете увеличить или уменьшить количество похожих ключевых слов, которые вы хотите найти для любых исходных ключевых слов. Кроме того, как только вы получите результаты во фрейме данных, вы можете просто добавить еще несколько логик для ранжирования результатов (придать больший вес точному совпадению ключевых слов и т. Д.).
Примечание. Увеличение количества похожих ключевых слов до большого количества может увеличить вычислительные затраты всей программы и, следовательно, должно выбираться с умом.
Вот как вы можете создать свою собственную программу Python на основе машинного обучения для выполнения поиска по любому тексту.
В случае любого другого источника ввода (фотографии, веб-страницы и т. Д.) Вам просто нужно настроить часть предварительной обработки данных (OCR, Web Scraping и т. Д.), А остальная логика должна работать нормально.
Источник: digitrain.ru