[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 = http://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:

image


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ć 😀

Ź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: ,,

  

Comments (9)

  1. Łukasz says:

    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 🙂

  2. Szymon says:

    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 🙂

    -Szymon

  3. Łukasz says:

    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!

  4. Super!

    Maila otrzymalem. Aplikację sprawdzę wieczorem i coś mi się wydaje, ze mamy pierwszego nagrodzonego.

  5. macbirdie says:

    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ć.

  6. Łukasz says:

    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/

  7. macbirdie says:

    Danke danke! Teraz ściąga wszystko bez problemów! 🙂

  8. macbirdie says:

    Program posłany! I brawa za poświęcenie dla Łukasza. 😉

  9. Łukasz Przybyła says:

    Ja zaczne dopiero w weekend. Daniel, zrób proszę jakiegoś deadline, bo tak kodować na tygodniu to ciężko.

    Pozdrawiam.

Skip to main content