• Nie Znaleziono Wyników

Ekstrakcja WW metod ˛ a DM

W dokumencie Index of /rozprawy2/11029 (Stron 145-148)

13. Dodatek: Przegl ˛ ad funkcjonalno´sci projektu

13.4. Ekstrakcja WW metod ˛ a DM

13.4. Ekstrakcja WW metod ˛a DM

Główn ˛a funkcjonalno´sci ˛a projektu jest ekstrakcja WW. Na pocz ˛atek przedstawiona zostanie

naj-prostsza metoda DM (patrz rozdział 7). Bazuje ona bezpo´srednio na hasłach Wikipedii, wi˛ec baza raw

utworzona w podrozdziale 13.2 jest wystarczaj ˛aca. U˙zyjemy jednak bazy labels zawieraj ˛acej etykiety

semantyczne, poniewa˙z chcieliby´smy przetestowa´c równie˙z wariant DM, który bierze pod uwag˛e tylko hasła z etykietami.

W pierwszej kolejno´sci nale˙zy utworzy´c automat rozpoznaj ˛acy wzorce. Istnieje mo˙zliwo´s´c

bezpo´sred-niego utworzenia automatu dla podanych haseł. W tym przypadku mo˙zna wykorzysta´c wariantDeepMap,

który implementuje automat w postaci zagnie˙zd˙zonych słowników (patrz podrozdział 7.3). Automat

konstruujemy, tworz ˛ac obiekt klasydpm.DeepMap10. Utwórzmy wi˛ec automat odpowiadaj ˛acy przykładowi

z podrozdziału 7.3.

>>> dmap = dpm.DeepMap([u'Park Narodowy Glacier',

u'Park Decjusza',

u'Park Narodowy Glacier Bay'])

>>> dmap.count_dicts() # liczba u˙zytych słowników (obiektów dict)

9

>>> for cp in dmap.cps: print cp.p # wzorce słownikowe

...

"Park","park",WACA-park:1,wACA-park:1 "Narodowy",WCC-narodowy:1,WCC-narodowy:8

"Glacier" ,→

WACA-park:1,wACA-park:1 "Decjusza"

"Park","park",WACA-park:1,wACA-park:1 "Narodowy",WCC-narodowy:1,WCC-narodowy:8

"Glacier" "Bay" ,→

Powy˙zszy automat rozpoznaje tylko trzy wzorce. Podstawowy sposób u˙zycia polega jednak na utworzeniu

automatu rozpoznaj ˛acego wszystkie hasła Wikipedii. W tym wypadku zaleca si˛e u˙zywanie wariantu

MDBMap, który zapisuje automat do bazy danych LMDB. Pozwala to utworzy´c automat tylko raz, dzi˛eki czemu kilkuminutowa operacja nie musi by´c powtarzana po ponownym uruchomieniu systemu. Pozwala to równie˙z znacz ˛aco zmniejszy´c zu˙zycie pami˛eci.

# upewniamy si˛e, ˙ze pracujemy na bazie 'labels'

>>> db.cur()

('default', 'labels')

# utwórz automat o nazwie 'dm' dla wszystkich haseł Wikipedii

>>> dpm.MDBMap('dm', patdb.gen_wiki_words())

10

Nazwa modułu jest skrótem od dictionary pattern matching.

146 13.4. Ekstrakcja WW metod ˛a DM

W porównaniu zDeepMapkonstruuj ˛ac obiekt klasyMDBMappodajemy dodatkowo jako pierwszy argument

nazw˛e tworzonej bazy. W katalogudata/mdbpowinny pojawi´c si˛e pliki bazy danych automatu:

$ ls -lh data/mdb/pmutil*.mdb

-rwxrwxr-x 1 pch users 416M 03-09 16:28 data/mdb/pmutil-cps-dm.mdb -rwxrwxr-x 1 pch users 166M 03-09 16:28 data/mdb/pmutil-map-dm.mdb

Przedrostekpmutilw nazwach plików to nazwa modułu, który zawiera definicje odpowiednich klas

odpowiadaj ˛acych za zapis i odczyt bazy. Plikpmutil-cps-dm.mdbzawiera list˛e wzorców słownikowych,

natomiast plikpmutil-map-dm.mdb zawiera opis kolejnych przej´s´c automatu – dla ka˙zdego przej´scia

s−→ t kluczem w tabeli jest para (s, p), a warto´sci ˛p a – nowy stan t.

Tworzenie automatu jest na tyle typow ˛a operacj ˛a, ˙ze w modulepatdbzdefiniowano funkcje

pomocni-cze, które upraszczaj ˛a t˛e operacj˛e. Utwórzmy wi˛ec automaty odpowiadaj ˛ace kolejnym wariantom metody

DM przedstawionym w tabeli z wynikami 7.4.

# automat 'dm' identyczny jak poprzednio

>>> patdb.create_we_dmap('dm')

# automat 'dm-df' tylko dla wyrazów z etykiet ˛a semantyczn ˛a

>>> patdb.create_we_dmap('dm-df', require_df=True)

# automat 'dm-mse' dla heurystycznie wyznaczonych wzorców odmiany

>>> patdb.create_mse_dmap('dm-mse')

Wykorzystajmy teraz automat dm do ekstrakcji WW z przykładowego zdania. Do przeprowadzenia

ekstrakcji słu˙zy klasaMultiMatcher– implementuje ona algorytm 4 z podrozdziału 7.4.2. Posiada ona

metod˛e match, która wymaga podania obiektu klasy CorpusEntry, zawieraj ˛acego tekst, dla którego

przeprowadzana jest ekstrakcja. Obiekt ten mo˙ze zosta´c odczytany z bazy danych lub utworzony r˛ecznie. W poni˙zszym przykładzie utworzono go r˛ecznie – pozwala to na przetestowanie ekstrakcji bez modyfikacji

bazy danych. Wyniki równie˙z nie s ˛a zapisywane do bazy.

>>> ce = CorpusEntry(text=u'W Parku Narodowym Glacier Bay zamieszkuj ˛a zaj ˛ace ameryka´nskie')

,→

>>> pmap = dpm.MDBMap('dm') # wczytaj automat 'dm' z bazy LMDB

>>> mm = dpm.MultiMatcher(pmap) # utwórz obiekt wykonuj ˛acy ekstrakcj˛e

>>> mm.match(ce) # wykonaj ekstrakcj˛e

>>> info(mm.results) # wypisz wyniki ekstrakcji

W Parku Narodowym Glacier Bay

1 Parku Narodowym Glacier Bay

1 Park Narodowy Glacier Bay ACA-park:1 CC-narodowy:1,8 6 1

2 3

13.4. Ekstrakcja WW metod ˛a DM 147

1 Park Narodowy Glacier ACA-park:1 CC-narodowy:1,8 6

zamieszkuj ˛a zaj ˛ace ameryka´nskie

1 zaj ˛ace ameryka´nskie

1 zaj ˛ac ameryka´nski ABA-zaj ˛ac:1 CC-ameryka´nski:1,8 8,11,14 5

6 7 8

Format wypisywania wyników jest wart omówienia. Pod´swietlone fragmenty oznaczaj ˛a sekcje

(obiek-tySection– patrz podrozdział 7.5.1). Dla ka˙zdej sekcji wypisywana jest statystyka wyników sekcji

(obiektySectionResult). Wynik wybrany (dla którego pos = 0) wy´swietlany jest nazielono, a pozostałe

naczerwono. Przed ka˙zdym wynikiem wypisywana jest ocena danego wyniku (dla metody DM wynosi ona 1). Widzimy wi˛ec, ˙ze podobnie jak w przykładzie w podrozdziale 7.5.2 wybrano dłu˙zszy wynik “Parku Narodowym Glacier Bay”. Dla ka˙zdego z wyników sekcji pokazywana jest z kolei statystyka

wyników wyrazu (WordResult). Tutaj równie˙z mo˙ze wyst ˛api´c wiele pozycji11, a ocena wybranego wyniku

jest oznaczona kolorem zielonym.

Format wyniku wyrazu przeanalizujemy na przykładzie linii 3. Na pocz ˛atku wypisywane s ˛a segmenty

wyrazu – odmienne naniebiesko, a nieodmienne na czarno. W omawianym przypadku dwa pierwsze

segmenty s ˛a odmienne, a dwa kolejne nieodmienne. Nast˛epnie znajdziemy zapisan ˛a naró˙zowo list˛e

znaczników słownikowych (atrybut tags) poszczególnych segmentów. W opisywanym przykładzie na

ko´ncu znajduj ˛a si˛e dodatkowe spacje oznaczaj ˛ace dwa segmenty nieodmienne. Ostatnie pole to lista

roz-poznanych numerów form WW, zapisana koloremjasnoniebieskim. W tym przypadku hasło rozpoznano

w formie miejscownika l.poj. (forma nr 6).

Je˙zeli chcemy przeprowadzi´c rozpoznawanie na wi˛ekszym korpusie tekstu, wówczas najlepiej u˙zy´c

funkcjipatdb.dmatch, która pozwala na zrównoleglenie całego procesu i zapis wyników do bazy. Podczas

zapisu wykorzystywany jest dodatkowy atrybut iteration – dotyczy on wszystkich tabel zwi ˛azanych z

wynikami i pozwala na jednoczesny zapis w tej samej bazie wyników kliku ró˙znych operacji ekstrakcji. Domy´slnie ka˙zda nowa operacja ekstrakcji otrzymuje numer iteracji o 1 wi˛ekszy od poprzedniej. Dla

przykładu poka˙zemy, w jaki sposób mo˙zna przeprowadzi´c ekstrakcj˛e metod ˛a DM na kompletnym korpusie

notatek prasowychPAP. Korpus ten mo˙zna przekonwertowa´c do postaci bazy danych poni˙zsz ˛a funkcj ˛a –

musi on by´c jednak dost˛epny w katalogudata/corp.

>>> ptxt.create_pap_corpus()

>>> CorpusEntry.objects.filter(corpus='pap').count() # liczba notatek prasowych

51573

>>> db.cp('dm-test'); db.set('dm-test') # nowa baza danych dla testu

>>> pm.get_iteration(Word) # pobierz obecny numer iteracji

0

11

W omawianym przykładzie wyst˛epuje zawsze jeden wynik – nie jest to reguł ˛a.

W dokumencie Index of /rozprawy2/11029 (Stron 145-148)

Powiązane dokumenty