České vysoké učení technické v Praze Fakulta informačních technologií Katedra softwarového inženýrství Reranking založený na metadatech MI-VMW Projekt IV - 1 Pavel Homolka Ladislav Kubeš 6. 12. 2011 1
1 Popis projektu Cílem projektu je vytvoření aplikace umožňující vylepšené vyhledávání ve fotografiích uložených na serveru Flickr. Flickr poskytuje aplikační rozhraní umožňující získat prakticky libovolná data o fotografiích, která jsou přístupná i z oficiálního webového rozhraní. Cílem projektu je tedy aplikace, která umožní vyhledávání na flickru založené na klíčových slovech, stejně jako je tomu na Flickru nyní, ale navíc bude možné zadat sekundární vyhledávání na libovolná metadata. 1.1 Vstupy Vstupní data se zadávají ve dvou fázích. V první fázi si aplikace vyžádá klíčové slovo a počet výsledků jako povinné parametry a GPS souřadnice jako nepovinný parametr. V druhé fázi je pak možné zadávat metadata pro reranking. Aplikace implementuje reranking pro autora, název, tag, GPS souřadnice, datum uložení na Flickr a datum pořízení fotografie. 1.2 Výstupy Po první fázi jsou zobrazeny nesetříděné fotky tak, jak je vrátil Flickr. Uživatel zadá metadata pro reranking a aplikace fotografie setřídí. 2 Způsob řešení Pro implementaci rerankingu byly využity různé typy vzdáleností. Pro porovnání podobnosti dvou řetězců je využita editační vzdálenost (Levenshteinova vzdálenost). Pro vzdálenosti dvou bodů na zeměkouli je využita ortodroma (great circle distance). Pro porovnání dvou dat je využit algoritmus využívající Unixové časové razítko. 2.1 Editační vzdálenost Levenshteinova vzdálenost (Levenshtein distance, editační vzdálenost) je vzdálenost dvou řetězců definovaná jako minimální počet operací vkládání, mazání a substituce takových, aby po jejich provedení byly zadané řetězce totožné. Levenshteinovu vzdálenost zavedl v roce 1965 Vladimir Levenshtein. 2.2 Ortodroma 2.3 Algoritmus využívající Unixové časové razítko Porovnávaná data jsou převedena na Unix time stamp. Vzdálenost je vypočtena podle následujícího vzorce. distance = date 1 date 2 (1) 86400 2
3 Implementace Aplikace je implementována v PHP 5.3. Je postavena na návrhovém vzoru MVP (model, view, presenter) a využívá framework Nette. Komunikace s API Flickrem je řešena za pomoci volání REST zdrojů. 3.1 Model aplikace Model aplikace se skládá ze tří částí. Jak si mezi sebou tyto části vyměnují data, bude popsáno v části aplikační logika. 3.1.1 Komunikace s API Flickru Komunikaci s API zajišt uje třída Flickr, která obsahuje jednu veřejnou metodu search a dvě konstanty - API KEY sloužící k autorizaci na Flickru a FORMAT určující formát návratových dat. Třída Flickr není v aplikaci volána přímo, ale prostřednictvím systémového kontejneru. 3.1.2 Session Komunikace s Flickrem je časově náročná, proto není vhodné při každém třídění fotografií tuto komunikaci opakovat. Protože HTTP komunikace je bezestavová, aplikace si není schopna pamatovat své předchozí stavy. Proto aplikace využívá session, kterou reprezentuje třída PhotosSession. 3.1.3 Reranking O samotný reranking se stará třída Reranking obsahující tři veřejné metody: levenshtein- Distance - pro třídění řetězců, greatcircledistance - pro třídění podle GPS souřadnic a datedistance pro třídění pomocí dat. Ke své práci potřebuje třídu PhotosSession a o to, že ji bude mít k dispozici, se stará systémový kontejner. Třida není v aplikaci volána přímo, ale opět přes systémový kontejner. 3.2 Aplikační logika Celá aplikační logika je založena na MVP. Při příchodu na web aplikace zavolá Nette framework SearchPresenter. Ten zajistí rendrování formuláře pro zadání první fáze vstupních metadat od uživatele, viz kapitola 1.1. Vstupy. Poté co uživatel zadá vstupní data, požádá SearchPresenter přes systémový kontejner třídu Flickr, aby odeslala REST požadavek na server Flickru. Flickr vrátí množinu fotografií odpovídající zadaným metadatům. Tato množina je uložena do session prostřednictvím třídy PhotosSession. Následně SearchPresenter přesměruje uživatele na RerankingPresenter. Ten se v první řadě postará o zobrazení množiny fotografií uložených v session. Dále rendruje formulář pro zadání druhé fáze metadat a času komunikace s Flickrem. Nyní může uživatel zadávat metadata pro reranking. Každá fotografie v session se může nacházet v několika stavech. Algoritmus výběru ukazuje obrázek 1. Ve chvíli, kdy nedošlo ještě k žádnému třídění, není žádný stav definován. 3
Po odeslání požadavku na reranking zavolá RerankingPresenter opět přes systémový kontejner příslušnou metodu třídy Reranking. Např. pro řetězce je to levenshteindistance, která projde celou množinu fotografií a podle stavu, ve kterém se fotografie nachází, vypočítá vzdálenost a aktualizuje stav. Tento proces popisuje obrázek 1. Pokud fotografie nemá ještě žádný stav definovaný nebo má stav true, je spočtena vzdálenost od řetězce zadaného uživatelem. Tato vzdálenost je porovnána s rádiem. Pokud je zadaný rádius menší než vypočtená vzdálenost fotografie, je nastaven stav false. V opačném případě je nastaven stav true. Stav false znamená, že fotografie nesplňuje zadání a v dalším porovnávání s ní již není počítáno. Ve výsledném zobrazení skončí na posledních místech. Stav true znamená, že fotografie vyhovuje vstupním parametrům. Obrázek 1: Výběr stavu fotografie. Poté co tímto procesem projdou všechny fotografie množiny, jsou fotografie se stavem true seřazeny podle jejich vzdálenosti od nejmenší po největší. Takto setříděný seznam je uložen do session. Dále RerankingPresenter načte seznam ze session a předá ho view, který vytvoří HTML kód, který je odeslán na klienta. Celý tento proces již probíhá bez komunikace se serverem Flickru. Pokud uživatel zadá více metadat pro třídění, je množina tříděna v několika fázích. Fáze jsou vykonávané v pořadí Autor Název Tag GPS Datum. Do další fáze vstupují jen fotografie se stavem true. Uživatel má možnost kdykoliv se vrátit k zadání první fáze vstupních metadat tím, že vyplní formulář Nový dotaz. V tom případě je v množina v session smazána a nahrazena novou. 4
4 Příklad výstupu Jako příklad výstupu bude uveden obdobný případ jako v zadání. Dejme tomu, že chceme vyhledat auta podlíž prvního nádvoří Pražského hradu. Obrázek 2: První fáze zadání metadat. Obrázek 2 ukazeje vyplnění formulář pro zadání první fáze dat. Chceme vyhledat klíčové slovo car, počet výsledků maximálně 100 a pro upřesnění zadáme GPS souřadnici prvního nádvoří Pražského hradu s radiusem 5km. Kdybychom tuto poslední informaci nezadali prvděpodobně by mezi výsledky nebylo žadné auto v Praze. Obrázek 3: Výsledná množina vrácená Flickrem. Obrázek 3 ukazuje statistika výsledku - dotaz vrátil 100 fotografií, čas komunikace 3,01 s a první fotografii. Je vidět že ještě nemá definovaný stav. 5
Obrázek 4: Výsledek rerankingu pro GPS. Reranking podle GPS a přesností na 0,5 km ukazuje obrázek 4, jde o první fotografii. Od požadovaných souřadnic je vzdálená 44,5 m. Stav fotografie je true. Obrázek 5: Výsledek rerankingu pro autora. Pokud niní zadáme třídit podle autora Monika & Marek a s přesností 0 tj. ber v úvahu 6
pouze shodné řetězce. Dostaneme výsledek podle obrázku 5. Zde vidíme že forografie z obrázku 4 přešla do stavu false a na první místo se dostala fotografie atora Monika& Marek(forografie v levo). 5 Experimentální sekce 6 Diskuze Reference [1] Havlena, V. (1999). Moderní teorie řízení Doplňkové skriptum. Vydavatelství ČVUT, Praha. [2] Roubal, J.; Pekař, J. Moderní teorie řízení [online]. Poslední revize 2003-07-01 [cit. 2003-07-01], http://dce.felk.cvut.cz/mtr/. 7