Commit 9cc75e4c43555c9ffce32daddb1ca426f3349d7c

Authored by janek37
1 parent 1c9e4979

poprawione proponowanie automatycznych derywatów (adjnie)

dictionary/ajax_lexeme_view.py
@@ -418,11 +418,11 @@ def update_lexeme(request, form_data): @@ -418,11 +418,11 @@ def update_lexeme(request, form_data):
418 if new_lexeme: 418 if new_lexeme:
419 insert_new_lexeme(l, request) 419 insert_new_lexeme(l, request)
420 computed_derivatives = lexeme_derivatives(l) 420 computed_derivatives = lexeme_derivatives(l)
421 - crs = l.refs_to.values_list(  
422 - 'to_lexeme__entry', 'to_lexeme__part_of_speech_id') 421 + crs = l.refs_to.values_list('to_lexeme__entry', 'type__symbol')
423 cr_set = set(tuple(cr) for cr in crs) 422 cr_set = set(tuple(cr) for cr in crs)
424 needed_derivatives = [ 423 needed_derivatives = [
425 - d for d in computed_derivatives if (d['entry'], d['pos']) not in cr_set] 424 + d for d in computed_derivatives
  425 + if (d['entry'], d['cr_type']) not in cr_set]
426 return {'derivatives': needed_derivatives} 426 return {'derivatives': needed_derivatives}
427 427
428 428
@@ -434,20 +434,21 @@ def create_derivatives(request, lexeme_id, chosen_derivatives): @@ -434,20 +434,21 @@ def create_derivatives(request, lexeme_id, chosen_derivatives):
434 new_derivatives = {} 434 new_derivatives = {}
435 for der_data in chosen_derivatives: 435 for der_data in chosen_derivatives:
436 pos = der_data['pos'] 436 pos = der_data['pos']
  437 + cr_type = der_data['cr_type']
437 entry = der_data['entry'] 438 entry = der_data['entry']
438 if entry == '': 439 if entry == '':
439 raise AjaxError(_(u'Nie wpisano hasła')) 440 raise AjaxError(_(u'Nie wpisano hasła'))
440 new_lexemes = create_derivative( 441 new_lexemes = create_derivative(
441 - lexeme, pos, entry, pl=der_data.get('pl'), 442 + lexeme, pos, cr_type, entry, pl=der_data.get('pl'),
442 index=der_data['index']) 443 index=der_data['index'])
443 for der in new_lexemes: 444 for der in new_lexemes:
444 insert_new_lexeme(der, request) 445 insert_new_lexeme(der, request)
445 - new_derivatives[pos] = new_lexemes  
446 - chosen_poses = [der_data['pos'] for der_data in chosen_derivatives] 446 + new_derivatives[cr_type] = new_lexemes
  447 + chosen_types = [der_data['cr_type'] for der_data in chosen_derivatives]
447 if lexeme.part_of_speech_id == 'adj': 448 if lexeme.part_of_speech_id == 'adj':
448 - if 'adv' in chosen_poses and 'advcom' in chosen_poses:  
449 - adv = new_derivatives['adv'][0]  
450 - advcom = new_derivatives['advcom'][0] 449 + if 'adjadv' in chosen_types and 'adjadvc' in chosen_types:
  450 + adv = new_derivatives['adjadv'][0]
  451 + advcom = new_derivatives['adjadvc'][0]
451 adv.add_cross_reference(advcom, 'advcom') 452 adv.add_cross_reference(advcom, 'advcom')
452 advcom.add_cross_reference(adv, 'comadv') 453 advcom.add_cross_reference(adv, 'comadv')
453 return {} 454 return {}
dictionary/auto_derivatives.py
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 from django.db.models import Max 2 from django.db.models import Max
3 from dictionary.models import Ending, Lexeme, LexemeInflectionPattern, \ 3 from dictionary.models import Ending, Lexeme, LexemeInflectionPattern, \
4 - Pattern, Gender, LexemeAttributeValue 4 + Pattern, Gender, LexemeAttributeValue, LexemeAttribute
5 5
6 VOWELS = u'aeiouyąęó' 6 VOWELS = u'aeiouyąęó'
7 7
  8 +ADJ_POS = ('ppas', 'appas', 'pact', 'adjcom', 'nieadj')
  9 +
8 Ppact = Pattern.objects.get(name='P2') # hardcoded pattern 10 Ppact = Pattern.objects.get(name='P2') # hardcoded pattern
9 Pppas_ty = Pattern.objects.get(name='P4t') 11 Pppas_ty = Pattern.objects.get(name='P4t')
10 Pppas_ny_ni = Pattern.objects.get(name='P4') 12 Pppas_ny_ni = Pattern.objects.get(name='P4')
@@ -17,23 +19,25 @@ Pcom = Pattern.objects.get(name='P4zs') @@ -17,23 +19,25 @@ Pcom = Pattern.objects.get(name='P4zs')
17 Pndm = Pattern.objects.get(name='ndm') 19 Pndm = Pattern.objects.get(name='ndm')
18 n2 = Gender.objects.get(symbol='n2') 20 n2 = Gender.objects.get(symbol='n2')
19 f = Gender.objects.get(symbol='f') 21 f = Gender.objects.get(symbol='f')
  22 +ATTR_POPRZ = LexemeAttribute.objects.get(name=u'forma poprz.')
  23 +ATTR_ZLOZ = LexemeAttribute.objects.get(name=u'forma złoż.')
20 NO_POPRZ = LexemeAttributeValue.objects.get( 24 NO_POPRZ = LexemeAttributeValue.objects.get(
21 value=u'nieobecna', attribute__name=u'forma poprz.') 25 value=u'nieobecna', attribute__name=u'forma poprz.')
22 NO_ZLOZ = LexemeAttributeValue.objects.get( 26 NO_ZLOZ = LexemeAttributeValue.objects.get(
23 value=u'nieobecna', attribute__name=u'forma złoż.') 27 value=u'nieobecna', attribute__name=u'forma złoż.')
24 28
25 CR_TYPES = { 29 CR_TYPES = {
26 - 'pact': ('verpact', 'pactver'),  
27 - 'ppas': ('verppas', 'ppasver'),  
28 - 'appas': ('verppas', 'ppasver'),  
29 - 'ger': ('verger', 'gerver'),  
30 - 'osc': ('adjosc', 'oscadj'),  
31 - 'adv': ('adjadv', 'advadj'),  
32 - 'advcom': ('adjadvc', 'advcadj'), 30 + 'verpact': ('verpact', 'pactver'),
  31 + 'verppas': ('verppas', 'ppasver'),
  32 + # 'verappas': ('verppas', 'ppasver'),
  33 + 'verger': ('verger', 'gerver'),
  34 + 'adjosc': ('adjosc', 'oscadj'),
  35 + 'adjadv': ('adjadv', 'advadj'),
  36 + 'adjadvc': ('adjadvc', 'advcadj'),
33 'adjcom': ('adjcom', 'comadj'), 37 'adjcom': ('adjcom', 'comadj'),
34 - 'nieadj': ('adjnie', 'nieadj'),  
35 - 'nieadv': ('adjnie', 'nieadj'),  
36 - 'nieosc': ('adjnie', 'nieadj'), 38 + 'adjnie': ('adjnie', 'nieadj'),
  39 + 'advnie': ('adjnie', 'nieadj'),
  40 + 'oscnie': ('adjnie', 'nieadj'),
37 } 41 }
38 42
39 43
@@ -48,6 +52,7 @@ def ppas_data(lips, pos='ppas'): @@ -48,6 +52,7 @@ def ppas_data(lips, pos='ppas'):
48 for ending12 in endings12: 52 for ending12 in endings12:
49 yield { 53 yield {
50 'pos': pos, 54 'pos': pos,
  55 + 'cr_type': 'verppas',
51 'entry': lip.root + ending.string + 'y', 56 'entry': lip.root + ending.string + 'y',
52 'pl': lip.root + ending12.string, 57 'pl': lip.root + ending12.string,
53 'index': lip.index, 58 'index': lip.index,
@@ -62,6 +67,7 @@ def pact_data(lips): @@ -62,6 +67,7 @@ def pact_data(lips):
62 for ending in endings3: 67 for ending in endings3:
63 yield { 68 yield {
64 'pos': 'pact', 69 'pos': 'pact',
  70 + 'cr_type': 'verpact',
65 'entry': lip.root + ending.string + 'cy', 71 'entry': lip.root + ending.string + 'cy',
66 'index': lip.index, 72 'index': lip.index,
67 } 73 }
@@ -75,6 +81,7 @@ def ger_data(lips): @@ -75,6 +81,7 @@ def ger_data(lips):
75 for ending in endings11: 81 for ending in endings11:
76 yield { 82 yield {
77 'pos': 'ger', 83 'pos': 'ger',
  84 + 'cr_type': 'verger',
78 'entry': lip.root + ending.string + 'ie', 85 'entry': lip.root + ending.string + 'ie',
79 'index': lip.index, 86 'index': lip.index,
80 } 87 }
@@ -131,33 +138,37 @@ def lexeme_derivatives(lexeme): @@ -131,33 +138,37 @@ def lexeme_derivatives(lexeme):
131 yield data 138 yield data
132 elif lexeme.part_of_speech.symbol == 'adj': 139 elif lexeme.part_of_speech.symbol == 'adj':
133 # adjcom, adv, advcom, osc, nieadj 140 # adjcom, adv, advcom, osc, nieadj
134 - for pos in ('adjcom', 'adv', 'advcom'): 141 + pos_types = (
  142 + ('adjcom', 'adjcom'),
  143 + ('adv', 'adjadv'),
  144 + ('advcom', 'adjadvc')
  145 + )
  146 + for pos, cr_type in pos_types:
135 yield { 147 yield {
136 'pos': pos, 148 'pos': pos,
  149 + 'cr_type': cr_type,
137 'entry': None, 150 'entry': None,
138 'index': 1, 151 'index': 1,
139 } 152 }
140 yield { 153 yield {
141 'pos': 'osc', 154 'pos': 'osc',
  155 + 'cr_type': 'adjosc',
142 'entry': guess_osc(lexeme.entry), 156 'entry': guess_osc(lexeme.entry),
143 'index': 1, 157 'index': 1,
144 } 158 }
145 yield { 159 yield {
146 - 'pos': 'nieadj', 160 + 'pos': 'adj',
  161 + 'cr_type': 'adjnie',
147 'entry': make_negation(lexeme.entry), 162 'entry': make_negation(lexeme.entry),
148 'index': 1, 163 'index': 1,
149 } 164 }
150 165
151 166
152 -def create_derivative(lexeme, part_of_speech, entry, index, pl=None):  
153 - negation = part_of_speech.startswith('nie')  
154 - if negation:  
155 - pos = part_of_speech[3:]  
156 - else:  
157 - pos = part_of_speech 167 +def create_derivative(lexeme, part_of_speech, cr_type, entry, index, pl=None):
  168 + negation = cr_type.endswith('nie')
158 next_id = Lexeme.all_objects.aggregate(Max('id'))['id__max'] + 1 169 next_id = Lexeme.all_objects.aggregate(Max('id'))['id__max'] + 1
159 der = Lexeme.objects.create( 170 der = Lexeme.objects.create(
160 - id=next_id, entry=entry, part_of_speech_id=pos, 171 + id=next_id, entry=entry, part_of_speech_id=part_of_speech,
161 status=lexeme.status, owner_vocabulary_id=lexeme.owner_vocabulary_id, 172 status=lexeme.status, owner_vocabulary_id=lexeme.owner_vocabulary_id,
162 specialist=lexeme.specialist, 173 specialist=lexeme.specialist,
163 borrowing_source_id=lexeme.borrowing_source_id) 174 borrowing_source_id=lexeme.borrowing_source_id)
@@ -211,18 +222,20 @@ def create_derivative(lexeme, part_of_speech, entry, index, pl=None): @@ -211,18 +222,20 @@ def create_derivative(lexeme, part_of_speech, entry, index, pl=None):
211 for q in orig_lip.qualifiers.all(): 222 for q in orig_lip.qualifiers.all():
212 lip.qualifiers.add(q) 223 lip.qualifiers.add(q)
213 for attr, attr_val in lexeme.attributes_values(): 224 for attr, attr_val in lexeme.attributes_values():
214 - if attr_val and attr.parts_of_speech.filter(symbol=part_of_speech): 225 + if attr not in (ATTR_POPRZ, ATTR_ZLOZ) and attr_val \
  226 + and attr.parts_of_speech.filter(symbol=part_of_speech):
215 attr_val.add_lexeme(der) 227 attr_val.add_lexeme(der)
216 if part_of_speech in ('ppas', 'appas', 'pact', 'adjcom', 'nieadj'): 228 if part_of_speech in ('ppas', 'appas', 'pact', 'adjcom', 'nieadj'):
217 NO_POPRZ.add_lexeme(der) 229 NO_POPRZ.add_lexeme(der)
218 NO_ZLOZ.add_lexeme(der) 230 NO_ZLOZ.add_lexeme(der)
219 for q in lexeme.qualifiers.all(): 231 for q in lexeme.qualifiers.all():
220 der.qualifiers.add(q) 232 der.qualifiers.add(q)
221 - cr_to, cr_from = CR_TYPES[part_of_speech] 233 + cr_to, cr_from = CR_TYPES[cr_type]
222 lexeme.add_cross_reference(der, cr_to) 234 lexeme.add_cross_reference(der, cr_to)
223 der.add_cross_reference(lexeme, cr_from) 235 der.add_cross_reference(lexeme, cr_from)
224 new_lexemes = [der] 236 new_lexemes = [der]
225 - if part_of_speech in ('osc', 'adv'): 237 + if cr_type in ('adjosc', 'adjadv'):
226 new_lexemes.extend(create_derivative( 238 new_lexemes.extend(create_derivative(
227 - der, 'nie' + part_of_speech, make_negation(entry), index))  
228 - return new_lexemes  
229 \ No newline at end of file 239 \ No newline at end of file
  240 + der, part_of_speech, part_of_speech + 'nie', make_negation(entry),
  241 + index))
  242 + return new_lexemes
dictionary/static/js/lexeme-edit.js
@@ -432,11 +432,11 @@ $.extend(edit, { @@ -432,11 +432,11 @@ $.extend(edit, {
432 var label = $('<label/>').attr('for', name); 432 var label = $('<label/>').attr('for', name);
433 li.append(input).append(label).appendTo(ul); 433 li.append(input).append(label).appendTo(ul);
434 if (der_data.entry) { 434 if (der_data.entry) {
435 - label.text(der_data.pos + ', ' + der_data.entry); 435 + label.text(der_data.cr_type + ', ' + der_data.entry);
436 } else { 436 } else {
437 var der_input = $('<input/>').attr('type', 'text') 437 var der_input = $('<input/>').attr('type', 'text')
438 .addClass('derivative-input'); 438 .addClass('derivative-input');
439 - label.text(der_data.pos + ', '); 439 + label.text(der_data.cr_type + ', ');
440 li.append(der_input); 440 li.append(der_input);
441 } 441 }
442 }); 442 });