[PL] 6 stopni powiązań do każdej informacji - zabawy ciąg dalszy
Kolejny update związany z zabawą "w Wikipedię".
Mój kod klasy pajączka został rozwinięty o mały dodatek cache'ujący:
public class WikiSpider
{
public string CoreUri = https://en.wikipedia.org;
public string CoreTemplate = "/wiki/{keyword}";
public string BannedWords = "Image:,Talk:,Special:,Main_Page,Portal:,Wikipedia:,Help:,#_ref,Template:";
public int DepthLimit = 3;
public event EventHandler OnCacheUpdate;
public event EventHandler OnCacheUse;
public List<string> GetLinks(string searchKey) { (…)}
public void UpdateCache(string rootSearchKey) {
if (!Directory.Exists(".\\Cache"))
{
Directory.CreateDirectory(".\\Cache");
}
UpdateCacheLevel(rootSearchKey, 0);
}
void UpdateCacheLevel(string search, int currentLevel) { (…) }
}
Jak widać dodane zostały dwie metody. UpdateCacheLevel jest w środku wywoływana rekursywnie tak głeboko w drzewie powiązań haseł jak wskazuje właściwość DepthLimit.
Generalnie dla poziomu do poziomu drugiego średnio hasła generują między 60 a 100 powiązań. Na poziomie trzecim jest to między 2500 a 10000. Idąc od hasła A i hasła B do trzeciego poziomu (w sumie badając czy istnieje obustronne połączenie wychodzi 6 poziomów) dostajemy rozsądną ilość danych lokalnie, aby bez obciążania Wikipedii badać słuszność idei 6-degree.
Aktualny interfejs użytkownika w mojej aplikacji wygląda w tym momencie tak:
Wyrzuciłem wyświetlanie na ekranie znalezionych połączeń. Pod przyciskiem Update local cache jest podpięta funkcjonalność aktualizująca lokalny cache połączeń rozpoczynając od hasła wpisanego w pole "Start". To co zostaje to już naprawdę samo badanie ścieżki. :)
Bardziej już nie mogę ułatwić.
Cały czas podkreślam, że mój projekcik jest bardzo niedoskonały. Nie wychwytuje wielu adresów z wiki, które zawierają znaki specjalne. Nie uwzlędniłem wszystkich farmazonów także w cache'owaniu. Jeśli system plików z jakiegoś powodu nie pozwolił na zapisanie lokalnie pliku to próba jego nazwania została zapisana w pliku ~\errors.txt. Cache jest zapisany w ~\Cache\*. Każde hasło ma swój plik nazwany tytułem hasła. W środku jest lista odnośników jakie zawiera. To chyba tyle jeśli chodzi o wytłumaczenie co i jak.
Łukasz, Maciek: mam nadzieję, że powyższy kod przyspieszy waszą zabawę.
Inni: mam nadzieję, że zachęci do wystartowania.
Jeśli w ciągu najbliższego tygodnia nie dostanę choć jednej aplikacji, to pokusa ciekawości skusi mnie do dokończenia tej aplikacyjki, a wtedy może o nagrodę będzie już trzeba mocno negocjować :D
Źródła oczywiście w tym samym miejscu:
www.dbiesiada.com/projects/wikipathfinding/WikiPathFinder.WithCache.zip
W archiwum poza źródłami w binariach jest katalog cache wypełniony mapą odnośników do ok. 5200 haseł (~40MB po rozpakowaniu)
Życzę miłej zabawy w udoskonalaniu i rozwijaniu idei.
Technorati Tagi: Polish Posts,coding,geeks
Comments
Anonymous
January 22, 2008
Ja robię całkiem po swojemu ;) Może będzie trochę gorzej (duże obłożenie pamięci, choć w rezultacie jeszcze nie udało mi się przekroczyć 20 mb ram), ale stwierdziłem, że to musi być w pełni moja własna manufaktura ;) Do niedzieli obiecuję skończyć programik. Maciek -> powodzenia :)Anonymous
January 22, 2008
Cześć, Uff, cieszę się że konkurs dalej trwa. W zeszłym tygodniu zacząłem pisać rozwiązanie ale musiałem przerwać prace, żeby przygotować się do egzaminu z WPF (Beta jest otwarta tylko do jutra). Teraz mam nadzieję, że uda mi się skończyć przed niedzielą. Łukasz, Maciek - powodzenia! Nie mogę się doczekać żeby zobaczyć jak do tego podeszliście :-) -SzymonAnonymous
January 23, 2008
Ok, to moje rozwiązanie już wysłane - 3 nocka zarwana (ach ta matura!) na nim i gotowe :) Czekam teraz na wyniki ;) Szymon - dzięki i Tobie też powodzenia!Anonymous
January 24, 2008
Super! Maila otrzymalem. Aplikację sprawdzę wieczorem i coś mi się wydaje, ze mamy pierwszego nagrodzonego.Anonymous
January 24, 2008
To ładnie się tak bawić beze mnie? ;) Dzisiaj się zabrałem za dalszy rozwój pajączka i też już cache'uję, bo zaczynało mi być żal Wikipedii. ;) Czy Wy też od czasu do czasu dostajecie 403 forbidden z niektórych stron wikipedii, szczególnie zawierających nawiasy (disambiguation) lub kropki na końcu (Ltd.)? Z kodowaniem i bez kodowania uri zawsze dostaję te babole i nie wiem czy to zignorować.Anonymous
January 24, 2008
Maciej - tak też miałem ten problem. Podaj się za Firefoksa, a to rozwiąże Twój problem ;) Jeśli znasz troszeczkę niemiecki to poczytaj: http://board.gulli.com/thread/815487-c-webexception-bei-wikipedia/Anonymous
January 24, 2008
Danke danke! Teraz ściąga wszystko bez problemów! :)Anonymous
January 24, 2008
Program posłany! I brawa za poświęcenie dla Łukasza. ;)Anonymous
January 24, 2008
Ja zaczne dopiero w weekend. Daniel, zrób proszę jakiegoś deadline, bo tak kodować na tygodniu to ciężko. Pozdrawiam.