|
0 / 0 / 0
Регистрация: 23.12.2012
Сообщений: 5
|
|
Реализация мини поисковика07.05.2013, 00:59. Показов 1063. Ответов 3
Метки нет (Все метки)
Знаю, что пишу не в тот раздел, но просьба не переносить и не удалять тему, т.к. все-таки программистов на хаскелле очень мало, поэтому надеюсь, что здесь увидят тему. Есть некоторые наработки, но нужно написать пару функций на хаскелле. За умеренное денежное вознаграждение. Кто согласен - напишите ЛС.
Добавлено через 39 минут Связываться лучше не по ЛС, а мыло: artpaliy@mail.ru, skype: f.l.a.s.h.e.r
0
|
|
| 07.05.2013, 00:59 | |
|
Ответы с готовыми решениями:
3
Реализация класса поисковика
Реализация мини-склада |
|
0 / 0 / 0
Регистрация: 23.12.2012
Сообщений: 5
|
|
| 07.05.2013, 14:41 [ТС] | |
|
Дело в том, что я отлично представляю алгоритм и как должно работать, но незнание языка мешает мне всё это реалзовать. У меня есть краулер, который получает ссылку, затем берет всё содержимое html, затем очищает от тегов и разбивает по словам и ссылкам. Нужно этот краулер доработать, чтобы он слова приводил к одному регистру, убирал точки и запятые и самое сложное - разобраться с разными кодировками на разных сайтах.
Далее задача для поисковика: нужно несколькими потоками (forkIO кажется...) бегать по страницам и собирать слова контента в словарь отдельно по словам (просто текстовый документ) и ссылки. Далее идя по этим ссылкам, но не покидая сайт делать тоже самое заданое количество раз в ширину (не глубину ссылок) или пока не закончатся ссылки, ограничиваясь допустим 100 страниц. Полученные слова нужно загнать в словарь (преподаватель посоветовал следующее: Data.Map Map String [(String, Integer)]) Где будет слово, ссылки на страницы с этим словом и количество повторений. Таким образом можно заполнять этот словарь. К тому же при просмотре каждой следующей странице к этому слову в словаре нужно добавлять новые ссылки с соответствующим числом повторений, а не создавать новое. Результатом работы должен стать запрос по которому выведется список ссылок на страницы в следующем приоритете: если это несколько слов, то в том порядке где чаще всего встречаются оба слова, если одно или нет таковых страниц, то в том порядке, где чаще встречается каждое слово. А вторая часть - это по запросу слова выдавать ряд ссылок по количеству повторений на этой странице (если несколько слов введено, то по этому же принципу сначала И, затем ИЛИ). Например выдает от 0 до 20 ссылок. Вот код краулера. На сколько я понимаю, его писал сам мой преподаватель, человек довольно умный и хороший, поэтому выкладывать его в открытый доступ не есть гуд, но всё же... {-# LANGUAGE ScopedTypeVariables #-} import Network.HTTP import Text.HTML.TagSoup import Data.List import Prelude hiding (catch) import Control.Exception (IOException, catch) -- From "Real World Haskell" book downloadURL :: String -> IO (Either String String) downloadURL url = do resp <- simpleHTTP (getRequest url) case resp of Left x -> return $ Left ("Error connecting: " ++ show x) Right r -> case rspCode r of (2,_,_) -> return $ Right (rspBody r) (3,_,_) -> -- HTTP Redirect case findHeader HdrLocation r of Nothing -> return $ Left (show r) Just url -> downloadURL url _ -> return $ Left (show r) `catch` (\(exn :: IOException) -> return $ Left "connection failed") parse = dropTags ["script", "style"] . parseTags getLinks = map (fromAttrib "href") . filter (~== "<a href>") getWords = words . innerText dropTags :: (Eq str) => [str] -> [Tag str] -> [Tag str] dropTags labels [] = [] dropTags labels (tag:rest) = case find (flip isTagOpenName tag) labels of Nothing -> tag : dropTags labels rest Just target -> skipTo target rest where skipTo target [] = [] skipTo target (tag:rest) | isTagCloseName target tag = dropTags labels rest | otherwise = skipTo target rest По факту: есть функция - её нужно чуть-чуть доработать и написать еще две. Немного, не сильно сложно, но программист хаскелля из меня никакой =(
0
|
|
|
0 / 0 / 0
Регистрация: 23.12.2012
Сообщений: 5
|
|
| 18.05.2013, 18:54 [ТС] | |
|
Ну может кто-нибудь откликнется?
0
|
|
| 18.05.2013, 18:54 | |
|
Помогаю со студенческими работами здесь
4
Реализация логики работы схемы на 17-ти мини-кнопках
Зависает windows 7 x64 и мини-тема на счёт видеокарты(мини во вторую очередь) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
1С: Программный отбор элементов справочника Номенклатура по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа.
В качестве фильтра для отбора справочника служит группа номенклатуры.
Отбор под наименованию группы (на. . .
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
1С: Программный отбор элементов справочника Сотрудники по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит предопределенное значение перечислений.
Процедура. . .
|
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|