Zadanie #3693
Wygodne funkcje do pobierania kawałków tagów
Status: | Nowy | Start date: | 30 Jan 2012 | |
---|---|---|---|---|
Priority: | Normalny | Due date: | ||
Assignee: | Adam Radziszewski | % Done: | 0% | |
Category: | - | |||
Target version: | - |
Description
Zamierzam dodać kilka funkcji, które ułatwią korzystanie z tagsetu i tagów w corpus2.
W szczególności chodzi o możliwość uzyskania na podstawie tagu reprezentacji tekstowej jego klasy gramatycznej. W tej chwili można to zrobić w ten sposób:
# init #ts = corpus2.get_named_tagset(…) full_pos_mask = corpus2.get_attribute_mask(ts, '') # code using tag t1 t1_pos_mask = t1.get_masked(full_pos_mask) t1_pos_str = ts.tag_to_symbol_string(t1_pos_mask)
Czy macie jakieś preferencje odnośnie tej i podobnych convenience functions? Mi się przyda też wygodne pobieranie atrybutów jako masek, ale jeszcze nie przemyślałem, jak bym chciał to robić.
History
#1 Updated by Paweł Kędzia almost 12 years ago
Adam, a jak można sprawdzić czy przymiotnik jest zanegowany? ładny -> nieładny
Nie wiem czy innym taka funkcjonalność jest potrzebna, ale mi by się przydała, dlatego niekoniecznie musi trafić do zbioru przydatnych funkcji ;-)
E, z tego co widzę, to nie ma problemu ;-) A co z czasownikami?
#2 Updated by Adam Radziszewski almost 12 years ago
Generalnie to zależy od tagsetu. W KIPI i NKJP ta informacja odnośnie przymiotników nie jest kodowana w tagsecie (kodowana jest za to w przypadku imiesłowów, np. niejedzony — jeść / ppas:sg:nom:m1:imperf:*neg*).
W przypadku przymiotników można zrobić heurystykę, że jeśli się zaczyna od „nie”, to je zanegowany (oczywiście załapie się też „niedzielny” i „nietoperzopodobny”). Polecam użycie WCCL-a i operatora affix, np.:
equal(lower(affix(orth[0], 3)), ["nie"])
#3 Updated by Bartosz Broda almost 12 years ago
Dodatkowo można heurystykę wzbogacić o sprawdzenie, czy dane słowo po ucięciu 'nie' występuje w morfeuszu. Nie załatwi to problemu "niedzielny" (to zresztą wydawałoby się, że jest negacją od słowa 'dzielny' :P), ale już z nietoprzeopodony sobie poradzi :)
#4 Updated by Paweł Kędzia almost 12 years ago
Adam Radziszewski wrote:
Generalnie to zależy od tagsetu. W KIPI i NKJP ta informacja odnośnie przymiotników nie jest kodowana w tagsecie (kodowana jest za to w przypadku imiesłowów, np. niejedzony — jeść / ppas:sg:nom:m1:imperf:*neg*).
[...]
Właśnie chodzi mi o to, czy w sposób podobny do pobierania POS można wydobyć neg/aff
(np. dla imiesłowów)?
#5 Updated by Adam Radziszewski almost 12 years ago
Aaa… no to da się zrobić, ale faktycznie nie jest wygodne:
# init (assuming tagset defines those symbols) ngt_mask = tagset.parse_symbol('ngt') # negation attribute neg_mask = tagset.parse_symbol('neg') # negation value 'neg' aff_mask = tagset.parse_symbol( 'aff') # negation value 'aff' // using tag t1 t1_ngt_mask = t1.get_masked(ngt_mask) if t1_ngt_mask == aff_mask: print 'affirmative' elif t1_ngt_mask == neg_masl: print 'negated' else: print 'negation unspec'
#6 Updated by Paweł Kędzia almost 12 years ago
O takie coś właśnie mi chodziło, dzięki ;-)