Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:miw08_semantic_wiki [2008/02/22 15:39]
gjn propozycja realizacji semantic wiki w dokuwiki
pl:miw:miw08_semantic_wiki [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ====== Opis ====== ====== Opis ======
 +__**Projekt zakończony**__
 +
 Marcin Juszkiewicz,​ <​monitorr@interia.pl>​ Marcin Juszkiewicz,​ <​monitorr@interia.pl>​
  
  
-prolog wiki plugin, semantic wiki research, comparison+prolog wiki plugin, ​[[http://​en.wikipedia.org/​wiki/​Semantic_wiki|semantic wiki]] research, comparison 
  
-====== Spotkania ====== 
-===== 08.03.04 ===== 
-  * ogólnie: kto coś już z tym robił? 
-  * przechowywanie wiedzy semantycznej w wiki 
-  * przechowywanie //reguł// w wiki 
  
 ====== Projekt ====== ====== Projekt ======
-====== Sprawozdanie ======+ 
 +===== Pluginy do zainstalowania ===== 
 + 
 +   * {{:​pl:​miw:​swpfin.zip|:​pl:​miw:​swpfin.zip}} 
 +   * {{:​pl:​miw:​swpinputfin.zip|:​pl:​miw:​swpinputfin.zip}} 
 + 
 +===== Sprawozdanie ​===== 
 + 
 +   * Cel 
 +Celem projektu było stworzenie mechanizmu semantycznej wikipedii. 
 +Semantyczna wikipedia to taka która potrafi sama wyciągać „znaczenie” 
 +poszczególnych zdań, i tworzy linki (bądź wyciąga informacje) z innych 
 +stron, haseł zawartych w Wiki. W tym celu trzeba było zastosować,​ lub 
 +napisać maszynę wnioskującą. W moim projekcie rolę takiej maszyny pełni 
 +Prolog. Zostało obsłuzenie poszczególnych Tagów w wikipedii. Tak więc 
 +fakty będziemy wprowadzać kodem: 
 +<​code>​ 
 +<​swp>​fakt</​swp>​ 
 +</​code>​ 
 +Który następnie mozemy odczytać na dowolnej ilości stron. Aby 
 +zrealizować odczyt faktów naleŜy skorzystać z Tagu: 
 +<​code>​ 
 +<swp goal=”cel” scope=”przestrzen” /> 
 +</​code>​ 
 +Gdzie przestrzeń jest to zbiór stron, lub poszczególna strona z której 
 +fakty są w obrębie naszego zainteresowania. 
 +   * Realizacja 
 +Swój projekt zrealizowałem na bazie dwóch pluginów. W jednym 
 +nazwanym „swpinput” obsługuję zdarzenia wprowadzenia,​ lub zmiany 
 +jakiegoś faktu, w drugim „swp” obsługuję „wyciąganie” poszczególnych 
 +informacji z określonej przestrzeni. Takie podejście będzie uzasadnione na 
 +poziomie cacha. Cachowanie stron na poziomie Wiki było najpowaŜniejszym 
 +problemem z jakim miałem do czynienia podczas realizacji projektu. 
 +Problem polegał na tym iŜ strona która wyciągała dane informacje z innej 
 +strony była cachowana przez Wiki, natomiast na stronie z której pobierane 
 +był informacje, mogły one zostać zmienione. 
 +Zapisywanie faktów odbywa się w pluginie swpinput. Generalnie 
 +jedynym zadaniem tego pluginu jest zamiana Tagów  
 +<​code>​ 
 +<​swp></​swp>​  
 +</​code>​ 
 +w wyrenderowanej stronie na czcionkę koloru czerwonego, oraz usunięcie 
 +cachów plików które są zalezne od tego pliku (pobierają z niego informację,​ 
 +lub odczytują informacje takiego typu, jaki został właśnie zawarty w tym 
 +pliku). Dokładny opis działania cacha, oraz usuwania cacha przedstawię w 
 +późniejszych punktach. 
 +Odczytywanie faktów odbywa się w pluginie „swp”. W wpisanym 
 +Tagu <swp /> odnajdujemy parametr „scope” który określa przestrzeń 
 +plików w których będziemy odnajdywać fakty. We wszystkich plikach które 
 +znajdują się w danej przestrzeni szukamy Tagów <​code><​swp></​swp></​code>,​ zgodnie ze 
 +specyfikacją tekst wewnątrz tych Tagów jest faktem który zostanie przyjęty 
 +przez Prolog. Dodatkowo w pluginie SWP wprowadziłem stałą CHECK, jezeli jest ona ustawiona na 0, to fakty nie będą przechodziły walidacji, jeśli na 1, to wszystkie fakty będą sprawdzane przed wprowadzeniem. Wszystkie te fakty 
 +zapisujemy w pliku tmp.pl, a następnie uruchamiamy prolog z parametrem 
 +„goal” zgodnie ze wzorem: 
 +<​code>​ 
 +swipl -f tmp.pl -g \’'​.$goal.',​writeln(X),​fail.\'';​ 
 +</​code>​ 
 +Odpowiedź uzyskaną z Prolog wstawiamy na wyrenderowaną stronę w 
 +czcionce w kolorze zielonym. 
 +   * Koncepcja CACHE 
 +Aby dokładnie opisać moją koncepcje wprowadzę dwa pojęcia, pojęcie 
 +pliku zaleŜnego, jest to plik który wyciąga informację (czyli z Tagiem <​code><​swp goal= scope= /></​code>​). Oraz pliku corowego, będę tak nazywał plik który posiada 
 +wpisane fakty (w Tagach <​code><​swp></​swp></​code>​). 
 +Podczas renderowania pliku zaleznego w katalogu 
 +„plugins/​swp/​pages” jest tworzony plik w takiej samej postaci jak to się dzieje w wikipedii. Czyli np. strona o id test:test2 zostaje zapisana w plugins/​swp/​pages/​test/​test2.tpl. W pliku tym zawarte są informację o plikach corowych z których dana strona pobiera informacje, oraz parametr „goal”. 
 +W momencie kiedy któryś z plików corowych zostaje zmieniony,​ 
 +plugin „swpinput” sprawdza czy w którymś z wcześniej stworzonych plików 
 +nie pobiera informacji z tego pliku corowego, lub nie szuka podobnego faktu. 
 +JeŜeli taka sytuacja ma miejsce, to plik cacha pliku zaleznego jest usuwany, 
 +co wymusza jego ponowne wyrenderowanie (juz z aktualnymi danymi). 
 +   * Implementacja 
 +Aby zrealizować odpowiednio powyzsze cele musiałem napisać kilka 
 +funkcji, znajdują się one w pliku swpinput.php oraz swp.php. 
 +<​code>​ 
 +function _search($base='​data/​pages'​) // funkcja przeszukuję daną przestrzeń,​ 
 +oraz odnajduje wszystkie katalogi i pliki w tej przestrzenii 
 +function wyslij($pliki) //funkcja przeszukuje pliki podane jako parametr, 
 +szuka w nich Tagów <​swp></​swp>,​ a następnie wszystkie informacje 
 +między tymi tagami zapisuje do pliku tmp.pl 
 +function goal($c) // wykonuję w konsoli wywołanie prolog, z określonym 
 +jako parametr celem 
 +function save_core($files,​$goal=''​) // zapisuje informację o plikach 
 +zaleznych, z których plików corowych korzystają. 
 +function cache_delete($fakt='​fdsafas'​) // realizuje kasowanie cacha 
 +</​code>​ 
 +==== Podsumowanie ==== 
 +Podsumowując moje pluginy potrafią:​ 
 +   * Przyjmować fakty prologa, niezależnie czy z kropką na końcu czy bez co ułatwia prace. 
 +   * Walidować fakty prologa. 
 +   * Odnajdywać wszystkie fakty z zadanej przestrzeni,​ wprowadzić je do prologu, a następnie wyświetlić odpowiedź prologa na pytanie zadanie w parametrze goal. 
 +   * Zapisuje relacje pomiędzy stronami. 
 +   * Zapisuje cel jaki jest zadany prologowi na danej stronie, dzięki temu gdy pojawi się nowa strona z faktem który ​ odpowiada temu celowi, cache strony z tym celem jest usuwany. 
 + 
 +Jest nadal jednak kilka elementów nad którymi należało by się zastanowić. 
 +   * Walidacja faktu prologu jest dość skomplikowanym procesem, fakt musi być zapisany w jakimś pliku, później zostaje uruchomiony w prologu, i patrzymy jaka jest odpowiedź z prologa. Można pomyśleć nad jakimś szybkim parserem prologa. Jest to o tyle konieczne, ponieważ jeżeli w pliku z faktami będzie choćby jeden wprowadzony błędnie fakt, to nie otrzymamy odpowiedzi z prologa. 
 +   * Można również zastosować wyrażenia regularne w parametrze scope. Nie jest to trudne zadanie do zrobienia, natomiast mogą występować z tym kłopoty przy dużej ilości plików (trzeba sprawdzić czy każdy jeden plik, pasuje do tego wyrażenia). 
 + 
 +<​code>​ 
 +<​swp>​ 
 +spotkanie(data(3.4.8)). 
 +</​swp>​ 
 + 
 +<swp goal="​spotkanie(X)"​ scope="​pl:​miw"/>​ 
 +</​code>​ 
 + 
 +  swipl -f mojpliktymcz.pl -g '​spotkanie(X),​write(X),​halt.'​ 
 + 
 +====== Spotkania ​====== 
 +[[pl:​miw:​miw08_semantic_wiki:​spotkania]]
 ====== Materiały ====== ====== Materiały ======
 +===== Wybrane Wikis =====
 +  * [[http://​semantic-mediawiki.org/​|SemanticMediaWiki]]
 +  * [[http://​ikewiki.salzburgresearch.at/​|Ike Wiki]]
 +  * [[http://​argentera.inria.fr/​|SweetWiki]]
 +
 ===== Propozycja Dr Wojnickiego ===== ===== Propozycja Dr Wojnickiego =====
 To support AI teaching process and idea of a Semantic Wiki based on Prolog emerged. To support AI teaching process and idea of a Semantic Wiki based on Prolog emerged.
pl/miw/miw08_semantic_wiki.1203691163.txt.gz · ostatnio zmienione: 2019/06/27 15:58 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0