Wykorzystanie Dbpedii Spotlight w pracy z danymi publicznymi

- autor: tsissput

Dominik Filipiak, 94419

Jak powszechnie wiadomo, w internecie można znaleźć wszelakie dane na rozmaite tematy. Ich katalogowanie jest obecnie niezwykle popularnym trendem, co generuje serwisy zbierające takie dane, a nawet kompleksowe rozwiązania takie jak CKAN [1]. Wykonano także wiele pracy, aby sklasyfikować takie dane. Przetwarzanie wejściowych danych na postać trójek RDF-owych to jeden z możliwych kierunków. Przyjrzyjmy się teraz jak w nadawaniu znaczeń może przydać nam się niezwykle ciekawy projekt, jakim jest DBpedia Spotlight. Wykorzystamy wcześniej wymienione technologie do transformacji plików CSV na RDF wzbogacanych o własności i ich wartości pobieranych jako zasoby z DBpedii.

DBpedia jest efektem próby usystematyzowania danych zebranych na Wikipedii. Poprzez ekstrakcję strukturalna crawler pobiera dane na temat każdego artykułu. Część informacji na Wikipedii jest usystematyzowana – specjalne pola, tzw. infoboksy da się łatwo mapować na RDF-owe trójki.

Screenshot 2013-11-10 18.25.25

Tak przetworzony artykuł trafia na DBpedię w postaci trójek:

Screenshot 2013-11-10 18.26.31

Projekt DBpedia spotlight dostarcza narzędzie pozwalające wyszukiwać w tekście zasobów znajdujących się na DBpedii. Narzędzie może być wykorzystane również do znajdowania kategorii odpowiadających zadanemu zbiorowi pojęć, co stanowi użyteczne narzędzie w temacie, którym dziś się zajmujemy. Pod adresem http://dbpedia-spotlight.github.io/demo/ znajduje się interaktywne demo możliwości tego systemu. Dla programisty kluczową funkcją jest jednak to, że zostało udostępnione publiczne wygodne REST-owe API służące do operowania na Spotlighcie. Serwisy oparte na wcześniej wspomnianym systemie CKAN służą do gromadzenia dużych zbiorów danych publicznych. Dzięki systemowi grupowania, tagów oraz linkowaniu zasobów w różnych formatach do zbiorów danych możliwe jest szybkie wydobywanie interesujących nas informacji. Programiści z pewnością docenią API, które pozwala w wygodny sposób operować na zgromadzonych zasobach. Część z danych udostępniona jest już w postaci RDF-owych trójek, część jako arkusze XLS, inne natomiast są zamieszczone jako proste pliki CSV.

Spróbujemy użyć projektu Spotlight przy przetwarzaniu plików z CSV. Przy wykorzystaniu API, odpytamy system o wszystkie zbiory związane z danymi w Wielkiej Brytanii:

http://publicdata.eu/api/search/dataset?q=tags:uk&all_fields=1

Otrzymamy listę wszystkich zbiorów związanych z Wielką Brytanią w formacie JSON. To, co nas interesuje to przede wszystkim zawarte tam linki do zasobów. Warto zauważyć, że pole res_format mówi nam o formacie zasobów. Tak więc po przefiltrowaniu odpowiedzi tak, żeby uzyskać tylko zasoby w formacie CSV otrzymamy zbiór linków z plikami do pobrania. Po ściągnięciu tych zbiorów możemy wykorzystać API projektu Spotlight do próby nadania polom znaczeń. Jak wiadomo, plik CSV to nic innego jak zwykły plik tekstowy, gdzie poszczególne rekordy oddzielone są przecinkami, a każdy wiersz wypisany jest w osobnej linii. Dodatkowo, jeżeli rekord zawiera znaki specjalne, to jest on ujęty w cudzysłów. Pierwsza linia zazwyczaj zawiera nagłówki kolumn, a pierwsze rekordy w kolejnych liniach to opcjonalne nagłówki wierszy. Załóżmy, że przy pracy z wybranym plikiem wiersz odpowiedzialny za nagłówki zawiera trzy kolumny: Poland, Great Britain oraz USA. Aby otrzymać linki do zasobów, należy zadać odpowiednie zapytanie:

http://spotlight.dbpedia.org/rest/annotate/?text=Poland+Great+Britain+USA

Spotlight rozpozna w zapytaniu trzy kraje. Teraz, mając wskaźniki na reprezentacje RDF-ową, można spróbować podjąć się klasyfikacji tych pojęć. W odpowiedzi na zapytanie otrzymujemy również zbiór typów przypisanych do wskazanego pojęcia. I tak, dla naszego przykładowego zapytania (dla słowa „Poland”), otrzymamy:

Screenshot 2013-11-10 19.04.32

Jak widać termin został słusznie rozpoznany jako kraj. Analogicznie jest dla pozostałych pojęć. Dzięki temu można np. spróbować oznaczyć kategorię nadrzędną w tabeli jako kraje, lub po prostu użyć tego wyniku przy transformacji tabel na format RDF. Wyszukiwanie zasobów tekście jest jednak niezwykle czasochłonne, co trzeba mieć na uwadze przy pracy z tak dużymi zbiorami jak wcześnie wspomniane publicdata.eu. Dlatego też istotne jest wybranie z wejściowego pliku tylko istotnych dla nas informacji. Człowiekowi łatwo jest ocenić co jest nagłówkiem, a co polem z danymi w pliku CSV. Aby zmaksymalizować szybkość automatycznego przetwarzania tych plików, należy napisać coś na kształt prostej heurystyki.

W artykule [3] podjęto się próby sprowadzenia tabeli w formacie CSV do postaci kanonicznego modelu. Wypunktowano też wiele związanych z tym problemów. Warto jednak zauważyć, że tamtejsze podejście nie zakłada występowania nagłówków wierszy, co generuje dodatkowe problemy. Najbardziej intuicyjną metodą przy wybieraniu pojęć jest odrzucenie pól z danymi – zazwyczaj są to liczby. Dlatego pierwszym krokiem jest określenie „wysokości” nagłówków kolumn oraz „szerokości” pół określających nagłówki wierszy. Niestety nie jest to zadanie proste, gdyż nie można zawsze założyć, że w polu na dane znajdować się będą tylko liczby. Czasem może być to tekst (np. „Not available”), lub też puste pole. Część kolumn może zawierać w sobie inne, co ma graficznie reprezentować relację podrzędności. Oczywiście jest to też aplikowane dla wierszy. Przy liniowym przetwarzaniu plików może to generować problemy związane z rozpoznawaniem wielkości, gdy np. kolumna „Kraj” będzie rozgałęziać się na „Polska” oraz „Anglia” – jak łatwo sobie wyobrazić, „Kraj” będzie miał szerokość równą 2, ale będzie zajmował tylko jedno pole, drugie natomiast będzie puste. Są to jednak problemy na poziomie implementacji rozwiązania programistycznego i jedynym ich odbiciem na całość jest zdecydowane spowolnienie działania. Wykorzystując prosty program do implementacji powyższego rozwiązania, spróbujmy teraz przetworzyć plik z danymi dotyczącymi straży pożarnej mieszczącej się w Londynie.

Screenshot 2013-11-10 19.27.39

Kolumny zostaną zmapowane na:

http://dbpedia.org/resource/Code

http://dbpedia.org/resource/Area

http://dbpedia.org/resource/Emergency

(…)

Natomiast wiersze zostaną zmapowane na:

http://dbpedia.org/resource/City_of_London

http://dbpedia.org/resource/London_Borough_of_Barking_and_Dagenham

http://dbpedia.org/resource/London_Borough_of_Barnet

http://dbpedia.org/resource/London_Borough_of_Bexley

http://dbpedia.org/resource/London_Borough_of_Brent

(…)

Dysponując takimi danymi mapowanie do postaci trójek jest znacznie prostsze i efektywniejsze, gdyż nie musimy tworzyć zasobów reprezentujących dzielnice Londynu, a możemy wykorzystać te już istniejące. Z taką reprezentacją wystarczy tylko odpytać Dbpedię o właściwości danego zasobu (np. poprzez zapytanie w języku SPARQL poprzez framework Apache Jena). Poniżej przykład zasobu w formacie .ttl:

<http:/cs.put.poznan.pl/data/fire_brigade#1>

rdf:type yago:LondonBoroughs ;

dbpprop:shortName „Camden”;

(…)

dbpprop:url „http://www.camden.gov.uk/”.

Spotlight nie jest oczywiście narzędziem doskonałym. Jest znane wiele przypadków, gdzie trudno jednoznacznie nadać znaczenie dla danego słowa. Dla przykładu, termin „Jaguar” można oznaczać znanego producenta samochodów, jak i również zwierze z rodziny kotowatych. Dlatego tak ważne jest rozpoznanie wg kontekstu. Struktura typów zbioru pojęć nie jest niestety drzewiasta, stanowi ona tzw. „siatkę”. Dobór algorytmu próbującego uogólnić taką strukturę jest kluczowy i stanowi obszerny temat na kolejny artykuł. Może zdarzyć się też tak, że program źle wywnioskuje z kontekstu nasze pojęcie. Dla przykładu, kiedy mówimy o krajach, z termem „Germany” związany jest zasób „West Germany”. Intuicyjnie wiemy, że znacznie trafniejszym wyborem byłby link kierujący nas do obecnych Niemiec, jednak dla analizatora nie jest to takie oczywiste. W prezentowanym podejściu zajęliśmy się zasobami w języku angielskim, ponieważ niestety nie jest jeszcze dostępna wersja projektu Spotlight przeznaczona do pracy z polskim językiem. Warto jednak śledzić temat, gdyż w przyszłości może to być niezwykle przydatny oręż w przetwarzaniu polskojęzycznych danych publicznych.

[1] http://ckan.org/

[2] https://github.com/dbpedia-spotlight/dbpedia-spotlight/wiki

[3] http://svn.aksw.org/papers/2013/ISemantics_CSV2RDF/public.pdf

 

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d blogerów lubi to: