[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ć :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