Zadanie #3693

Wygodne funkcje do pobierania kawałków tagów

Added by Adam Radziszewski over 7 years ago. Updated over 7 years ago.

Status:NowyStart date:30 Jan 2012
Priority:NormalnyDue 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 over 7 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 over 7 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 over 7 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 over 7 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 over 7 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 over 7 years ago

O takie coś właśnie mi chodziło, dzięki ;-)

Also available in: Atom PDF