Radosław+Radzyński

Radosław Rydzyński 236412, IS 2


 * Temat: **

Szukanie informacji w bazach tekstowych - wyszukiwanie stron zawierających maksymalnie dużo informacji.


 * Cel pracy: **

Te same informacje powielane są w setkach serwisów informacyjnych, np. Science Daily. Trzeba odróżnić strony, które zawierają bardziej szczegółowe informacje. Sprawdzamy kolejne strony by zobaczyć czy jest na nich coś więcej.

Celem pracy jest stworzenie aplikacji internetowej zawierającej spis odnalezionych stron posortowanych ze względu na ilość szczegółowych informacji zawartych w tekście. Ponadto aplikacja ma zawierać podsumowanie dodatkowych stron, pozwalających szybko znaleźć źródło i szczegóły.


 * Kryteria wyszukiwania informacji: **


 * źródło wiadomości,
 * named entity recognition - system, dzięki któremu możemy zaklasyfikować atomowe elementy w tekście do ustalonych kategorii takich jak: nazwiska osób, organizacja, lokacje, ilości, data itp.
 * odnośniki do prac naukowych.


 * Plan pracy: **

1. Zapoznanie z tematem 2. Konfiguracja systemu kontroli wersji (SVN). 3. Rozwiązanie problemu: „Jak uzyskać linki stron z wyszukanymi artykułami?” 4. Napisanie skryptów parsujących zawartość stron różnych serwisów informacyjnych 5. Named entity recognition
 * Konfiguracja niestandardowej wyszukiwarki – skorzystanie z API Gogle (doprecyzowanie wyszukiwania, witryny do przeszukiwania itp.),
 * Opisanie możliwych modyfikacji wyszukiwarki,
 * Uzyskanie //APIKey,//
 * Połączenie niestandardowej wyszukiwarki z JSON Search API,
 * Używanie i konfiguracja JSON Custom Search API,
 * Parsowanie pliku wynikowego w celu uzyskania interesujących nas informacji (za pomocą frameworka simple_html_dom).
 * Omówienie i zapoznanie się ze znacznikami „named entity recognition”,
 * Omówienie, instalacja i zapoznanie się z platformą NLTK,
 * Opakowanie „czystego” tekstu w znaczniki named entity recognition za pomocą platformy NLTK.

6. Użycie właściwego algorytmu do wyodrębnienia stron z najbardziej szczegółowymi informacjami
 * Stworzenie skryptu porównującego strony,
 * Stworzenie algorytmu, który wyszuka strony z najbardziej szczegółowymi informacjami //(nad jego dokładnym działaniem muszę się jeszcze zastanowić)//.

7. Stworzenie interfejsu aplikacji 8. Podsumowanie 9. Bibliografia


 * Schemat działania aplikacji: **

Działanie stworzonej aplikacji internetowej składa się z 6 głównych etapów:
 * 1) Wyszukiwarka: formułowanie zapytania i wybór opcji – na tym etapie użytkownik korzystający z wyszukiwarki może sprecyzować czego dokładnie szuka tworząc główne zapytanie i wybierając opcje wyszukiwania (np. data publikacji artykułu, terminy, które muszą znajdować się w artykule lub terminy, które nie mogą się w nim znajdować).
 * 2) Przetworzenie zapytania używając Custom Search API – kryteria przekazane z poprzedniego etapu służą do sformułowania zapytania do wcześniej skonfigurowanej Niestandardowej Wyszukiwarki Google w celu uzyskania wyników wyszukiwania w postaci pliku w formacie JSON.
 * 3) Parsowanie pliku zwracanego przez Custom Search API – uzyskany plik zawiera wiele informacji, ale należy z niego wybrać te, które nas interesują i zapisać je w odpowiednich strukturach w programie.
 * 4) Pobieranie zawartości stron z uzyskanych linków – na każdej z uzyskanych witryn używany jest odpowiedni skryptu parsujący. Strony różnią się budową, więc nie można użyć uniwersalnego parsera obsługującego wszystkie strony. Z witryn pobierany jest artykuł oraz jego tytuł.
 * 5) Przetwarzanie tekstu oraz wykonanie algorytmu – artykuły są badane oraz wykonywane są na nich odpowiednie skrypty, aby uzyskać z artykułów jak najwięcej informacji (wyszukiwanie słów kluczowych, nazw własnych itp.). Następnie wykonywany jest algorytm, który na podstawie uzyskanych danych wylicza wartości współczynników, które później będą służyły do stworzenia rankingu stron.
 * 6) Stworzenie rankingu oraz przedstawienie wyników – ostatni etap działania aplikacji. Na podstawie wyliczonych przez algorytm wartości tworzony jest ranking stron, a następnie jest on wyświetlany użytkownikowi wraz z odnośnikami oraz statystykami.


 * Niestandardowa wyszukiwarka: **

Dzięki opcji stworzeniu niestandardowej wyszukiwarki Google możemy stworzyć wyszukiwarkę, która odpowiada naszym potrzebom. Bardzo ważna i przydatną funkcją jest stworzenie bazy witryn, z których będziemy wyszukiwać. Dzięki temu możemy stworzyć swoją własną listę z stronami serwisów informacyjnych i wyszukiwać informacji tylko na tych, które nas interesują (bez zbędnych "śmieci" z witryn niewartych uwagi). Plusem jest także to, że w każdej chwili możemy zmienić podstawowe rzeczy: nazwę, opis, słowa kluczowe, język wyszukiwarki. Ponadto możemy aktywować takie opcje jak doprecyzowanie wyszukiwania, synonimy, autouzupełnianie po rozpoczęciu pisania w polu wyszukiwania itp.

W rezultacie otrzymujemy w pełni sprawną wyszukiwarkę przystosowaną do naszych potrzeb, która po połączeniu z Custom Search API (również Google) oraz wyłuskaniu z pliku wynikowego interesujących nas informacji, da nam możliwość uzyskania linków, które w późniejszym czasie posłużą do pobierania zawartości stron i porównywania ich.

Link do niestandardowej wyszukiwarki (można sprawdzić jakie są wyniki wyszukiwania oraz w jakich serwisach informacyjnych wyszukujemy): []


 * Status:** Ukończone.


 * Parser do wyszukiwania linków: **

Parser napisany został w języku PHP. Jest on potrzebny do przetworzenia danych uzyskanych z Custom Search API. Dzięki niemu możemy pobrać i dalej przetwarzać wyniki otrzymane za pomocą JSON Custom Search API, a mianowicie linki do stron z artykułami. Niestety Custom Search API posiada ograniczenia i możemy pobrać maksymalnie tylko 100 linków, lecz dzięki wielu opcjom dostosowania zapytania do naszych potrzeb możemy zawęzić krąg wyszukiwania do najważniejszych linków. //NetBeans// IDE zostanie użyty jako środowisko programistyczne.


 * Status:** Ukończone.


 * Parsery do pobierania zawartości stron: **

Niestety ze względu na różnice w budowie stron serwisów informacyjnych do każdego serwisu informacyjnego należy napisać oddzielny parser uzyskujący ze źródła strony interesujące nas informacje (tytuł, datę publikacji, artykuł, odwołania). Aby przyspieszyć i ułatwić pisanie skryptów do napisania ich został użyty zostanie framework autorstwa S.C. Chena simple_html_dom. Jego zalety opisane są na stronie głównej projektu oraz w mojej pierwszej prezentacji (link na samym dole). Obecnie następujące serwisy informacyjne są sparsowane:
 * []
 * []
 * []
 * []
 * []
 * []


 * Status:** Ukończone.


 * SVN (Subversion - kontrola wersji): **

System kontroli wersji został stworzony niedawno głównie w celu jasnego podglądu postępów w pracy. Poniżej znajduje się link, pod którym można śledzić zmiany kodowe w aplikacji.


 * Link:** [|SVN - dziennik zmian w aplikacji]
 * Status:** Skonfigurowane.


 * LingPipe (porzucone): **

To zestaw narzędzi do przetwarzania tekstu używający lingwistyki. Służy głównie do wyszukiwania nazwisk osób, organizacji i miejsc w bazach tekstowych. LingPipe posiada moduł Named Entity Recognition, z którego będę przede wszystkim korzystał. Architektura z założenia ma być wydajna, skalowalna oraz wielokrotnego użytku. LingPipe posiada kilka wersji, jedna z nich posiada licencję Royalty Free, która ma pewne ograniczenia, ale w przypadku mojej pracy nie powinny być one przeszkodą.


 * Najważniejsze cechy to:**
 * Java API z dostępnym kodem źródłowym,
 * Wielojęzyczne modele,
 * Obszerna dokumentacja.


 * Jak LingPipe rozpoznaje jednostki?**

Moduł „named entity recognition” działa głównie na zasadzie danych statystycznych lub bardziej bezpośrednio za pomocą porównywania słownikowego i pasujących wyrażeń regularnych. Aby poprawnie korzystać z LingPipe musimy najpierw „dostroić” go do naszych potrzeb. Oznacza to, że inne zwroty używane są w języku codziennym, inne w poważnych artykułach, a jeszcze inne na różnych blogach. Dostosowując moduł do artykułów naukowych i uruchamiając go na stronach niespecjalistycznych oczywiście nie uzyskamy zadowalającego rezultatu.


 * Status:** Porzucone ze względu na problemy dostosowania narzędzia do naszych potrzeb oraz brak serwera JAVY na serwerze, na którym stała będzie aplikacja. Prawdopodobną alternatywą będzie darmowy projekt open source [|NLTK].


 * NLTK: **

Zestaw narzędzi napisanych w języku programowania Python. NLTK zawiera wiele baz danych (m.in. baza danych zawierająca nazwy korporacji czy baza źródeł leksykalnych, WordNet). Platforma dostarcza również wielu bibliotek pozwalających nam klasyfikować, tokenizować, parsować czy tagować elementy tekstu. Ponadto dostarcza nam też wiele interesujących pakietów takich jak np. [|named_entity Module]służący do używania znaczników Named Entity Recognition. Dużą wadą natomiast jest czas wykonywania modułów (opakowanie dla 100 artykułów mogłoby trwać nawet ponad godzinę), dlatego ze względów optymalizacyjnych będzie prawdopodobnie można tylko fragment danych "przepuścić" przez moduł (chyba, że uda się to jakoś przyspieszyć).


 * Status**: Ukończone.


 * Algorytm wyszukujący najbardziej szczegółowe strony z uzyskanej wcześniej bazy: **

Algorytm tworzenia rankingu stron składa się z czterech głównych składowych. Są nimi: stosunek liczby słów w artykule do liczby słów w innych dokumentach, stosunek liczby słów w artykule bez słów z stop-listy w artykule do liczby słów, również bez stop-listy, w innych dokumentach, liczba wyszukanych nazw kluczowych za pomocą systemu Rozpoznawania Nazw Encji (ang. Named Entity Recognition) oraz sumowana waga słów zawartych w każdym dokumencie spełniających określone kryteria. Każda ze składowych ma określoną wagę, którą można programowo dostosować ze względu na to jak ważny jest dla nas dany współczynnik.


 * Status**: Ukończone.


 * Adres www aplikacji wraz z opisem interfejsu: **

Lista opcji wyszukiwarki (opcje dodawane są do zapytania, tzw. doprecyzowanie zapytania):
 * 1) Link count – parametr, który odpowiada za liczbę witryn do porównania przez algorytm. Minimalną wartością parametru jest liczba dziesięciu stron. Kolejne wartości rosną co dziesięć stron aż do wartości maksymalnej opcji, czyli stu stron (ograniczenie związane z używaniem Custom Search API).
 * 2) Safety level – opcja dostosowania poziomu bezpieczeństwa, inaczej mówiąc jest to filtracja zawartości strony ze względu na treści przeznaczone dla dorosłych odbiorców. Możliwe opcje do wyboru to:
 * off (wyłączone) – brak filtracji, pokazywane są wszystkie strony,
 * medium (poziom średni) – blokuje strony zawierające materiały na dorosłych odbiorców,
 * high (poziom wysoki) – zaostrzona wersja filtracji stron [10].
 * 1) Exact terms – pole tekstowe pozwalające zdefiniować wyrazy lub zwroty, które muszą pojawić się na wyszukiwanej stronie. Można podać kilka takich fraz, a każda z nich musi być oddzielona przecinkiem.
 * 2) Exclude Terms – pole tekstowe pozwalające zdefiniować wyrazy lub zwroty, które nie mogą pojawić się na wyszukiwanej stronie. Można podać kilka takich fraz, a każda z nich musi być oddzielona przecinkiem.
 * 3) Date restrict – opcja służąca do definiowania przedziału czasowego w jakim artykuł został opublikowany. Przedział tworzony jest na zasadzie wybrania przez użytkownika aplikacji jak dawno artykuł mógł zostać dodany do serwisu informacyjnego do dnia obecnego. Dostępne opcje:
 * All – wszystkie artykułu bez uwzględniania daty publikacji,
 * Day – ile maksymalnie dni temu mógł zostać opublikowany artykuł (po wybraniu tej opcji pojawia się pole tekstowe, w którym można podać liczbę dni),
 * Week – ile maksymalnie tygodni temu mógł zostać opublikowany artykuł (po wybraniu tej opcji pojawia się pole tekstowe, w którym można podać liczbę tygodni),
 * Month – ile maksymalnie miesięcy temu mógł zostać opublikowany artykuł (po wybraniu tej opcji pojawia się pole tekstowe, w którym można podać liczbę miesięcy),
 * Year – ile maksymalnie lat temu mógł zostać opublikowany artykuł (po wybraniu tej opcji pojawia się pole tekstowe, w którym można podać liczbę lat),
 * 1) Save/Cancel – przyciski służące do zapisywania dokonanych zmian w opcjach lub ich zerowania bez zapisu.
 * 2) Options – przycisk odpowiadający za pojawianie się i chowanie okna opcji. Zmiany dokonane na opcjach w chwili kliknięcia przycisku nie są zerowane, ale także nie są zapisywane. Aby zapisać zmiany w opcjach należy użyć przycisku „Save”.
 * 3) Pole tekstowe (ang. search field) – miejsce do wpisania frazy do wyszukania. Przy tworzeniu zapytania można używać wszystkich opcji jakie działają podczas używania standardowej wyszukiwarki Google [11], takich jak „+”, aby mieć pewność, że dane słowo wystąpi w artykule lub „-” służący do wyłączenia słowa z wyników wyszukiwania.
 * 4) Search – przycisk odpowiadający za wysłanie podanej w polu tekstowym frazy wraz z wartościami parametrów opcji oraz rozpoczęcie procesu wyszukiwania i porównywania stron.
 * 5) „?” (Help) – źródło pomocy zawierające objaśnienia jak korzystać z aplikacji. Opcja ta dzieli się na trzy zakładki:
 * Options – zakładka zawierająca spis opcji parametrów zapytania wraz z ich opisem.
 * Results – zakładka zawierająca opis rekordu wyświetlającego wynik wyszukiwania.
 * About – zakładka zawierająca informacje o aktualnej wersji programu oraz o autorze.

Lista pozostałych opcji:
 * Możliwość przerwania wyszukiwania, uzyskiwania informacji ze stron lub działania algorytmu w czasie rzeczywistym


 * ​Adres www aplikacji:** http://siwbt.lqnstudio.mydevil.net/


 * Status:** Ukończone.


 * Wykonane prezentacje: **
 * http://www.fizyka.umk.pl/~236412/bazy%20tekstowe.ppt
 * http://www.fizyka.umk.pl/~236412/bazy%20tekstowe%202.ppt
 * http://www.fizyka.umk.pl/~236412/bazy%20tekstowe%203.odp
 * http://www.fizyka.umk.pl/~236412/bazy%20tekstowe%204.odp

> > ędzi do przetwarzania tekstu używający lingwistyki. Służy głównie do wyszukiwania nazwisk osób, organizacji i miejsc w bazach tekstowych. LingPipe posiada moduł Named Entity Recognition, z którego będę przede wszystkim korzystał.
 * Linki: **
 * @http://www.google.com/cse/ - Konfiguracja niestandardowej wyszukiwarki
 * http://www.google.com/cse/manage/all - Panel wyszukiwarki niestandardowej
 * https://code.google.com/apis/console/ - Konsola API
 * https://www.googleapis.com/customsearch/v1?parameters - Link do wyświetlania informacji o szukanej frazie w formacie JSON lub XML
 * http://simplehtmldom.sourceforge.net/ - Strona frameworka simple_html_dom
 * http://siwbt.lqnstudio.mydevil.net/CSA/ - Link do przykładowych wyników wyszukiwania z zadeklarowaną wcześniej bazą danych serwisów informacyjnych (tu z rankingiem stron stworzonym przez Google)
 * [] - Link do oficjalnej strony narzędzia zajmującego się przetwarzaniem danych tekstowych
 * [] - SVN (system kontroli wersji) - dziennik zmian
 * http://siwbt.lqnstudio.mydevil.net/ - adres www aplikacji