Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_semantic_wiki [2008/03/18 16:04] gjn |
pl:miw:miw08_semantic_wiki [2019/06/27 15:50] (aktualna) |
====== Opis ====== | ====== Opis ====== |
| __**Projekt zakończony**__ |
| |
Marcin Juszkiewicz, <monitorr@interia.pl> | Marcin Juszkiewicz, <monitorr@interia.pl> |
| |
| |
| |
====== Spotkania ====== | |
| ====== Projekt ====== |
| |
| ===== 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> | <code> |
</code> | </code> |
| |
swipl -f mojpliktymcz.pl -g 'spotkanie(X),write(X),halt.' | swipl -f mojpliktymcz.pl -g 'spotkanie(X),write(X),halt.' |
| |
===== 08.03.04 ===== | ====== Spotkania ====== |
* ogólnie: kto coś już z tym robił? | [[pl:miw:miw08_semantic_wiki:spotkania]] |
| |
- http://korrekt.org/papers/KroetzschVrandecicVoelkelHaller_SemanticMediaWiki_2007.pdf | |
- http://www.semanticwiki.com/ | |
- http://www2006.org/programme/files/xhtml/4039/xhtml/fp4039-voelkel.html | |
- http://argentera.inria.fr/wiki/data/Main/MainHome.jsp | |
| |
* przechowywanie wiedzy semantycznej w wiki | |
| |
- http://pediaview.com/openpedia/Resource_Description_Framework | |
- http://pediaview.com/openpedia/Web_Ontology_Language | |
| |
* przechowywanie //reguł// w wiki | |
- http://wiki.splitbrain.org/wiki:syntax | |
- http://kaukoluwiki.opendfki.de/wiki/SemanticWikiSyntax | |
- http://www.xml.com/pub/a/2006/12/13/semantic-wikis-and-disaster-relief-operations.html?page=2 | |
| |
| |
| |
| |
| |
===== 08.03.18 ===== | |
* plugin w php do dokuwiki, urucham po stronie serwera swiprolog | |
| |
- http://student.agh.edu.pl/~mjuszkie/miw.txt | |
- http://gollem.science.uva.nl/SWI-Prolog/Manual/compilation.html | |
| |
====== Projekt ====== | |
====== Sprawozdanie ====== | |
====== Materiały ====== | ====== Materiały ====== |
===== Wybrane Wikis ===== | ===== Wybrane Wikis ===== |