W poszukiwaniu metadanych dokumentów — PDF na początek

Dane (czy właściwie metadane) o dokumentach i publikacjach (zgromadzonych lokalnie lub dostępnych zdalnie) są drugą pokaźną grupą informacji wartych zgromadzenia obok (a może w ramach?) bazy RDF PIM. Posiadanie takich informacji w modelu RDF otwiera drogę do najróżniejszych zastosowań opartych na katalogu zasobów, z automatycznym wyszukiwaniem dokumentów na czele [1].

Większość publikacji, które mają jakiekolwiek znaczenie występuje (u mnie przynajmniej) w jednej z dwóch postaci: (X)HTML lub PDF. Indeksowanie, parsowanie i opisywanie dokumentów (X)HTML wydaje się stosunkowo proste, zwłaszcza jeśli autor tych dokumentów miał choć odrobinę wyobraźni i pojęcia na temat znaczenia poszczególnych składników takiego dokumentu. W końcu (X)HTML jest z definicji przeznaczony do parsowania, a im większy nacisk na X, tym więcej sposobów przetwarzania i potencjalnych możliwości. Ciekawsze natomiast (na dziś) wydaje mi się znalezienie sposobu na „ugryzienie” (poindeksowanie, opisanie) dokumentów PDF.

Java w służbie ludzkości

W ramach rozpoznawania narzędzi do rzeczy różnych i przekonywania samego siebie, że Java faktycznie jest tyle warta ile o niej mówią, trafiłem niedawno na bibliotekę PDFBox. Daje ona sporo ciekawych możliwości tworzenia i obróbki plików PDF, a z punktu widzenia problemu postawionego powyżej umożliwia również banalnie prosty odczyt informacji o dokumencie. Tak się składa (nie wnikam czy przypadkiem ;-)), że najpoważniejsze frameworki Sieci Semantycznej napisane są w Javie. Zatem rozwiązanie nasuwa się samo: program wyciągający (meta)dane z dokumentów PDF i zapisujący je w jakiejś postaci modelu RDF napisany w Javie powinien się sprowadzać do wywołania kilku prostych metod.

I faktycznie — przykładowy program realizujący to zadanie (z wykorzystaniem bibliotek PDFBox i Jena) mógłby wyglądać jakoś tak: pdf2rdf.java. W ramach testu wypisuje on otrzymany graf RDF na ekranie (w 2 serializacjach, tak dla porównania), ale mógłby przecież zrobić z nim cokolwiek innego, np. wrzucić do bazy RDF albo dodać do jakiegoś większego modelu. W końcu Jena potrafi z RDF-em robić wszystko, czego zapragniesz.

Przykładowy wynik działania:

*** RDF/XML:

<rdf:RDF
xmlns:pdf="http://ns.adobe.com/pdf/1.3/"
xmlns:dct="http://purl.org/dc/terms/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<rdf:Description rdf:about="file:///home/mimas/semweb/www/D13_v1-0.pdf">
<pdf:Title>A survey on ontology tools</pdf:Title>
<pdf:Keywords>OntoWeb Ontology Tool</pdf:Keywords>
<pdf:Creator>D13_v1-0.doc - Microsoft Word</pdf:Creator>
<dc:format>application/pdf</dc:format>
<pdf:CreationDate>2002.05.31 16:33:20</pdf:CreationDate>
<pdf:Author>Asunción Gómez-Pérez, Oscar Corcho</pdf:Author>
<pdf:Producer>Acrobat PDFWriter 4.0 para Windows NT</pdf:Producer>
<pdf:Subject>Ontoweb Deliverable 1.3</pdf:Subject>
<dc:subject>Tool</dc:subject>
<dc:subject>OntoWeb</dc:subject>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/Text"/>
<dc:subject>Ontology</dc:subject>
</rdf:Description>
</rdf:RDF>

*** N3:

@prefix pdf: <http://ns.adobe.com/pdf/1.3/> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <#> .
@prefix dct: <http://purl.org/dc/terms/> .

<file:///home/mimas/semweb/www/D13_v1-0.pdf>
pdf:Author "Asunción Gómez-Pérez, Oscar Corcho" ;
pdf:CreationDate "2002.05.31 16:33:20" ;
pdf:Creator "D13_v1-0.doc - Microsoft Word" ;
pdf:Keywords "OntoWeb Ontology Tool" ;
pdf:Producer "Acrobat PDFWriter 4.0 para Windows NT" ;
pdf:Subject "Ontoweb Deliverable 1.3" ;
pdf:Title "A survey on ontology tools" ;
dc:format "application/pdf" ;
dc:subject "Tool" , "OntoWeb" , "Ontology" ;
dc:type <http://purl.org/dc/dcmitype/Text> .

No i ślicznie. Wystarczy teraz zassać wszystkie pliki PDF do wspólnego modelu RDF i mam gotowy katalog, który mogę przeszukiwać (osobiście ja lub jakiś agent w moim imieniu) klasycznymi narzędziami Sieci Semantycznej bez konieczności posiadania jakichkolwiek specjalistycznych programów katalogowych. Czyli np. za pomocą zapytań SPARQL via ARQ podobnie i równie łatwo jak to robiłem z kontaktami i kalendarzem.

z pustego i Salomon...

Niestety chwilę później następuje dokładnie to samo co zawsze — rozczarowanie niską jakością opisów w większości plików PDF jakie zbadałem... Co z tego, że istnieje stosunkowo prosty sposób poindeksowania PDF-ów i zebrania ich metadanych w postaci gotowej do wykorzystania w dowolnym modelu RDF, skoro w większości plików tych metadanych po prostu nie ma. Autorzy publikacji przeważnie nie są tak porządni jak to widać na przykładzie powyżej i nie tracą swojego (cennego zapewne) czasu na opisywanie własnego dokumentu. Albo, co jeszcze gorsze lecz równie prawdopodobne, używają narzędzi nie dających możliwości zapisania tych informacji. A z pustego to i Salomon ma kłopoty... :-/

[1] Skojarzenie z projektami typu Semantic Desktop, czy chociażby z zabawkami w rodzaju Google Desktop jest tu oczywiście jak najbardziej na miejscu.

Komentarze

#1 | 2006.03.10 09:55 | gshegosh

z pustego i Salomon...

Tu jest pytanie, które ciągle sobie zadaję, czytając Twoje - skąd inąd ciekawe - artykuły o Semantic Web. Czy ten brak metadanych jest do przeskoczenia? Ludzie są leniwi, tacy jak ja (którzy np. wszystkie swoje kilka tysięcy fotografii mają poindeksowane i opisane) czy Ty to raczej wyjątki.

Mnie się wydaje, że dopóki nie stworzymy algorytmów na tyle inteligentnych, by mogły "udawać, że rozumieją" treść dokumentów, marzenie o wyszukiwaniu semantycznym pozostanie tylko mrzonką :(

#2 | 2006.03.10 10:32 | MiMaS

W jakim sensie miałyby „udawać, że rozumieją”? Chodzi Ci o jakąś sztuczną inteligencję czy coś takiego? Właśnie to jest mrzonką, IMHO... Zacytuję po raz kolejny Tima B-L:

Leaving aside the artificial intelligence problem of training machines to behave like people, the Semantic Web approach instead develops languages for expressing information in a machine processable form.

Czyli przetwarzanie informacji podanej przez człowieka. I ja się z tym zgadzam — osobiście nie zaufałbym algorytmowi wnioskującemu na podstawie faktów, które sam sobie jakoś wydedukował „z sufitu”. Co innego logiczne konsekwencje faktów podanych przez człowieka (autora jakiegoś zasobu, np. w formie metadanych).

#3 | 2006.03.10 21:36 | {o}

Czyli ludzie są zbyt leniwi, a maszyny zbyt głupie. I co dalej?

#4 | 2006.03.11 14:23 | karol o.

podważałbym wogóle sens stosowania pdf do zapisu informacji w sieci.
PDF dla dokumentów przeznaczonych *tylko* do druku (a to raczej jest mało prawdopodobne) - ok. ale jeśli ma być i tu i tu - to wystarczy xml (xhtml/mathml/inkml). no i zawsze można użyć konwertera xml->pdf (jak ktoś b. chce)

#5 | 2006.03.13 07:51 | MiMaS

podważałbym wogóle sens stosowania pdf do zapisu informacji w sieci.

Ja również. I dlatego nie piszę nigdzie nic co by sugerowało, że umieszczenie informacji w sieci w postaci plików PDF ma sens.

Natomiast faktem jest, że większość publikacji naukowych, ogólnie rzecz biorąc akademickich, materiałów z konferencji itp itd. jest publikowana w PDF-ach. Tak samo niektóre książki. Mam takich plików na dysku sporo. Powyższy wpis dotyczy stworzenia modelu RDF zawierającego katalog takich plików właśnie, a nie publikacje samych plików w sieci. Natomiast publikacja RDF-a w sensie metadanych o zgromadzonych gdzieś plikach to już inna sprawa i to ma sens jako katalog online.

#6 | 2006.03.13 11:28 | gshegosh

W jakim sensie miałyby „udawać, że rozumieją”? Chodzi Ci o jakąś sztuczną inteligencję czy coś takiego? Właśnie to jest mrzonką, IMHO...

Oczywiście, powstanie czegoś w rodzaju Głębokiej Myśli nie jest kwestią najbliższych lat ;)
Pisząc o algorytmach potrafiących "udawać, że rozumieją" mam na myśli algorytmy, które przynajmniej część brakujących metadanych potrafiłyby wydedukować z treści dokumentu.
Taki algorytm oczywiście nie jest banalny, ale z pewnością nie jest też niemożliwy do skonstruowania; zacząłbym od tego, by nauczyć przeszukiwarki "patrzenia" na strony (X)HTML przez silnik renderujący zamiast prostej analizy syntaktycznej.
Przynajmniej część narzędzi do takich spraw już mamy - poczynając od najzwyklejszych OCRów, a kończąc na online'owych zabawkach analizujących "wizualny flow" na danej stronie WWW i próbujących odgadnąć jak na taką stronę patrzy człowiek.
Wyniki wyszukiwania w takich Google'ach byłyby przy takiej analizie np. nieco trudniejsze do sterowania przez oszustów - bo umieszczenie białych słów kluczowych na białym tle nie miałoby wpływu na algorytm przeszukujący. "Mądre" Google nie potrafi nawet czegoś tak prostego wykryć.

Wydaje mi się, że to o czym piszę niekoniecznie musi być wrogiem SW, a może stanowić ciekawe uzupełnienie.
Uważam, że SW nigdy nie przekroczy punktu krytycznego, za którym nieumieszczenie RDFa w danym serwisie skaże go na niebyt (bo zginie wśród innych źródeł informacji, które RDF publikują). Dlatego SW nie obejdzie się bez wsparcia algorytmów, które część metadanych uzupełnią, a może nawet dynamicznie poprawią, na podstawie "surowej" treści dokumentu.

#7 | 2006.03.13 11:30 | gshegosh

Uważam, że SW nigdy nie przekroczy punktu krytycznego

ATSD, T.B.Lee samo WWW też sobie kiedyś inaczej wyobrażał, niż to co z sieci wyszło :(

#8 | 2006.03.13 11:55 | MiMaS

Uważam, że SW nigdy nie przekroczy punktu krytycznego, za którym nieumieszczenie RDFa w danym serwisie skaże go na niebyt

„Uważam” to w tym kontekście dosyć mocne słowo. Kiedyś uważano, że tramwaje w wielkich miastach nie mają przyszłości ze względu na „zatkanie” miasta ogromnymi ilościami odchodów pozostawianych przez ciagnące tramwaj konie. A jednak coś się udało wymyślić ;-)
Ale poważnie(j) — mógłbym się zgodzić z „obawiam się”...

#9 | 2006.03.13 12:48 | ffreak

osobiscie nie zaufalbym algorytmowi wnioskujacemu na podstawie faktow, ktore sam sobie jakos wydedukowal "z sufitu". Co innego logiczne konsekwencje faktow podanych przez czlowieka (autora jakiegos zasobu, np. w formie metadanych).

a zaufałbyś, gdyby do tej dedukcji pomocniczo użył informacji wyciągniętych z tych kilku kropel sieci semantycznej? bo na podstawie tych pewnych danych można by już całkiem skutecznie przeszukwiać sieć nawet za pomocą obecnych narzędzi i słow kluczowych.. wystarczyłoby, żeby każde oficjalne, czy też liczące się źrodło informacji opublikowało metadane. Pozostałych zresztą i tak nie da się do tego zmusić doputy popularne nie staną się narzedzia wyszukujące zupełnie innego (SW) typu.

Wydaje mi się, że mogłby to być pomysł na stosunkowo prostą, wykonalną już teraz, a całkiem ciekawą "nakładkę na googla".

#10 | 2006.03.13 12:50 | ffreak

Tzn. obyć można by się i bez tych "oficjalnych i liczących" się źrodeł, ale gdyby je mieć, to można by zacząć mowić o bardzo precyzyjnych wynikach.

#11 | 2006.03.21 08:47 | ffreak

Wydaje mi się, że taką pierwszą (dużą) bazą wiedzy, semantyczną, mogła by być Wikipedia. Podejrzewam, że gdyby rządzący Wikipedią przynajmniej zalecili używanie RDF i udostępnili ku temu odpowiednie narzędzia, materiały ułatwiające ten proces, to bardzo wielu ludzi zaczęło by to robić. Kwestia przekonania ich (najpierw rządzących, a później piszących), że to ma sens i jest potrzebne.

 

Uwaga: Ze względu na bardzo intensywną działalność spambotów komentowanie zostało wyłączone po 60 dniach od opublikowania wpisu. Jeżeli faktycznie chcesz jeszcze skomentować skorzystaj ze strony kontaktowej.