EKSPLORACJA ZASOBÓW INTERNETU - MIŁOSZ KADZIŃSKI LABORATORIUM XIII NUTCH

Podobne dokumenty
Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Zaawansowane aplikacje WWW - laboratorium

Javadoc. Piotr Dąbrowiecki Sławomir Pawlewicz Alan Pilawa Joanna Sobczyk Alina Strachocka

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Laboratorium - Przechwytywanie i badanie datagramów DNS w programie Wireshark

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Wstęp Budowa Serwlety JSP Podsumowanie. Tomcat. Kotwasiński. 1 grudnia 2008

Aplikacje RMI Lab4

Laboratorium - Używanie programu Wireshark do obserwacji mechanizmu uzgodnienia trójetapowego TCP

Aplikacje w środowisku Java

Tomasz Boiński: 1. Pozycjonowanie stron i zastosowanie mod_rewrite

Niezbędne serwery aplikacji. Wprowadzenie do technologii JBoss i Apache Tomcat.

Programowanie I

Programowanie obiektowe

Aplikacje RMI

Git, Bitbucket, IntelliJ IDEA

Podstawy i języki programowania

Lab3 - Zastosowania protokołów przesyłania plików

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

Systemy Rozproszone - Ćwiczenie 6

media Blitz wydajne sytemy szablonów

ZAPOZNANIE SIĘ Z TWORZENIEM

Instrukcja laboratoryjna nr.4

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

akademia androida Składowanie danych część VI

Wprowadzenie do projektu QualitySpy

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

EKSPLORACJA ZASOBÓW INTERNETU - MIŁOSZ KADZIŃSKI LABORATORIUM X CRAWLOWANIE

IBM SPSS Statistics - Essentials for Python: Instrukcje instalacji dla Windows

Mapa witryny - Poradnik od A do Z

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Kurs programowania. Wykład 7. Wojciech Macyna. 25 kwietnia 2017

Programowanie Urządzeń Mobilnych. Laboratorium nr 7, 8

Przetwarzanie danych z wykorzystaniem technologii NoSQL na przykładzie serwisu Serp24

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Programowanie wielowarstwowe i komponentowe

Czytelnik w bibliotece cyfrowej

Java jako język programowania

Laboratorium 7 Blog: dodawanie i edycja wpisów

Co zostanie wypisane na ekranie? (1)

Metody Metody, parametry, zwracanie wartości

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Bezpieczne uruchamianie apletów wg

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Serwery aplikacji. dr Radosław Matusik. radmat

Wprowadzenie. Narzędzia i środowiska programistyczne. Laboratorium 1. Prowadzący: Kierunek: Semestr: Rok: Tomasz Gądek Informatyka Zimowy 2

Podstawy technologii WWW

Architektura rozproszonych magazynów danych

PHP 5 język obiektowy

Programowanie Komponentowe WebAPI

Dokumentacja do API Javy.

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Zbigniew Sołtys - Komputerowa Analiza Obrazu Mikroskopowego 2015 część 13

Rozszerzenie funkcjonalności systemów wiki w oparciu o wtyczki i Prolog

Dokumentacja kompilacji źródeł aplikacji 1.0

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

media Wyszukiwanie pełnotekstowe z wykorzystaniem Search Engine

Badanie struktury sieci WWW

Klasy i obiekty cz II

Zaawansowane aplikacje internetowe

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Zaawansowane aplikacje internetowe laboratorium

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Wprowadzenie do Doctrine ORM

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Laboratorium 1 Wprowadzenie do PHP

PHP: bazy danych, SQL, AJAX i JSON

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Esri Geoportal Server informacje o produkcie

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Pobieranie i przetwarzanie treści stron WWW

Podstawy i języki programowania

Python wstęp. Michał Bereta

Wordpress. Wstęp do tworzenia pluginów. Piotr Wasilewski wasilewski.piotrek (at) gmail.com

Laboratorium - Monitorowanie i zarządzanie zasobami systemu Windows XP

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15 Artur.Kalinowski@fuw.edu.

Multi-projekt z przedmiotów Inżynieria oprogramowania, Współczesne bazy danych i Programowanie w języku Java

Zadanie programistyczne nr 3 z Sieci komputerowych

Programowanie obiektowe zastosowanie języka Java SE

Aplikacje WWW - laboratorium

SIP Studia Podyplomowe Ćwiczenie laboratoryjne Instrukcja

Wstęp - Prosta aplikacja internetowa w technologii Java EE 5. Programowanie komponentowe 1

ApSIC Xbench: Szybki start wydanie Mariusz Stępień

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Ćwiczenie 2. Tworzenie serwisów internetowych. Zapoznanie z pakietem WebRatio

Instalacja SQL Server Express. Logowanie na stronie Microsoftu

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Technologie i usługi internetowe cz. 2

Aplikacje internetowe - laboratorium

Tworzenie aplikacji w języku Java

Pomoc dla systemu WordPress

Zaawansowane aplikacje internetowe - laboratorium

Transkrypt:

EKSPLORACJA ZASOBÓW INTERNETU - MIŁOSZ KADZIŃSKI LABORATORIUM XIII NUTCH 1. Nutch Open source, Doug Cutting (Yahoo, Bell Labs), Apache, Java Powody, dla których warto uruchomić własną wyszukiwarkę: Przejrzystość sprawdź, jak działa algorytm rangujący; kryterium sprawiedliwości (zawartości strony), a nie pieniędzy ważne w zastosowaniach akademickich i dla potrzeb organizacji rządowych) Zrozumienie sprawdź, jak działa wyszukiwarka dużej skali (kod źródłowy Google nie jest dostępny); Map Reduce + łatwość rozszerzania Rozszerzalność dostosuj do własnych potrzeb i uczyń częścią swojej aplikacji/strony; interface, funkcjonalność, źródła informacji Nutch może operować na lokalnym systemie plików (brak błędów sieciowych, cachowanie nie jest konieczne), intranecie, lub całej sieci (wiele wyzwań związanych z crawlowaniem od których stron zacząć, jak podzielić pracę między crawlery, jak często re-crawlować, jak radzić sobie z niedziałającymi linkami, itd.) Nutch = Crawler + Indexer/Searcher + GUI + Plugins (np. parsowanie) + Hadoop (MapReduce & Distibuted FS) Nutch = Crawler przystosowany do wspólpracy z Solrem (Indexer/Searcher + GUI), Tika (parsowanie) i Apache Gora (przechowywanie) Nutch vs. Lucene Jeśli nie potrzeujesz Web crawlera, użyj Lucene (np. dodanie opcji przeszukiwania bazy danych) Nutch lepszy dla pracy ze stronami, do których nie ma bezpośredniego dostępu do danych na nich się znajdujących, lub stron pochodzących z różnych źródeł Nutch crawler (+ searcher) Crawler - pobiera strony, utrzymuje struktury danych (w tym web database=web DB, która zawiera strukturę i własności crawlowanego grafu; dwa rodzaje krotek: strony i linki (zbiór linków wychodzących z danej strony do innych stron)), segmenty (strony ściągnięte i zindeksowane w czasie pojedynczego uruchomienia), tworzy indeks odwrócony (inverted index) Searcher (może tą rolę pełnić Solr) - wykorzystuje indeks do wypracowania odpowiedzi na zapytania; Nutch (Solr) korzysta z Lucene; każdy segment ma swój indeks; indeks odwrotny powstaje przez połączenie indeksów wszystkich segmentów Nutch jako crawler 1. Crawler generuje listę stron do pobrania na podstawie Web DB (strony z tego samego hosta trafiają na tą samą fetchlist), Web DB wykorzystywana tylko podczas crawlowania (niewykorzystywana w czasie wyszukiwania) 2. Zbiór crawlerów pobiera zawartość z sieci (przestrzega Robot Exclusion Policy) 3. Crawler uaktualnia WebDB (znalezione nowe linki) 4. Crawler generuje nową listę stron do pobrania (te, które już dawno nie były pobierane, lub nowe znalezione w poprzednim cyklu) 5. Cykl się powtarza. - 1

Narzędzie crawl front-end do narzędzi niższego poziomu 1. Utwórz WebDB (admin db create) 2. Dodaj ziarno adresów URL do WebDB (inject) 3. Generuj listę adresów stron do pobrania na podstawie WebDB (generate) 4. Pobierz zawartość stron pod wskazanymi adresami URL (fetch) 5. Uaktualnij WebDB linkami z pobranych stron (updatedb) 6. Powtarzaj kroki 3-5, dopóki nie zostanie osiągnięta zadana głębokość. 7. Uaktualnij segmenty na podstawie WebDB (updatesegs) 8. Indeksuj pobrane strony (index) w nowszych wersjach polecenia solrindex 9. Eliminuj duplikaty (zawartość i adresy) z indeksu (dedup) 10. Połącz indeksy w jeden duży indeks dla celów przeszukiwania (merge) Nutch (1.X) jako crawler Nutch (1.X) jako Web Serch Engine bin/nutch crawl urls dir crawl-directory depth 3 >& crawl.log urls plik z ziarnem adresów URL np. echo 'http://www.cs.put.poznan.pl/mkadzinski/ezi/dzienne/lab10/crawler/anaconda/anaconda01.html' > urls crawl-directory docelowy folder na wyniki Wyniki crawlowania Nowsze wersje Nutcha przystosowane są do współpracy z hbase. - 2

Co można z nich wydobyć: Statystyki: bin/nutch readdb crawl-directory/db stats Informacje o stronach: bin/nutch readdb crawl-directory/db dumppageurl Informacje o linkach: bin/nutch readdb crawl-directory/db dumlinks Narzędzie do analizy indeksu: Luke - http://code.google.com/p/luke/ (oglądanie pojedynczych zindeksowanych dokumentów; realizacja ad hoc queries) Narządzie do analizy linków LinkAnalysisTool Nutch jako wyszukiwarka (nowsze wersje Nutcha przestają wspierać tą funkcję; rolę platformy wyszukującej w połączeniu z Nutchem pełni Solr, ale idea przejrzystości pozostaje ta sama) Z linii komend przez NutchBean: bin/nutch.org.apache.nutch.searcher.nutchbean <keyword> Najlepiej zainstalować Tomcata. Możliwość analizy wyniku dla każdej strony oraz tekstu z linków prowadzących do danej strony Pluginy (rozszerzenia dla tzw. extension-points) Każdy extension point definiuje interface który musi być implementowany przez rozszerzenie Kluczowe extension points (patrz plugin NutchExtensionPoints plik plugin.xml) IndexingFilter:dodaj meta-dane do indeksowanych pól. Parser: by parsować nowy typ dokumentu. NutchAnalyzer: analiza zależna od języka. Wszystkie funkcje parsowania, indeksowania i wyszukiwania zostały zaimplementowane jako pluginy. Np. crawlowanie stron tekstowych i HTML zaimplementowano w wersji podstawowej. Crawlowanie dokumentów PDF jest możliwe dzięki pluginowi parse-pdf Aby korzystać z pluginu: edytuj conf/nutch-site.xml i dodaj jego nazwę do plugin.includes Plik źródłowy w src/plugin - 3

Łatwa integracja Nutch do własnej aplikacj (wykorzystanie Nutch API lub OpenSearch API) Strona projektu: http://nutch.apache.org/ Pluginy dla Nutch: http://wiki.apache.org/nutch/plugincentral Luke - http://code.google.com/p/luke/ Niezła prezentacja: http://www.irsi.res.in/winter-school/slides/nutch.pdf 2. Ćwiczenie Tylko zadanie 1 termin 10 stycznia (12-13 stycznia odbędą się ostatnie zajęcia). Zadanie 1 [8pkt]: Zadanie polega na wykonaniu tutoriala ze strony https://github.com/renepickhardt/metalcon/wiki/simplenutchsolrsetup (dla wersji 2.X) lub http://wiki.apache.org/nutch/nutchtutorial (dla wersji Nutch 1.X). Tutorial ten pokazaje, jak zintegrować Nutch z Solr. Dla pierwszej z nich potrzebne wersje Nutcha, Solra oraz hbase znajdują się w katalogu lab13. Nutch jest wykorzystywany do crawlowania, Solr do wyszukiwania, hbase do przechowywania. Tutorial powinien zostać wykonany tak, by pobrać wszystkie strony z: http://www.cs.put.poznan.pl/mkadzinski/ezi/dzienne/lab10/crawler/ Jako rozwiązanie należy przesłać w postaci tekstowej polecenia wydane w celu pobrania strony i ich załadowania do Solra, a także wyniki wyszukiwania (w formie tekstowej lub printscreen) dla zapytań anaconda, programming oraz python (takich samych jak przy wykorzystaniu crawlera oraz wyszukiwarki w lab10). Poniższych zadań nie robimy. Zadanie 2 [8pkt]: Zainstaluj Nutch w wersji nie wyższej niż 1.2 (dostępne w http://archive.apache.org/dist/nutch) Przydatne linki: Instalacja i konfiguracja: http://zillionics.com/resources/articles/nutchguidefordummies.htm Przykład stworzenia pluginu: http://wiki.apache.org/nutch/writingpluginexample Wykorzystaj Nutch do pobrania wszystkich stron z katalogu: http://www.cs.put.poznan.pl/mkadzinski/ezi/dzienne/lab10/crawler/ Rozszerz działanie crawlera tak, by: Dla crawlowanych stron były indeksowane listy linków (URL lists) wchodzących (inlinks) i wychodzących (outlinks). Nutch Search wspierało zapytania dotyczące tego, które strony mają linki wychodzące do x oraz która strona ma linki wchodzące od x. Zapytania postaci: out: adres_strony oraz in: adres_strony. Napisz pojedynczy plugin dla indeksowania i obsługi zapytań dotyczących linków wchodzących i wychodzących. Niech nazywa się ezi-plugin. Skompiluj Nutch i odpal wyszukiwanie, używając Toccata. Wskazówki: Linki wychodzące (outlinks) oraz wchodzące (inlinks) powinny być indeksowane jako dodatkowe pola obiektu Dokument (odpowiednio pole in oraz out ). - 4

Indeksowanie dodatkowych pól: porównaj pluginy index-basic oraz index-more ten drugi pokazuje, jak zindeksować dodatkowe dane dotyczące strony/dokumentu. Gdzie szukać danych do indeksowania? Outlinks: org.apache.nutch.parse.html.domcontentutils - metoda getoutlinks() org.apache.nutch.parse.outlink metoda gettourl() HTMLParser.getParse -> obiekt Parse Parse.getData() -> obiekt ParseData ParseData.getOutlinks() -> Outlinks Inlinks: org.apache.nutch.crawl.inlink - metoda getfromurl() Inlinks przekazywane w obiekcie Document Dodaj możliwość wyszukiwania w odniesieniu do nowych pól. Przeszukiwanie pól jest wspierane w pluginie query-basic. Plugin query-more pokazuje jako roszerzyć zapytania, by wspierały nowe pola dokumentu. Przykład: MoreIndexingFilter.java dodanie nowego pola public Document filter(document doc, Parse parse, UTF8 url, CrawlDatum datum, Inlinks inlinks) throws IndexingException { String contentlength = parse.getdata().getmeta(response.content_length); if (contentlength!= null) doc.add(new Field("contentLength", contentlength, Field.Store.YES, Field.Index.NO)); return doc; Ważne, by ustalić własności parametrów pól w poprawny sposób: Field.Store.NO oznacza że zawartość pola nie jest przechowywana i nie jest w związku z tym zwracana jako część wyników Field.Index.TOKENIZED - zawartość pola zostanie poddana działaniu tokenizera (String array) Sugestia dotycząca rozwiązania: EZIIndexer.java (szkielet tej klasy jest zawarty w rozwiązaniu) public NutchDocument filter(nutchdocument doc, Parse parse, UTF8 url, CrawlDatum datum, Inlinks inlinks) throws IndexingException { Iterowanie po każdym inlink : inlinks Dla każdego inlink, metoda getfromurl() zwraca URL jako string Sklej wszystkie adresy w string Dodaj odpowiednie pole do obiektu dokumentu: doc.add(new Field( in", in_urls, )); Outlink[] outlinks = parse.getdata().getoutlinks() W pętli po wszystkich outlinks Metoda Outlink.getToUrl() zwraca URL jako string Sklej wszystkie adres w string Dodaj odpowiednie pole do obiektu dokumentu: doc.add(new Field( out", out_urls, )); return doc; - 5

Przykład obsługi dodatkowych klauzul w zapytaniu: URLQueryFilter.java /** * Handles "url:" query clauses, causing them to search the field indexed by BasicIndexingFilter. */ public class URLQueryFilter extends FieldQueryFilter { public URLQueryFilter() { super("url"); public void setconf(configuration conf) { super.setconf(conf); Sugestia dotycząca rozwiązania: EZIInlinkQueryFilter.java (szkielet tej klasy jest zawarty w rozwiązaniu) /** * Handles in:" query clauses, causing them to search the inlinks field indexed by EZIIndexer. */ public class EZIInlinkQueryFilter extends FieldQueryFilter { public EZIInlinkQueryFilter() { // trzeba wskazać tylko I wyłącznie odpowiednią klauzulę zapytania (w tym wypadku in ) public void setconf(configuration conf) { super.setconf(conf); Plugin powinien znaleźć się w folderze ezi-plugin, zawierającym: plugin.xml musi definować trzy rozszerzenia: EZIndexer roszerza IndexingFilter EZIInlinkQueryFilter oraz EZIOutlinkQueryFilter rozszerzają QueryFilter build.xml, odpowiednią strukturę pakietów. Użyj ant by skompilować plugin (-> ezi-plugin.jar) Dodaj plugin do nutch-site.xml <property> <name>plugin.includes</name> <value>nutch-extensionpoints protocol-http urlfilter-regex parse-(text html) index-basic query-(basic site url) ezi-plugin</value> <description>regular expression naming plugin directory names to include. Any plugin not matching this expression is excluded. In any case you need at least include the nutch-extensionpoints plugin. By default Nutch includes crawling just HTML and plain text via HTTP, and basic indexing and search plugins. </description> </property> Jeśli masz problem z plugin.includes, dokonaj zmian bezpośrednio w nutch-default.xml Użyj ant do kompilacji Nutch, by mógł być wykorzystywany EZIIndexer. Użyj ant do kompilacji aplikacji Nutch Web, by mogły być wykorzystane nowe filtry zapytań. - 6

Odpal Nutch na Tomcat i przetestuj działanie. Co należy wysłać jako rozwiązanie? Kod: cały folder z pluginem, który napisałeś (ewentualnie kod pluginów, które zmieniłeś) Wyniki: wybierz dwie strony spośród stron zindeksowanych i podaj dla nich wyniki dotyczące linków wchodzących i wychodzących (print screeny albo wyniki w pliku tesktowym). Zadanie 3 [16pkt przy maksymalnej liczbie 8]: Alternatywne zadanie polega na wykonaniu Zadania 1 na najnowszej wersji Nutcha i pokazaniu wyników działania z wykorzystaniem Solr. - 7