Commit 13420a2febbecda902ba60a98caad412291d7d75

Authored by Katarzyna Krasnowska
1 parent 3aca112b

added reporting import problems, added position/phrase selection in syntax web UI

connections/models.py
... ... @@ -16,6 +16,7 @@ class Entry(models.Model):
16 16 schemata_count = models.PositiveIntegerField(null=False, default=0)
17 17 frames_count = models.PositiveIntegerField(null=False, default=0)
18 18 lexical_units_count = models.PositiveIntegerField(null=False, default=0)
  19 + import_error = models.BooleanField(default=False)
19 20  
20 21 class Meta:
21 22 ordering = ['name']
... ...
entries/phrase_descriptions/descriptions.py
... ... @@ -260,6 +260,9 @@ def make_phraseologisms(phrase, function, negativity, attrs={}, controller=None,
260 260 # TODO merge LexNP with LexPrepNP/LexPrepGerP?
261 261 if ptype == LexNP:
262 262 case = phrase._np._case._value
  263 + if case == 'agr':
  264 + # nom for e.g. ‹ktoś żądny czegoś›
  265 + case = attrs['case'] if 'case' in attrs else 'nom'
263 266 POS = lambda lemma: correct_pos(lemma, 'subst')
264 267 NUM = lambda lemma: correct_num(lemma, phrase._number)
265 268 CASE = correct_case(case, function, negativity)
... ... @@ -348,9 +351,14 @@ def make_phraseologisms(phrase, function, negativity, attrs={}, controller=None,
348 351 if phrase2._case._value == 'pred':
349 352 assert(controller)
350 353 assert(controller_grammar)
351   - function = controller._function._value if controller._function else None
352   - control = True
  354 + #function = controller._function._value if controller._function else None
  355 + #control = True
353 356 CASE = correct_case(phrase2._case._value, function, negativity)
  357 + # np. uczynić coś *jakimś* / kobietę *jakąś*
  358 + # TODO czy są sytuacje, kiedy jest kontrola, ale nie powinniśmy jej w ten sposób uwzględniać?
  359 + if controller:
  360 + function = controller._function._value if controller._function else None
  361 + control = True
354 362 if phrase._number == 'agr' and 'num' in attrs:
355 363 num = attrs['num']
356 364 assert (num != 'agr')
... ... @@ -387,6 +395,9 @@ def make_phraseologisms(phrase, function, negativity, attrs={}, controller=None,
387 395 # ktoś rozpoznaje kogoś *jako jakiegoś* (kontrola przez dopełnienie)
388 396 assert(controller)
389 397 assert(controller_grammar)
  398 + # np. uznawać kogoś *za jakiegoś* / coś *za jakieś* / facetów *za jakichś*
  399 + # TODO czy są sytuacje, kiedy jest kontrola, ale nie powinniśmy jej w ten sposób uwzględniać?
  400 + if controller:
390 401 function = controller._function._value if controller._function else None
391 402 control = True
392 403 if control:
... ...
entries/phrase_descriptions/morph_generation.py
1 1 import morfeusz2
2 2  
  3 +class MorphologyError(Exception):
  4 + pass
  5 +
3 6 morfeusz = morfeusz2.Morfeusz(generate=True, analyse=False, expand_tags=True)
4 7  
5 8 LEMMA_KILL_LIST = {
... ... @@ -441,7 +444,6 @@ def select_form(lemma, feats):
441 444 selected_forms = filtered_forms
442 445 selected_orth_tags = set((f[0], f[2]) for f in selected_forms)
443 446 if len(selected_orth_tags) != 1:
444   - print('----------', lemma, feats)
445   - print(selected_forms)
446   - 1 / 0
  447 + #print('----------', lemma, feats)
  448 + raise MorphologyError(str(selected_forms))
447 449 return selected_orth_tags.pop()
... ...
entries/phrase_descriptions/utils.py
... ... @@ -4,7 +4,7 @@ import re
4 4  
5 5 from importer.Phrase import *
6 6  
7   -from .morph_generation import select_form
  7 +from .morph_generation import MorphologyError, select_form
8 8  
9 9 PRE, POST = 0, 1
10 10 def build_phrase(head, dep, head_type, dep_type, order_override=None):
... ... @@ -50,8 +50,7 @@ def build_phrase(head, dep, head_type, dep_type, order_override=None):
50 50 if order == POST:
51 51 return '{} {}'.format(head, dep)
52 52 else:
53   - print('***', head, dep, head_type, dep_type)
54   - 1/0
  53 + raise RuntimeError('couldn’t build phrase: {} {} {} {}'.format(head, dep, head_type, dep_type))
55 54  
56 55 def correct_lemma(lemma):
57 56 # TODO see notes
... ... @@ -195,15 +194,16 @@ def get_forms(lemma, feats):
195 194 lemma_feats = [f(lemma) if hasattr(f, '__call__') else f for f in feats]
196 195 lemma_feats = [[f] if type(f) == str else f for f in lemma_feats]
197 196 ret = []
  197 + errors = []
198 198 for feats in product(*lemma_feats):
199 199 try:
200 200 ret.append(select_form(lemma, feats))
201   - except:
202   - pass
  201 + except MorphologyError as e:
  202 + errors.append(str(e))
203 203 if ret:
204 204 #print('get_forms', lemma, feats, ret)
205 205 return ret
206   - 1/0
  206 + raise MorphologyError('couldn’t select form: {}'.format(' + '.join(errors)))
207 207  
208 208 WOK_PREP = {
209 209 'bez' : ('^mn',), # beze mnie
... ...
entries/static/entries/css/entries.css
... ... @@ -45,6 +45,10 @@ legend {
45 45 background-color: #c8c8c8;
46 46 }
47 47  
  48 +.position.active, .phrase.active {
  49 + background-color: #acacac;
  50 +}
  51 +
48 52 .schema.active {
49 53 background-color: #c8c8c8;
50 54 }
... ... @@ -168,3 +172,8 @@ legend {
168 172 margin-bottom: 2px;
169 173  
170 174 }
  175 +
  176 +.frame.highlight .lemma, .example-role .lemma, .frame.active .lemma, .phrase.lemma {
  177 + background-image: url("/static/entries/img/lemma.png");
  178 + background-repeat: repeat;
  179 +}
... ...
entries/static/entries/js/entries.js
... ... @@ -49,7 +49,8 @@ function schema2dom(schema) {
49 49 var position = schema.positions[i];
50 50 // position props: function, control, predicative control
51 51 var props_td = document.createElement('td');
52   - props_td.className = 'py-2 px-1 border-top border-left border-secondary';
  52 + props_td.className = 'position py-2 px-1 border-top border-left border-secondary';
  53 + props_td.dataset.position_id = position.id;
53 54 var props_spans = [];
54 55 if (position.func.str !== '') {
55 56 props_spans.push(tooltipped_span(position.func.str, position.func.desc, null));
... ... @@ -254,21 +255,94 @@ function select_schema(schema) {
254 255 // TODO bind position and phrase clicks and opinion click for unselect
255 256 //bind_arguments_click(frame);
256 257 //bind_frame_opinion_click(frame);
  258 + schema.find('.opinion-row').mouseenter(function(event) {
  259 + show_info(gettext('Kliknij, aby cofnąć wyświetlanie przykładów dla tego schematu.'));
  260 + event.stopPropagation();
  261 + }).mouseleave(function() {
  262 + clear_info();
  263 + }).click(function(event) {
  264 + event.stopPropagation();
  265 + unselect_schema(schema);
  266 + clear_info();
  267 + });
  268 + schema.find('.position, .phrase').mouseenter(function() {
  269 + var is_position = $(this).hasClass('position');
  270 + if ($(this).hasClass('active')) {
  271 + show_info(gettext('Kliknij, aby cofnąć ograniczenie wyświetlanych przykładów do powiązanych z') + ' ' + (is_position ? gettext('tą pozycją') : gettext('tą frazą')) + '.');
  272 + } else {
  273 + show_info(gettext('Kliknij, aby wyświetlić wyłącznie przykłady powiązane z') + ' ' + (is_position ? gettext('tą pozycją') : gettext('tą frazą')) + '.');
  274 + }
  275 + $(this).addClass('bg-highlight');
  276 + event.stopPropagation();
  277 + }).mouseleave(function() {
  278 + $(this).removeClass('bg-highlight');
  279 + clear_info();
  280 + }).click(function(event) {
  281 + event.stopPropagation();
  282 + var active = $(this).hasClass('active');
  283 + if (active) {
  284 + $(this).removeClass('active');
  285 + } else {
  286 + $(this).addClass('active');
  287 + }
  288 + // other restrictions might be active
  289 + restrict_syntax_examples();
  290 + clear_info();
  291 + });
257 292 }
258 293  
259 294 function unselect_schema(schema) {
260 295 // TODO unbind position and phrase clicks and opinion click for unselect
261 296 //unbind_arguments_click(frame);
262 297 //unbind_frame_opinion_click(frame);
263   - schema.removeClass('active');
264   - schema.find('.opinion-row').removeClass('bg-highlight');
  298 + schema.removeClass('active').find('.position, .phrase').removeClass('active');
  299 + //schema.find('.opinion-row').removeClass('bg-highlight');
  300 + unbind_click(schema.find('.opinion-row'));
  301 + unbind_click(schema.find('.position'));
  302 + unbind_click(schema.find('.phrase'));
265 303 // TODO
266   - //$('.argument.active').removeClass('active');
267   - //$('.preferences.active').removeClass('active');
268 304 clear_curr_example(false);
269 305 $('#syntax-examples-list').empty();
270   - //$('#examples-argument').empty();
271   - //$('#examples-schema').empty();
  306 + $('#syntax-examples').hide();
  307 +}
  308 +
  309 +function restrict_syntax_examples() {
  310 + $('#syntax-examples').show();
  311 + $('#syntax-no-examples').hide();
  312 + $('#syntax-examples-list').find('.example').show();
  313 + var position_ids = [];
  314 + var phrase_ids = [];
  315 + $('#syntax-schemata').find('.position.active').each(function() {
  316 + position_ids.push($(this).data('position_id'));
  317 + });
  318 + $('#syntax-schemata').find('.phrase.active').each(function() {
  319 + phrase_ids.push($(this).data('phrase_id'));
  320 + });
  321 + var lu_id = $('.entry-meaning.active').data('lu_id');
  322 + if (!(position_ids.length || phrase_ids.length)) {
  323 + return;
  324 + }
  325 + var visible_examples = 0;
  326 + $('#syntax-examples-list').find('.example').each(function() {
  327 + var example = curr_examples_by_id[$(this).data('example_id')];
  328 + if (
  329 + //(argument_id && !example.argument_ids.includes(argument_id))
  330 + (position_ids.length && !position_ids.every(elem => example.positions.includes(elem)))
  331 + ||
  332 + (phrase_ids.length && !phrase_ids.every(elem => example.phrases_syntax.includes(elem)))
  333 + ) {
  334 + $(this).hide();
  335 + if ($(this).hasClass('active')) {
  336 + clear_curr_example(false);
  337 + }
  338 + } else {
  339 + visible_examples += 1;
  340 + }
  341 + });
  342 + if (visible_examples === 0) {
  343 + $('#syntax-examples').hide();
  344 + $('#syntax-no-examples').show();
  345 + }
272 346 }
273 347  
274 348 function show_semantics(frames, subentries) {
... ... @@ -345,8 +419,8 @@ function clear_curr_example(semantics) {
345 419 function restrict_semantics_examples() {
346 420 $('#semantics-examples').show();
347 421 $('#semantics-no-examples').hide();
348   - $('.example').show();
349   - var schema_id = $('.schema.active').data('schema_id');
  422 + $('#semantics-examples-list').find('.example').show();
  423 + var schema_id = $('#semantics-schemata').find('.schema.active').data('schema_id');
350 424 //var argument_id = $('.argument.active').data('argument_id');
351 425 var argument_ids = [];
352 426 $('.argument.active').each(function() {
... ... @@ -357,7 +431,7 @@ function restrict_semantics_examples() {
357 431 return;
358 432 }
359 433 var visible_examples = 0;
360   - $('.example').each(function() {
  434 + $('#semantics-examples-list').find('.example').each(function() {
361 435 var example = curr_examples_by_id[$(this).data('example_id')];
362 436 if (
363 437 //(argument_id && !example.argument_ids.includes(argument_id))
... ... @@ -384,9 +458,9 @@ function restrict_semantics_examples() {
384 458 function bind_lus_click(frame) {
385 459 frame.find('.entry-meaning').mouseenter(function() {
386 460 if ($(this).hasClass('active')) {
387   - show_info(gettext('Kliknij, aby cofnąć ograniczenie wyświetlanych przykładów do powiązanych z tym znaczeniem.'));
  461 + show_info(gettext('Kliknij, aby cofnąć ograniczenie wyświetlanych przykładów do powiązanych z') + ' ' + gettext('tym znaczeniem') + '.');
388 462 } else {
389   - show_info(gettext('Kliknij, aby wyświetlić wyłącznie przykłady powiązane z tym znaczeniem.'));
  463 + show_info(gettext('Kliknij, aby wyświetlić wyłącznie przykłady powiązane z') + ' ' + gettext('tym znaczeniem') + '.');
390 464 }
391 465 $(this).addClass('bg-highlight');
392 466 }).mouseleave(function() {
... ... @@ -416,9 +490,9 @@ function unbind_lus_click(frame) {
416 490 function do_bind_arguments_click(selector) {
417 491 selector.mouseenter(function() {
418 492 if ($(this).hasClass('active')) {
419   - show_info(gettext('Kliknij, aby cofnąć ograniczenie wyświetlanych przykładów do powiązanych z tą rolą.'));
  493 + show_info(gettext('Kliknij, aby cofnąć ograniczenie wyświetlanych przykładów do powiązanych z') + ' ' + gettext('tą rolą') + '.');
420 494 } else {
421   - show_info(gettext('Kliknij, aby wyświetlić wyłącznie przykłady powiązane z tą rolą.'));
  495 + show_info(gettext('Kliknij, aby wyświetlić wyłącznie przykłady powiązane z') + ' ' + gettext('tą rolą') + '.');
422 496 }
423 497 $('.preferences[data-argument_id="' + $(this).data('argument_id') + '"]').addClass('bg-highlight');
424 498 }).mouseleave(function() {
... ... @@ -460,11 +534,11 @@ function unbind_arguments_click(frame) {
460 534 }
461 535  
462 536 function bind_semantics_schemata_click() {
463   - $('#semantics').find('.schema').mouseenter(function() {
  537 + $('#semantics-schemata').find('.schema').mouseenter(function() {
464 538 if ($(this).hasClass('active')) {
465   - show_info(gettext('Kliknij, aby cofnąć ograniczenie wyświetlanych przykładów do powiązanych z tym schematem.'));
  539 + show_info(gettext('Kliknij, aby cofnąć ograniczenie wyświetlanych przykładów do powiązanych z') + ' ' + gettext('tym schematem') + '.');
466 540 } else {
467   - show_info(gettext('Kliknij, aby wyświetlić wyłącznie przykłady powiązane z tym schematem.'));
  541 + show_info(gettext('Kliknij, aby wyświetlić wyłącznie przykłady powiązane z') + ' ' + gettext('tym schematem') + '.');
468 542 }
469 543 $(this).addClass('bg-highlight');
470 544 }).mouseleave(function() {
... ... @@ -472,8 +546,8 @@ function bind_semantics_schemata_click() {
472 546 clear_info();
473 547 }).click(function() {
474 548 var active = $(this).hasClass('active');
475   - $('.schema.active').removeClass('active');
476   - $('.example').show();
  549 + $('#semantics-schemata').find('.schema.active').removeClass('active');
  550 + $('#semantics-examples-list').find('.example').show();
477 551 $('#examples-schema').empty();
478 552 if (!active) {
479 553 $(this).addClass('active');
... ... @@ -486,7 +560,7 @@ function bind_semantics_schemata_click() {
486 560 }
487 561  
488 562 function unbind_semantics_schemata_click() {
489   - unbind_click($('#semantics').find('.schema'));
  563 + unbind_click($('#semantics-schema').find('.schema'));
490 564 }
491 565  
492 566 function bind_frame_opinion_click(frame) {
... ... @@ -532,7 +606,7 @@ function unselect_frame(frame) {
532 606 $('.argument.active').removeClass('active');
533 607 $('.entry-meaning.active').removeClass('active');
534 608 $('.preferences.active').removeClass('active');
535   - $('#semantics').find('.schema').removeClass('active');
  609 + $('#semantics-schemata').find('.schema').removeClass('active');
536 610 $('.extra-phrase-types').remove();
537 611 $('.phrase').removeClass('initiator stimulus condition factor experiencer theme recipient result instrument manner purpose attribute location path time duration measure lemma source foreground background goal');
538 612 $('.realisation-description').remove();
... ... @@ -542,6 +616,7 @@ function unselect_frame(frame) {
542 616 $('#examples-lu').empty();
543 617 $('#examples-schema').empty();
544 618 $('#semantics-examples-list').empty();
  619 + $('#semantics-examples').hide();
545 620 $('#semantics-schemata').find('.schema').addClass('inactive');
546 621 $('#semantics-schemata').find('.schema').show();
547 622 $('#semantics-schemata').find('.subentry').show();
... ... @@ -568,7 +643,7 @@ function show_alternations(frame) {
568 643 var role = $('.argument[data-argument_id="' + arg_id + '"').data('role');
569 644 for (var j in alternation[arg_id]) {
570 645 var phrase_id = alternation[arg_id][j];
571   - row.find('.phrase[data-phrase_id="' + phrase_id + '"').addClass(role).after('<div class="realisation-phrase px-1 py-2"><b><i>' + curr_realisation_phrases[arg_id][i][phrase_id] + '</i></b></div>');
  646 + row.find('.phrase[data-phrase_id="' + phrase_id + '"').addClass(role).after('<div class="realisation-phrase px-1 py-2"><i>' + curr_realisation_phrases[arg_id][i][phrase_id] + '</i></div>');
572 647 }
573 648 }
574 649 var description_row = '<tr class="realisation-description"><td class="px-1 py-2" colspan="' + colspan + '"><i>' + curr_realisation_descriptions[frame_id][schema_id][i] + '</i></td></tr>';
... ...
entries/views.py
1   -import datetime
2 1 import operator
3 2 import time
4 3  
... ... @@ -284,7 +283,7 @@ def get_entries(request):
284 283 if request.method == 'POST':
285 284 forms = collect_forms(request.session['forms'])
286 285 scroller_params = get_scroller_params(request.POST)
287   - entries = get_filtered_objects(forms)
  286 + entries = get_filtered_objects(forms).filter(import_error=False)
288 287 total = entries.count()
289 288 if scroller_params['filter']:
290 289 entries = entries.filter(name__startswith=scroller_params['filter'])
... ... @@ -354,6 +353,7 @@ def schema2dict(schema, negativity, lang):
354 353 'func' : position_prop2dict(p.function),
355 354 'control' : position_prop2dict(p.control),
356 355 'p_control' : position_prop2dict(p.pred_control),
  356 + 'id' : '{}-{}'.format(schema.id, p.id),
357 357 'phrases' : [
358 358 {
359 359 'str' : str(pt),
... ... @@ -490,7 +490,7 @@ def get_alternations(schemata, frames):
490 490 def get_examples(entry):
491 491 examples = []
492 492 for example in entry.examples.all():
493   - frame_ids, argument_ids, lu_ids, schema_ids, phrases, phrases_syntax = set(), set(), set(), set(), set(), set()
  493 + frame_ids, argument_ids, lu_ids, schema_ids, phrases, phrases_syntax, positions = set(), set(), set(), set(), set(), set(), set()
494 494 for connection in example.example_connections.all():
495 495 for argument in connection.arguments.all():
496 496 frame_ids.add(argument.frame.id)
... ... @@ -501,6 +501,7 @@ def get_examples(entry):
501 501 schema_ids.add(hook.schema.id);
502 502 phrases.add('{}-{}-{}-{}'.format(hook.schema.id, hook.position.id, hook.phrase_type.id, hook.alternation - 1))
503 503 phrases_syntax.add('{}-{}-{}'.format(hook.schema.id, hook.position.id, hook.phrase_type.id))
  504 + positions.add('{}-{}'.format(hook.schema.id, hook.position.id))
504 505 examples.append({
505 506 'id' : str(example.id),
506 507 'sentence' : example.sentence,
... ... @@ -513,6 +514,7 @@ def get_examples(entry):
513 514 'schema_ids' : sorted(schema_ids),
514 515 'phrases' : sorted(phrases),
515 516 'phrases_syntax' : sorted(phrases_syntax),
  517 + 'positions' : sorted(positions),
516 518 })
517 519 return sorted(examples, key=lambda x: x['sentence'])
518 520  
... ... @@ -523,6 +525,7 @@ def get_entry(request):
523 525 eid = request.POST['entry']
524 526 if eid.isdigit() and form.is_valid():
525 527 eid = int(eid)
  528 + # TODO check that Entry has no import errors
526 529 entry = Entry.objects.get(id=eid)
527 530  
528 531 entry_form, _, children_forms = collect_forms(request.POST['forms[]'])
... ...
importer/Entry.py
... ... @@ -29,15 +29,20 @@ class Entry:
29 29 # @TODO: nie ma frequency w xml-u
30 30 entry = connections.models.Entry(name=self._base, pos=pos, status=status, frequency_1M=0, frequency_300M=0)
31 31 entry.save()
32   - self._syntax.store(entry, stored_positions)
33   - if self._semantics is not None:
34   - self._semantics.store(entry, all_meanings)
35   - entry.save()
36   - if self._meanings:
37   - for meaning in self._meanings._meanings:
38   - mng = all_meanings[meaning][1]
39   - mng.assign_entry(entry)
40   - self._examples.store(entry, all_meanings)
  32 + try:
  33 + self._syntax.store(entry, stored_positions)
  34 + if self._semantics is not None:
  35 + self._semantics.store(entry, all_meanings)
  36 + entry.save()
  37 + if self._meanings:
  38 + for meaning in self._meanings._meanings:
  39 + mng = all_meanings[meaning][1]
  40 + mng.assign_entry(entry)
  41 + self._examples.store(entry, all_meanings)
  42 + except Exception as e:
  43 + entry.import_error = True
  44 + entry.save()
  45 + raise
41 46  
42 47 def __str__(self):
43 48 return self._pos + '(' + self._base + ',' + str(self._syntax) + ').'
... ...
importer/Position.py
... ... @@ -114,11 +114,13 @@ class Position:
114 114 self._db_id = position.id
115 115  
116 116 controller = None
117   - # fails for: uważać, uznać, uznawać
118   - assert(not control or not pred_control)
119 117 if control and control.name == 'controllee':
  118 + # no controllee and pred_controllee at the same time
  119 + assert(not pred_control or pred_control.name == 'pred_controller')
120 120 controller = self._schema.getController('controllee')
121 121 if pred_control and pred_control.name == 'pred_controllee':
  122 + # no controllee and pred_controllee at the same time
  123 + assert(not control or control.name == 'controller')
122 124 controller = self._schema.getController('pred_controllee')
123 125  
124 126 for phrase in self._phrases:
... ... @@ -146,10 +148,10 @@ class Position:
146 148 if self._id is not None:
147 149 stored_positions[extended_id] = position.id
148 150  
149   - def isController(self):
  151 + def hasControl(self, control):
150 152 if self._control:
151 153 for c in self._control:
152   - if c._function.endswith('controller'):
  154 + if c._function == control:
153 155 return True
154 156 return False
155 157  
... ...
importer/RealizationDescriptionUtils.py
... ... @@ -5,6 +5,9 @@ from entries.phrase_descriptions.descriptions import make_phraseologisms
5 5 from importer.Phrase import Case, Preposition, Modification, Words, NP, LexNP, PrepNP, LexPrepNP, AdjP, LexAdjP, PActP, LexPActP, Compar, LexCompar, Fixed
6 6 from importer.Position import Position
7 7  
  8 +class RealisationDescriptionError(Exception):
  9 + pass
  10 +
8 11 morfeusz = morfeusz2.Morfeusz(generate=False, analyse=True, expand_tags=True)
9 12  
10 13 SYNSET_KILL_LIST = (
... ... @@ -408,7 +411,8 @@ def make_comprepnp(comprep, words, num, mod):
408 411  
409 412 def make_compar(compar, words, num, mod, controller):
410 413 dummy_id = None
411   - assert(controller)
  414 + if not controller:
  415 + raise RealisationDescriptionError('no controller for {}'.format(compar))
412 416 controller_case = controller.getCase()
413 417 np = NP(Case(controller_case), dummy_id)
414 418 lexnp = LexNP(np, num, words, mod, dummy_id)
... ...
importer/RealizationDescriptions.py
  1 +import datetime
1 2 import os
2 3  
3 4 from collections import Counter, defaultdict
... ... @@ -31,16 +32,14 @@ def select_predefined(predefs):
31 32 return predefs[0]
32 33 return 'ALL'
33 34 # TODO inne heurystyki?
34   - print(predefs)
35   - 1/0
  35 + raise RealisationDescriptionError('couldn’t choose predef lemma: {}'.format('/'.join(predefs)))
36 36  
37 37 def select_predefined_for_xp(predefs, role):
38 38 if predefs == ['ISTOTY']:
39 39 return 'ISTOTY'
40 40 return 'ALL'
41 41 # TODO heurystyki?
42   - print(predefs)
43   - 1/0
  42 + raise RealisationDescriptionError('couldn’t choose predef lemma for XP: {}'.format('/'.join(predefs)))
44 43  
45 44 def get_predefined_lemma(argument, xp=False):
46 45 predefined = argument.predefined.all()
... ... @@ -66,11 +65,165 @@ def get_hyponyms(synset, seen=None, tab=&#39; &#39;):
66 65 hyponyms.update(get_hyponyms(hypo, seen, tab=tab + ' '))
67 66 return hyponyms
68 67  
  68 +# przyspieszająca heurystyka na podstawie oglądania danych
  69 +PRIORITY_SYNSETS = (
  70 + #rzecz-4
  71 + #103156,
  72 + #przedmiot-1
  73 + #2646,
  74 + #substancja-1
  75 + #5236,
  76 +)
  77 +
  78 +# for benchmarking
  79 +BENCH3 = defaultdict(list)
  80 +
  81 +# precalculated for the largest ones
  82 +HYPONYM_CACHE = {
  83 + # sklep-1
  84 + 4747 : 46,
  85 + # obiekt budowlany-1
  86 + 53426 : 590,
  87 + # konstrukcja-1
  88 + 7218 : 614,
  89 + # cecha człowieka-1
  90 + 36347 : 676,
  91 + # aberracja-1 nieprawidłowość-1 zaburzenie-2 zakłócenie-3
  92 + 4127 : 700,
  93 + # znak-1
  94 + 7416 : 732,
  95 + # coś na ząb-1 jedzenie-2 pokarm-1 pożywienie-3 żywność-1
  96 + 10738 : 766,
  97 + # materiał-1 tworzywo-1
  98 + 1612 : 879,
  99 + # jednostka miary-1 jednostka-4 miano-2 miara-3
  100 + 1161 : 881,
  101 + # związek chemiczny-1 związek-1
  102 + 19589 : 882,
  103 + # zjawisko naturalne-1
  104 + 5351 : 901,
  105 + # dzieło-2 praca-6
  106 + 7469 : 927,
  107 + # część-1
  108 + 462 : 957,
  109 + # cecha czynności-1 cecha działania-1
  110 + 5953 : 1033,
  111 + # część-3
  112 + 104936 : 1056,
  113 + # cecha fizyczna-1
  114 + 5464 : 1056,
  115 + # wypowiedź-1
  116 + 3998 : 1062,
  117 + # proces-1
  118 + 54253 : 1103,
  119 + # ciąg wydarzeń-1 ciąg zdarzeń-1
  120 + 47401 : 1107,
  121 + # grupa-2 zespół ludzi-1 zespół-2
  122 + 7653 : 1176,
  123 + # człowiek charakteryzowany ze względu na kwalifikacje-1
  124 + 6779 : 1188,
  125 + # substancja chemiczna-1
  126 + 5233 : 1206,
  127 + # przyrząd-1
  128 + 7425 : 1260,
  129 + # ilość-1
  130 + 1078 : 1427,
  131 + # grupa ludzi-1 grupa-5 ludzie-1
  132 + 7702 : 1510,
  133 + # kategoria-3 pojęcie-2
  134 + 8170 : 1522,
  135 + # urządzenie-5
  136 + 7446 : 1524,
  137 + # historia-3 wydarzenie-1 wypadek-3 zdarzenie-2
  138 + 6526 : 1533,
  139 + # grupa istot-1
  140 + 103330 : 1585,
  141 + # miejsce-1
  142 + 4750 : 1632,
  143 + # stan-1
  144 + 3243 : 1761,
  145 + # narzędzie-1
  146 + 7610 : 1800,
  147 + # roślina-1
  148 + 4603 : 1928,
  149 + # artefakt-1 twór-5 wytwór-2
  150 + 2605 : 2029,
  151 + # człowiek ze względu na swoje zajęcie-1
  152 + 6797 : 2184,
  153 + # nazwa człowieka uwzględniająca jego cechy-1 nosiciel cechy-1
  154 + 6778 : 2308,
  155 + # płód-3 wytwór umysłu-1
  156 + 8137 : 2599,
  157 + # człowiek ze względu na relacje społeczne-1
  158 + 6775 : 2642,
  159 + # fenomen-1 zjawisko-1
  160 + 5371 : 2674,
  161 + # środek-1
  162 + 28294 : 2793,
  163 + # człowiek, który coś robi-1
  164 + 241977 : 2828,
  165 + # substancja-1
  166 + 5236 : 2871,
  167 + # zwierzę-1
  168 + 5621 : 2966,
  169 + # materia-3
  170 + 247979 : 2970,
  171 + # spowodowanie-1 sprawienie-1
  172 + 102579 : 4255,
  173 + # atrybut-1 cecha-1 przymiot-1 własność-2 właściwość-1
  174 + 323 : 4579,
  175 + # grupa-4 zbiór-1
  176 + 1282 : 4587,
  177 + # uczynienie-1 zrobienie-1
  178 + 102576 : 4851,
  179 + # całość-1 ogół-1
  180 + 2129 : 5668,
  181 + # człowiek-1 istota ludzka-1 jednostka-2 osoba-1
  182 + 6047 : 6151,
  183 + # osoba-4
  184 + 28688 : 6170,
  185 + # wytwór-1
  186 + 2903 : 7230,
  187 + # efekt-1 rezultat-1 skutek-1 wynik-1
  188 + 5195 : 7915,
  189 + # przedmiot-1
  190 + 2646 : 7552,
  191 + # istota żywa-1 stworzenie-5 twór-1
  192 + 6045 : 8448,
  193 + # istota-1
  194 + 1027 : 8536,
  195 + # czynność-1
  196 + 10765 : 8653,
  197 + # rzecz-4
  198 + 103156 : 9480,
  199 + # egzemplarz-1 indywiduum-1 jednostka-3 organizm-1 osobnik-2
  200 + 6731 : 10609,
  201 + # obiekt-2
  202 + 234224 : 21435,
  203 +}
  204 +
69 205 def select_synsets(synsets):
  206 + for p_synset in PRIORITY_SYNSETS:
  207 + ssets = [s for s in synsets if s.id == p_synset]
  208 + if ssets:
  209 + assert(len(ssets) == 1)
  210 + return ssets
70 211 by_num_hyponyms = defaultdict(set)
71 212 for synset in synsets:
72   - hyponyms = get_hyponyms(synset)
73   - N = len(hyponyms)
  213 + sid = synset.id
  214 + if sid not in HYPONYM_CACHE:
  215 + #-------
  216 + t1 = datetime.datetime.now()
  217 + #-------
  218 + hyponyms = get_hyponyms(synset)
  219 + HYPONYM_CACHE[sid] = len(hyponyms)
  220 + #-------
  221 + t2 = datetime.datetime.now()
  222 + # deciseconds :)
  223 + d = round((t2 - t1).total_seconds() * 10)
  224 + BENCH3[d].append((HYPONYM_CACHE[sid], sid, synset))
  225 + # ----
  226 + N = HYPONYM_CACHE[sid]
74 227 by_num_hyponyms[N].add(synset)
75 228 M = max(by_num_hyponyms.keys())
76 229 return list(by_num_hyponyms[M])
... ... @@ -147,9 +300,19 @@ def get_synsets_lemma(argument, pos):
147 300 LEMMA_CACHE[key] = ret
148 301 return ret
149 302  
150   -#LEMMA_CACHE = dict()
  303 +# for benchmarking
  304 +BENCH2 = defaultdict(list)
151 305  
152 306 def get_argument_lemma(argument, xp=False):
  307 + t1 = datetime.datetime.now()
  308 + ret = get_argument_lemma2(argument, xp=xp)
  309 + t2 = datetime.datetime.now()
  310 + # deciseconds :)
  311 + d = round((t2 - t1).total_seconds() * 10)
  312 + BENCH2[d].append((argument.predefined.all(), argument.synsets.all(), ret))
  313 + return ret
  314 +
  315 +def get_argument_lemma2(argument, xp=False):
153 316 lemma = get_predefined_lemma(argument, xp=xp)
154 317 if lemma:
155 318 return lemma, True
... ... @@ -213,8 +376,7 @@ def process_lemma(lemma, phrase_type):
213 376 lemma = words[0]
214 377 mod = make_prepnp_mod(words[2], words[1], 'gen')
215 378 else:
216   - print(lemma, tags)
217   - 1/0
  379 + raise RealisationDescriptionError('couldn’t parse lemma: {} {}'.format(lemma, tags))
218 380  
219 381 if lemma == 'lata':
220 382 return 'rok', 'm3', 'pl', 'subst', mod
... ... @@ -244,11 +406,7 @@ def process_lemma(lemma, phrase_type):
244 406 if len(lemmata) == 1:
245 407 return lemmata.pop(), 'n', 'sg', 'ger', mod
246 408  
247   - print('\n\n***===============================')
248   - print(lemma)
249   - print(get_interps(lemma))
250   - 1/0
251   - print('***===============================\n\n')
  409 + raise RealisationDescriptionError('couldn’t process lemma: {} {}'.format(lemma, get_interps(lemma)))
252 410  
253 411 '''
254 412 # TODO rodzaj w zależności od hiperonimów?
... ... @@ -359,13 +517,12 @@ def generate_phrases(function, negativity, phrase, lemma, is_predef, head_gender
359 517 if phrase._type._realisations:
360 518 phr = '/'.join(phrase._type._realisations) + ' …'
361 519 else:
362   - phr = 'kto/co/jak/… robi'
  520 + phr = 'kto/co/czy/… robi/się dzieje/…'
363 521 elif cptype == 'rel':
364 522 if phrase._type._realisations:
365 523 phr = '/'.join(phrase._type._realisations) + ' …'
366 524 else:
367   - print(phrase)
368   - 1 / 0
  525 + raise RealisationDescriptionError('rel phrase without realisations: {}'.format(phrase))
369 526 elif cptype == 'żeby2':
370 527 comp = 'że' if negativity != 'neg' else 'żeby'
371 528 phr = 'że coś się stało'
... ... @@ -539,9 +696,21 @@ PHRASE_CACHE = dict()
539 696  
540 697 PHRASE_SEP = ' / '
541 698  
  699 +# for benchmarking
  700 +BENCH = defaultdict(list)
  701 +
  702 +def get_phrase_description(subentry, argument, position, phrase, controller_grammar=None):
  703 + t1 = datetime.datetime.now()
  704 + ret = get_phrase_description2(subentry, argument, position, phrase, controller_grammar=controller_grammar)
  705 + t2 = datetime.datetime.now()
  706 + # deciseconds :)
  707 + d = round((t2 - t1).total_seconds() * 10)
  708 + BENCH[d].append((subentry.entry.name, argument.role.role.role, ret[0]))
  709 + return ret
  710 +
542 711 # subentry, argument: DB model objects
543 712 # schema, phrase: importer objects
544   -def get_phrase_description(subentry, argument, position, phrase, controller_grammar=None):
  713 +def get_phrase_description2(subentry, argument, position, phrase, controller_grammar=None):
545 714 print()
546 715 print(argument)
547 716 print(phrase)
... ... @@ -549,21 +718,33 @@ def get_phrase_description(subentry, argument, position, phrase, controller_gram
549 718 function = position._function._value if position._function else None
550 719 control = None
551 720 if position._control:
552   - assert(len(position._control) == 1)
553   - control = position._control[0]._function
  721 + #assert(len(position._control) == 1)
  722 + #control = position._control[0]._function
  723 + ee = [c._function for c in position._control if c._function.endswith('controllee')]
  724 + er = [c._function for c in position._control if c._function.endswith('controller')]
  725 + assert(len(ee) <= 1)
  726 + assert(len(er) <= 1)
  727 + # e.g. ‹uznać› — controllee and pred_controller on the same position, take controllee
  728 + if ee:
  729 + control = ee[0]
  730 + else:
  731 + control = er[0]
554 732 negativity = subentry.negativity.name if subentry.negativity else '_'
555 733 head_lemma, head_gender = subentry.entry.name, None
556 734  
557 735 controller, controller_features, controller_function = None, None, None
558 736 if control and control.endswith('controllee'):
559   - print('==================', control)
560 737 controller = position._schema.getController(control)
561   - controller_features = controller_grammar[controller]
  738 + try:
  739 + controller_features = controller_grammar[controller]
  740 + except KeyError:
  741 + raise RealisationDescriptionError('couldn’t determine grammar features for {}: {} {}'.format(' '.join(map(str, argument.frame.lexical_units.all())), control, phrase))
562 742 controller_function = controller._function._value if controller._function else None
563 743  
564 744 if subentry.entry.pos.tag == 'noun':
565 745 interps = get_interps(head_lemma, lemma=head_lemma, tag_constraints=['subst', 'nom'])
566 746 head_gender = get_gender(interps)
  747 +
567 748 # TODO
568 749 # TODO gender, number
569 750 # TODO (‹jakieś›) oko * (‹jakieś›) oczy *błyszczy* z powodu substancji
... ... @@ -579,11 +760,8 @@ def get_phrase_description(subentry, argument, position, phrase, controller_gram
579 760 gender, number = get_lex_gender_number(phrase)
580 761 return PHRASE_SEP.join(phrs), gender, number
581 762 lemmata, is_predef = get_argument_lemma(argument, xp=(phrase._name == 'xp' and not phrase._category._limitations))
582   - try:
583   - assert(len(lemmata) == 1)
584   - except:
585   - print(lemmata, is_predef)
586   - raise
  763 + if len(lemmata) != 1:
  764 + raise RealisationDescriptionError('couldn’t choose single lemma: {}'.format('/'.join(lemmata)))
587 765 phrases = []
588 766 # TODO since there’s one lemma, drop the loop
589 767 for lemma in lemmata:
... ... @@ -730,13 +908,13 @@ def select_phrase_description(position, phrase_descriptions):
730 908 # TODO? napsuć zdrowia/nerwów
731 909 if set(desc[0] for desc in phrase_descriptions.values()) == {'zdrowia', 'nerwów'}:
732 910 return ('zdrowia i nerwów', 'n', 'pl')
733   - for phrase, desc in phrase_descriptions.items():
734   - print('***', type(phrase))
735   - print('*** ', phrase, desc)
736   - for priority, phrases in sorted(by_priority.items()):
737   - print('===', priority)
738   - print('=== ', phrases)
739   - 1/0
  911 + #for phrase, desc in phrase_descriptions.items():
  912 + # print('***', type(phrase))
  913 + # print('*** ', phrase, desc)
  914 + #for priority, phrases in sorted(by_priority.items()):
  915 + # print('===', priority)
  916 + # print('=== ', phrases)
  917 + raise RealisationDescriptionError('couldn’t select phrase description: {}'.format(' * '.join(desc[0] for desc in phrase_descriptions.values())))
740 918  
741 919  
742 920 FUNCTION_RANK = {
... ... @@ -869,20 +1047,30 @@ def get_realisation_description(realisation, subentry, aspect):
869 1047 entry = subentry.entry
870 1048 ars = [(get_argument_realisation_priority(ar, entry.pos.tag), fallback(ar._description), ar) for ar in realisation._argument_realizations]
871 1049 print([(p1, p2, ar._description) for p1, p2, ar in ars])
872   - ars = sorted(ars)
  1050 + try:
  1051 + ars = sorted(ars)
  1052 + except:
  1053 + raise RealisationDescriptionError('couldn’t order argument realisations: {}'.format(' * '.join('{}{} {}'.format(ar._argument._semantic_role._value, ar._argument._semantic_role._attribute, ar._description) for ar in realisation._argument_realizations)))
873 1054 if entry.pos.tag == 'verb':
874 1055 # dla innych nie przesuwamy np(dat): bliski *komuś*
875 1056 ars = rerank(ars)
876   - before = [ar._description.split(PHRASE_SEP)[0] for rank, fallback, ar in ars if rank[0] == 0]
877   - after = [ar._description.split(PHRASE_SEP)[0] for rank, fallback, ar in ars if rank[0] > 0]
  1057 + before = [('<b>{}</b>' if ar._argument._semantic_role._value == 'Lemma' else '{}').format(ar._description.split(PHRASE_SEP)[0]) for rank, fallback, ar in ars if rank[0] == 0]
  1058 + after = [('<b>{}</b>' if ar._argument._semantic_role._value == 'Lemma' else '{}').format(ar._description.split(PHRASE_SEP)[0]) for rank, fallback, ar in ars if rank[0] > 0]
878 1059 subj_ars = [ar for ar in realisation._argument_realizations if ar._position._function and ar._position._function._value == 'subj']
879   - assert(len(subj_ars) <= 1)
  1060 + if len(subj_ars) > 1:
  1061 + raise RealisationDescriptionError('> 1 subject argument realisations: {}'.format(' * '.join('{}{} {}'.format(ar._argument._semantic_role._value, ar._argument._semantic_role._attribute, ar._description) for ar in subj_ars)))
880 1062 subj_ar = subj_ars[0] if subj_ars else None
  1063 + head_ars = [ar for ar in realisation._argument_realizations if ar._position._function and ar._position._function._value == 'head']
  1064 + if len(head_ars) > 1:
  1065 + raise RealisationDescriptionError('> 1 head argument realisations: {}'.format(' * '.join('{}{} {}'.format(ar._argument._semantic_role._value, ar._argument._semantic_role._attribute, ar._description) for ar in head_ars)))
  1066 + head_ar = head_ars[0] if head_ars else None
881 1067 entry_form = entry.name
882 1068 if entry.name == 'naleźć':
883 1069 #TODO błąd w słowniku
884 1070 aspect = 'perf'
885   - if entry.name == 'bootować':
  1071 + if entry.pos.tag == 'adj' and head_ar:
  1072 + entry_form = get_form(entry.name, ['adj', head_ar._number, 'nom', head_ar._gender, 'pos'])[0]
  1073 + elif entry.name == 'bootować':
886 1074 # nienotowane w Morfeuszu
887 1075 entry_form = 'bootuje'
888 1076 elif entry.name == 'wtyczkować':
... ... @@ -903,10 +1091,7 @@ def get_realisation_description(realisation, subentry, aspect):
903 1091 if subj_ar._gender:
904 1092 subj_gend = subj_ar._gender
905 1093 else:
906   - print('##############', subj_ar)
907   - print('##############', subj_ar._position._phrases)
908   - print('##############', subj_ar._argument)
909   - 1/0
  1094 + raise RealisationDescriptionError('couldn’t determine subject’s gender: {} {} {}'.format(subj_ar, subj_ar._position._phrases, subj_ar._argument))
910 1095 else:
911 1096 # no subject: ‹jestem kotem — olśniło kogoś›
912 1097 subj_gend = 'n'
... ... @@ -919,6 +1104,7 @@ def get_realisation_description(realisation, subentry, aspect):
919 1104 # bokser sparuje — imperf nienotowane w Morfeuszu
920 1105 entry_form = 'sparuje'
921 1106 else:
  1107 + print(entry_base, ['fin', subj_num, 'ter', 'imperf'])
922 1108 entry_form = get_form(entry_base, ['fin', subj_num, 'ter', 'imperf'])[0]
923 1109 else:
924 1110 # dokonane: praet (cz. przeszły)
... ... @@ -963,4 +1149,21 @@ def get_realisation_description(realisation, subentry, aspect):
963 1149 if subentry.inherent_sie.name == 'true':
964 1150 entry_form += ' się'
965 1151 elements = before + ['<b>{}</b>'.format(entry_form)] + after
  1152 +
  1153 + if entry_form[0] > 'z':
  1154 + #-------
  1155 + for t in sorted(BENCH3.keys()):
  1156 + if t > 4:
  1157 + print(' ************', t, len(BENCH3[t]), BENCH3[t][:10])
  1158 + for n, sid, synset in BENCH3[t]:
  1159 + print(' ************', synset)
  1160 + print(' ************', sid, ':', n)
  1161 + #for t in sorted(BENCH2.keys()):
  1162 + # if t > 4:
  1163 + # print(' ********', t, len(BENCH2[t]), BENCH2[t][:10])
  1164 + #for t in sorted(BENCH.keys()):
  1165 + # if t > 4:
  1166 + # print(' ****', t, len(BENCH[t]), BENCH[t][:10])
  1167 + #-------
  1168 +
966 1169 return ' '.join(elements)
... ...
importer/Realizations.py
... ... @@ -111,19 +111,37 @@ class FrameRealization:
111 111 if connection.alternation >= alternation:
112 112 alternation = connection.alternation + 1
113 113 subentry = self._schema.getSubentry(entry)
114   - controllers, non_controllers = [], []
115   - for ar in self._argument_realizations:
116   - (controllers if ar._position.isController() else non_controllers).append(ar)
117 114 # during storing, gender and number is determined, so first store the controller
118 115 # argument realisations to use those for controllee descriptions
  116 + controllers, controllees, pred_controllers, rest = [], [], [], []
  117 + for ar in self._argument_realizations:
  118 + if ar._position.hasControl('controller'):
  119 + controllers.append(ar)
  120 + elif ar._position.hasControl('controllee'):
  121 + controllees.append(ar)
  122 + elif ar._position.hasControl('pred_controller'):
  123 + pred_controllers.append(ar)
  124 + else:
  125 + rest.append(ar)
  126 + #(controllers if ar._position.isController() else non_controllers).append(ar)
119 127 controller_grammar = {}
  128 + # in this order, e.g. uznać subj,controller{np(str)}+controllee,pred_controller{infp(_)}+pred_controllee{adjp(inst)}
120 129 for ar in controllers:
121 130 ar.store(subentry, frame, schema, alternation)
122 131 controller_grammar[ar._position] = (ar._gender, ar._number)
123   - print('**************************', controller_grammar)
124   - for ar in non_controllers:
  132 + for ar in controllees:
  133 + ar.store(subentry, frame, schema, alternation, controller_grammar=controller_grammar)
  134 + if ar._position.hasControl('pred_controller'):
  135 + controller_grammar[ar._position] = (ar._gender, ar._number)
  136 + for ar in pred_controllers:
  137 + ar.store(subentry, frame, schema, alternation)
  138 + controller_grammar[ar._position] = (ar._gender, ar._number)
  139 + for ar in rest:
125 140 ar.store(subentry, frame, schema, alternation, controller_grammar=controller_grammar)
  141 + #for ar in non_controllers:
  142 + # ar.store(subentry, frame, schema, alternation, controller_grammar=controller_grammar)
126 143 description = get_realisation_description(self, subentry, self._schema.getAspect())
  144 + #print('**************************', controller_grammar)
127 145 print('================================', description)
128 146 RealisationDescription.objects.create(frame=frame,
129 147 schema=schema,
... ...
importer/Schema.py
... ... @@ -4,6 +4,9 @@
4 4 from importer.Position import Position
5 5 from syntax.models import SchemaOpinion, Aspect, InherentSie, Negativity, Predicativity, Subentry
6 6  
  7 +class ControlError(Exception):
  8 + pass
  9 +
7 10 class Characteristic:
8 11  
9 12 def __init__(self, name, value):
... ... @@ -139,7 +142,8 @@ class Schema:
139 142 for c in position._control:
140 143 if c._function == control2:
141 144 controllers.append(position)
142   - assert(len(controllers) == 1)
  145 + if len(controllers) != 1:
  146 + raise ControlError('incorrect number of controllers for {}: {}'.format(control, len(controllers)))
143 147 return controllers[0]
144 148  
145 149 def store(self, entry, stored_positions):
... ...
importer/WalentyXML.py
1 1 #! /usr/bin/python
2 2 # -*- coding: utf-8 -*-
3 3  
  4 +import traceback
  5 +
4 6 from xml.sax import handler
5 7 from importer.Entry import Entry
6 8  
... ... @@ -43,6 +45,8 @@ class WalentyTeiHandler(handler.ContentHandler):
43 45 self._examples_in = None # @TODO: read disambiguated file
44 46 self._examples_out = open(examples_out_file, "w")
45 47 self._misconnected_out = open(misconnected_examples_out_file, "w")
  48 + self._errors = []
  49 + self._counter = 0
46 50  
47 51 def startElement(self, name, attrs):
48 52 if name == 'date':
... ... @@ -65,83 +69,21 @@ class WalentyTeiHandler(handler.ContentHandler):
65 69 self._current.setContent(self._content.strip())
66 70 self._current = self._current._parent
67 71 if name == 'entry':
  72 + self._counter += 1
68 73 if self._current is not None:
69 74 raise TEIStructureError()
70 75 base = self._subtree._children[0]._children[0]._content
71   - # TODO sprawdzić i poprawić te hasła
72   - if base not in (
73   - 'analogiczny', # compar(jak) bez kontroli
74   - 'charakterystyka', # błąd – kontrola nie od pary
75   - 'degradacja', # np(gen) + compar(jako) – brakuje kontroli?
76   - 'dozwalać', 'dozwolić', # w alternacji występuje tylko controllee – błąd czy uwzględniać? (***)
77   - 'eksploatacja', # xp(abl) + xp(locat) – to chyba jest przesadna fiksacja na koordynacji
78   - 'fenomen', # np(gen) + compar(jako) – brakuje kontroli?
79   - 'gnać', # błąd – brak controllera
80   - 'kompromitacja', # possp + compar(jako) – brakuje kontroli?
81   - 'metafora', # possp + np(gen) + compar(jako) – brakuje kontroli?
82   - 'mianować', # dwa pred_controllee, bez controllera – błąd
83   - 'niewiarygodny', # compar(jako) bez kontroli
84   - 'obligować', # (***)
85   - 'odetkać', # w XML-u 20200626 jest dziwna alternacja, chyba błąd
86   - #'pieprzyć', # brakuje [co] w modyfikacjach cp(rel[co])
87   - 'pochwała', # np(gen) + compar(jako) – brakuje kontroli?
88   - 'podziw', # prepnp(dla,gen) + compar(jako) – brakuje kontroli?
89   - #'pognać', # brakuje [co] w modyfikacjach cp(rel[co])
90   - 'polecać', 'popłacać', # (***)
91   - 'porozjeżdżać', # błąd – kontrola nie od pary
92   - 'powychodzić', # błąd – kontrola nie od pary
93   - 'praktyka', # possp + compar(jako) – brakuje kontroli?
94   - 'predestynować', # dziwna alternacja + dlaczego akurat np jest Foreground, a ncp Background?
95   - 'proklamacja', # np(gen) + compar(jako) – brakuje kontroli?
96   - 'przestać', 'przestawać', # (***)
97   - 'rejestracja', # np(gen) + compar(jako) – brakuje kontroli?
98   - 'reklama', # np(gen) + compar(jako) – brakuje kontroli?
99   - 'reprezentacja', # np(gen) + compar(jako) – brakuje kontroli?
100   - 'rewelacja', # prepncp(o,loc,rel) – powinno być int?
101   - 'rola', # possp + compar(jako) – brakuje kontroli?
102   - 'rozpoznawalność', # np(gen) + compar(jako) – brakuje kontroli?
103   - 'spodziewać', # prędzej + śmierci + compar(niż) – brakuje kontroli?
104   - 'sprzymierzyć', # imperf – błąd?
105   - 'staż', # possp + compar(jako) – brakuje kontroli?
106   - 'stygmatyzacja', # np(gen) + compar(jako) – brakuje kontroli?
107   - 'trząść', # np(str) + compar(jak) – brakuje kontroli?
108   - 'uczestnictwo', # possp + compar(jako) – brakuje kontroli?
109   - #'umilknąć', # brakuje [jakby] w modyfikacjach cp(rel[co])
110   - 'ustalać', # błąd – kontrola nie od pary
111   - 'uważać', # podwójna kontrola – TODO, ale też patrz notatki
112   - 'uwielbiać', # (***)
113   - 'uznać', 'uznawać', # podwójna kontrola – TODO, ale też patrz notatki
114   - 'walor', # possp + compar(jako) – brakuje kontroli?
115   - 'wczołgiwać', # TODO, ale też patrz notatki
116   - 'wegetacja', # possp + compar(jako) – brakuje kontroli?
117   - 'weryfikacja', # np(gen) + compar(jako) – brakuje kontroli?
118   - 'woleć', # cp(gdy) + compar(niż) – brakuje kontroli?
119   - 'współbrzmieć', # dziwna alternacja + dlaczego akurat np jest Foreground, a ncp Background?
120   - 'wybawiać', 'wybawić', # dziwne przypisanie argumentów do fraz w alternacji z koordynacją
121   - 'wykaligrafować', # w XML-u 20200626 jest przedziwna alternacja
122   - 'wypruwać', # dziwne schematy z dwiema pozycjami „flaki” i „(jakieś) flaki”
123   - 'zależeć', # xp(mod[comprepnp(na sposób);advp(mod);lex(prepnp(w,acc),sg,'sposób',atr({adjp(agr)}))]) – dziwna pozycja
124   - 'zapowiedź', # np(gen) + compar(jako) – brakuje kontroli?
125   - 'zastygać', 'zastygnąć', # brakuje kontroli?
126   - 'zatrząść', # np(str) + compar(jak) – brakuje kontroli?
127   - 'zdarzyć', # (***)
128   - 'zwać', # (***)
129   - 'dzwonić', # – dwie lex(prepnp(w,loc))!
130   - 'kapać', # – dwie lex(np(inst))!
131   - 'popukać', # – dwie lex(prepnp(do,gen))!
132   - 'przeczyć', # – dwie lex(np(dat))!
133   - 'pukać', # – dwie lex(prepnp(do,gen))!
134   - 'regenerować', # – dwie lex(np(str))!
135   - 'rosić', # – dwie lex(np(inst))!
136   - 'spychać', # – dwie lex(prepnp(na,acc))!
137   - 'szwankować', # – dwie lex(prepnp(na,loc))!
138   - 'wypchać', # – dwie lex(np(inst))!
139   - 'zapukać', # – dwie lex(prepnp(do,gen))!
140   - 'zepchnąć', # – dwie lex(prepnp(na,acc))!
141   - 'zrosić', # – dwie lex(np(inst))!
142   - ):
  76 + try:
143 77 entry = Entry(self._subtree, self._entry_meanings, self._meanings, self._frames, self._examples_in, self._examples_out, self._misconnected_out)
144 78 entry.store(self._meanings, self._stored_positions)
  79 + except Exception as e:
  80 + #raise
  81 + traceback.print_exc()
  82 + self._errors.append('{}: {} ({})'.format(base, type(e).__name__, str(e)))
  83 + # errors reach or exceed 10% of entries, but wait until some entries are read – 1 out of 2 might not yet be a reason to panic ;)
  84 + if self._counter >= 100 and len(self._errors) * 10 >= self._counter:
  85 + self.endDocument()
  86 + raise RuntimeError('too many errors encountered, abandoning ship!')
145 87 self._content = ''
146 88 else:
147 89 if name == 'title':
... ... @@ -159,4 +101,7 @@ class WalentyTeiHandler(handler.ContentHandler):
159 101 def endDocument(self):
160 102 self._examples_out.close()
161 103 self._misconnected_out.close()
  104 + print('encountered errors:')
  105 + for error in self._errors:
  106 + print(error)
162 107  
... ...
locale/en/LC_MESSAGES/django.mo
No preview for this file type
locale/en/LC_MESSAGES/django.po
... ... @@ -8,7 +8,7 @@ msgid &quot;&quot;
8 8 msgstr ""
9 9 "Project-Id-Version: PACKAGE VERSION\n"
10 10 "Report-Msgid-Bugs-To: \n"
11   -"POT-Creation-Date: 2021-01-19 13:57+0100\n"
  11 +"POT-Creation-Date: 2021-05-25 13:38+0200\n"
12 12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13 13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14 14 "Language-Team: LANGUAGE <LL@li.org>\n"
... ... @@ -22,20 +22,20 @@ msgstr &quot;&quot;
22 22 msgid "Hasła"
23 23 msgstr "Entries"
24 24  
25   -#: common/templates/base.html:51
  25 +#: common/templates/base.html:52
26 26 msgid "Typy fraz"
27 27 msgstr "Phrase types"
28 28  
29   -#: common/templates/base.html:56
  29 +#: common/templates/base.html:57
30 30 #: dictionary_statistics/templates/dictionary_statistics.html:7
31 31 msgid "Statystyki"
32 32 msgstr "Statistics"
33 33  
34   -#: common/templates/base.html:61
  34 +#: common/templates/base.html:62
35 35 msgid "Pobierz słownik"
36 36 msgstr "Download dictionary"
37 37  
38   -#: common/templates/base.html:80
  38 +#: common/templates/base.html:81
39 39 msgid "EN"
40 40 msgstr "PL"
41 41  
... ... @@ -71,7 +71,7 @@ msgstr &quot;...&quot;
71 71 msgid "Pobieranie"
72 72 msgstr "Download"
73 73  
74   -#: entries/autocompletes.py:27 entries/views.py:385
  74 +#: entries/autocompletes.py:27 entries/views.py:384
75 75 msgid "definicja:"
76 76 msgstr "definition:"
77 77  
... ... @@ -422,7 +422,7 @@ msgid &quot;frazeologizm w postaci {phrase} zamrożony w postaci &lt;i&gt;{phraseo}&lt;/i&gt;&quot;
422 422 msgstr "{phrase} phraseologism frozen in the form <i>{phraseo}</i>"
423 423  
424 424 #: entries/phrase_descriptions/polish_strings.py:9
425   -#: entries/phrase_descriptions/polish_strings.py:336
  425 +#: entries/phrase_descriptions/polish_strings.py:337
426 426 #: entries/polish_strings.py:44
427 427 msgid "podmiot"
428 428 msgstr "subject"
... ... @@ -597,7 +597,7 @@ msgstr &quot;{aspect} %(a2)s %(a1)s&quot;
597 597 #: entries/phrase_descriptions/polish_strings.py:105
598 598 #: entries/phrase_descriptions/polish_strings.py:106
599 599 #: entries/phrase_descriptions/polish_strings.py:107
600   -#: entries/phrase_descriptions/polish_strings.py:295
  600 +#: entries/phrase_descriptions/polish_strings.py:296
601 601 #, python-format
602 602 msgid "%(a1)s"
603 603 msgstr "%(a1)s"
... ... @@ -661,7 +661,7 @@ msgid &quot;%(a1)s przez spójnik podrzędny &lt;i&gt;{conj}&lt;/i&gt;&quot;
661 661 msgstr "%(a1)s by <i>{conj}</i> subordinating conjunction"
662 662  
663 663 #. Translators: wprowadzana
664   -#: entries/phrase_descriptions/polish_strings.py:157
  664 +#: entries/phrase_descriptions/polish_strings.py:158
665 665 #, python-format, python-brace-format
666 666 msgid ""
667 667 "%(a1)s przez <i>{to}, gdy</i> bądź <i>{to}, gdyby</i> w trybie "
... ... @@ -669,7 +669,7 @@ msgid &quot;&quot;
669 669 msgstr "%(a1)s by <i>{to}, gdy</i> or <i>{to}, gdyby</i> in conditional mood"
670 670  
671 671 #. Translators: wprowadzana
672   -#: entries/phrase_descriptions/polish_strings.py:159
  672 +#: entries/phrase_descriptions/polish_strings.py:160
673 673 #, python-format, python-brace-format
674 674 msgid ""
675 675 "%(a1)s przez <i>{to}, że</i> bądź dodatkowo <i>{to}, żeby</i> w "
... ... @@ -679,7 +679,7 @@ msgstr &quot;&quot;
679 679 "constructions"
680 680  
681 681 #. Translators: zależna, wprowadzana
682   -#: entries/phrase_descriptions/polish_strings.py:161
  682 +#: entries/phrase_descriptions/polish_strings.py:162
683 683 #, python-format, python-brace-format
684 684 msgid ""
685 685 "pytajno-%(a1)s %(a2)s przez <i>{to}, co (czy, ile, kto)</i> lub dowolny inny "
... ... @@ -689,7 +689,7 @@ msgstr &quot;&quot;
689 689 "interrogative pronoun"
690 690  
691 691 #. Translators: względna, wprowadzana
692   -#: entries/phrase_descriptions/polish_strings.py:163
  692 +#: entries/phrase_descriptions/polish_strings.py:164
693 693 #, python-format, python-brace-format
694 694 msgid ""
695 695 "%(a1)s %(a2)s przez <i>{to}, co (gdzie, kto)</i> lub dowolny inny zaimek "
... ... @@ -698,25 +698,25 @@ msgstr &quot;&quot;
698 698 "%(a1)s, %(a2)s by <i>{to}, co (gdzie, kto)</i> or any other relative pronoun"
699 699  
700 700 #. Translators: zależna, wprowadzana
701   -#: entries/phrase_descriptions/polish_strings.py:165
  701 +#: entries/phrase_descriptions/polish_strings.py:166
702 702 #, python-format, python-brace-format
703 703 msgid "pytajno-%(a1)s %(a2)s przez <i>{to}, {conj}</i>"
704 704 msgstr "interrogative-%(a1)s, %(a2)s by <i>{to}, {conj}</i>"
705 705  
706 706 #. Translators: względna, wprowadzana
707   -#: entries/phrase_descriptions/polish_strings.py:167
  707 +#: entries/phrase_descriptions/polish_strings.py:168
708 708 #, python-format, python-brace-format
709 709 msgid "%(a1)s %(a2)s przez <i>{to}, {conj}</i>"
710 710 msgstr "%(a1)s, %(a2)s by <i>{to}, {conj}</i>"
711 711  
712 712 #. Translators: wprowadzana
713   -#: entries/phrase_descriptions/polish_strings.py:172
  713 +#: entries/phrase_descriptions/polish_strings.py:173
714 714 #, python-format, python-brace-format
715 715 msgid "%(a1)s przez <i>{to}, {conj}</i>"
716 716 msgstr "%(a1)s by <i>{to}, {conj}</i>"
717 717  
718 718 #. Translators: wprowadzana
719   -#: entries/phrase_descriptions/polish_strings.py:177
  719 +#: entries/phrase_descriptions/polish_strings.py:178
720 720 #, python-format, python-brace-format
721 721 msgid ""
722 722 "%(a1)s przez <i>{prep} {to}, gdy</i> bądź <i>{prep} {to}, gdyby</i> w trybie "
... ... @@ -726,7 +726,7 @@ msgstr &quot;&quot;
726 726 "conditional mood"
727 727  
728 728 #. Translators: wprowadzana
729   -#: entries/phrase_descriptions/polish_strings.py:179
  729 +#: entries/phrase_descriptions/polish_strings.py:180
730 730 #, python-format, python-brace-format
731 731 msgid ""
732 732 "%(a1)s przez <i>{prep} {to}, że</i> bądź dodatkowo <i>{prep} {to}, żeby</i> "
... ... @@ -736,7 +736,7 @@ msgstr &quot;&quot;
736 736 "negated constructions"
737 737  
738 738 #. Translators: zależna, wprowadzana
739   -#: entries/phrase_descriptions/polish_strings.py:181
  739 +#: entries/phrase_descriptions/polish_strings.py:182
740 740 #, python-format, python-brace-format
741 741 msgid ""
742 742 "pytajno-%(a1)s %(a2)s przez <i>{prep} {to}, co (czy, ile, kto)</i> lub "
... ... @@ -746,7 +746,7 @@ msgstr &quot;&quot;
746 746 "any other interrogative pronoun"
747 747  
748 748 #. Translators: względna, wprowadzana
749   -#: entries/phrase_descriptions/polish_strings.py:183
  749 +#: entries/phrase_descriptions/polish_strings.py:184
750 750 #, python-format, python-brace-format
751 751 msgid ""
752 752 "%(a1)s %(a2)s przez <i>{prep} {to}, co (gdzie, kto)</i> lub dowolny inny "
... ... @@ -756,132 +756,132 @@ msgstr &quot;&quot;
756 756 "pronoun"
757 757  
758 758 #. Translators: zależna, wprowadzana
759   -#: entries/phrase_descriptions/polish_strings.py:185
  759 +#: entries/phrase_descriptions/polish_strings.py:186
760 760 #, python-format, python-brace-format
761 761 msgid "pytajno-%(a1)s %(a2)s przez <i>{prep} {to}, {conj}</i>"
762 762 msgstr "interrogative-%(a1)s, %(a2)s by <i>{prep} {to}, {conj}</i>"
763 763  
764 764 #. Translators: względna, wprowadzana
765   -#: entries/phrase_descriptions/polish_strings.py:187
  765 +#: entries/phrase_descriptions/polish_strings.py:188
766 766 #, python-format, python-brace-format
767 767 msgid "%(a1)s %(a2)s przez <i>{prep} {to}, {conj}</i>"
768 768 msgstr "%(a1)s, %(a2)s by <i>{prep} {to}, {conj}</i>"
769 769  
770 770 #. Translators: wprowadzana
771   -#: entries/phrase_descriptions/polish_strings.py:192
  771 +#: entries/phrase_descriptions/polish_strings.py:193
772 772 #, python-format, python-brace-format
773 773 msgid "%(a1)s przez <i>{prep} {to}, {conj}</i>"
774 774 msgstr "%(a1)s by <i>{prep} {to}, {conj}</i>"
775 775  
776   -#: entries/phrase_descriptions/polish_strings.py:198
  776 +#: entries/phrase_descriptions/polish_strings.py:199
777 777 #, python-format
778 778 msgctxt "fraza przysłówkowa lokatywna/ablatywna/..."
779 779 msgid "%(a1)s %(a2)s %(a3)s"
780 780 msgstr "%(a3)s %(a2)s %(a1)s"
781 781  
782   -#: entries/phrase_descriptions/polish_strings.py:200
783   -#: entries/phrase_descriptions/polish_strings.py:224
784   -#: entries/phrase_descriptions/polish_strings.py:239
  782 +#: entries/phrase_descriptions/polish_strings.py:201
  783 +#: entries/phrase_descriptions/polish_strings.py:225
  784 +#: entries/phrase_descriptions/polish_strings.py:240
785 785 #: entries/polish_strings.py:101
786 786 msgid "(miejsce)"
787 787 msgstr "(place)"
788 788  
789   -#: entries/phrase_descriptions/polish_strings.py:201
790   -#: entries/phrase_descriptions/polish_strings.py:225
791   -#: entries/phrase_descriptions/polish_strings.py:240
  789 +#: entries/phrase_descriptions/polish_strings.py:202
  790 +#: entries/phrase_descriptions/polish_strings.py:226
  791 +#: entries/phrase_descriptions/polish_strings.py:241
792 792 #: entries/polish_strings.py:102
793 793 msgid "(miejsce początkowe)"
794 794 msgstr "(start point)"
795 795  
796   -#: entries/phrase_descriptions/polish_strings.py:202
797   -#: entries/phrase_descriptions/polish_strings.py:226
798   -#: entries/phrase_descriptions/polish_strings.py:241
  796 +#: entries/phrase_descriptions/polish_strings.py:203
  797 +#: entries/phrase_descriptions/polish_strings.py:227
  798 +#: entries/phrase_descriptions/polish_strings.py:242
799 799 #: entries/polish_strings.py:103
800 800 msgid "(miejsce końcowe)"
801 801 msgstr "(end point)"
802 802  
803   -#: entries/phrase_descriptions/polish_strings.py:203
804   -#: entries/phrase_descriptions/polish_strings.py:227
805   -#: entries/phrase_descriptions/polish_strings.py:242
  803 +#: entries/phrase_descriptions/polish_strings.py:204
  804 +#: entries/phrase_descriptions/polish_strings.py:228
  805 +#: entries/phrase_descriptions/polish_strings.py:243
806 806 #: entries/polish_strings.py:104
807 807 msgid "(trasa)"
808 808 msgstr "(path)"
809 809  
810   -#: entries/phrase_descriptions/polish_strings.py:204
811   -#: entries/phrase_descriptions/polish_strings.py:228
812   -#: entries/phrase_descriptions/polish_strings.py:243
  810 +#: entries/phrase_descriptions/polish_strings.py:205
  811 +#: entries/phrase_descriptions/polish_strings.py:229
  812 +#: entries/phrase_descriptions/polish_strings.py:244
813 813 #: entries/polish_strings.py:105
814 814 msgid "(czasu)"
815 815 msgstr "(time)"
816 816  
817   -#: entries/phrase_descriptions/polish_strings.py:205
818   -#: entries/phrase_descriptions/polish_strings.py:229
819   -#: entries/phrase_descriptions/polish_strings.py:244
  817 +#: entries/phrase_descriptions/polish_strings.py:206
  818 +#: entries/phrase_descriptions/polish_strings.py:230
  819 +#: entries/phrase_descriptions/polish_strings.py:245
820 820 #: entries/polish_strings.py:106
821 821 msgid "(trwania)"
822 822 msgstr "(duration)"
823 823  
824   -#: entries/phrase_descriptions/polish_strings.py:206
  824 +#: entries/phrase_descriptions/polish_strings.py:207
825 825 #, python-format
826 826 msgctxt "fraza przysłówkowa"
827 827 msgid "%(a1)s %(a2)s sposobu"
828 828 msgstr "%(a2)s %(a1)s describing manner"
829 829  
830   -#: entries/phrase_descriptions/polish_strings.py:207
831   -#: entries/phrase_descriptions/polish_strings.py:232
832   -#: entries/phrase_descriptions/polish_strings.py:246
  830 +#: entries/phrase_descriptions/polish_strings.py:208
  831 +#: entries/phrase_descriptions/polish_strings.py:233
  832 +#: entries/phrase_descriptions/polish_strings.py:247
833 833 #: entries/polish_strings.py:108
834 834 msgid "(przyczyny)"
835 835 msgstr "(reason)"
836 836  
837   -#: entries/phrase_descriptions/polish_strings.py:208
838   -#: entries/phrase_descriptions/polish_strings.py:233
839   -#: entries/phrase_descriptions/polish_strings.py:247
  837 +#: entries/phrase_descriptions/polish_strings.py:209
  838 +#: entries/phrase_descriptions/polish_strings.py:234
  839 +#: entries/phrase_descriptions/polish_strings.py:248
840 840 #: entries/polish_strings.py:109
841 841 msgid "(celu)"
842 842 msgstr "(goal)"
843 843  
844   -#: entries/phrase_descriptions/polish_strings.py:209
845   -#: entries/phrase_descriptions/polish_strings.py:234
846   -#: entries/phrase_descriptions/polish_strings.py:248
  844 +#: entries/phrase_descriptions/polish_strings.py:210
  845 +#: entries/phrase_descriptions/polish_strings.py:235
  846 +#: entries/phrase_descriptions/polish_strings.py:249
847 847 #: entries/polish_strings.py:110
848 848 msgid "(narzędzie)"
849 849 msgstr "(tool)"
850 850  
851 851 #. Translators: fraza, lokatywna/ablatywna/...
852 852 #. Translators: mowa, niezależna
853   -#: entries/phrase_descriptions/polish_strings.py:222
854   -#: entries/phrase_descriptions/polish_strings.py:270
  853 +#: entries/phrase_descriptions/polish_strings.py:223
  854 +#: entries/phrase_descriptions/polish_strings.py:271
855 855 #, python-format
856 856 msgid "%(a1)s %(a2)s"
857 857 msgstr "%(a2)s %(a1)s"
858 858  
859 859 #. Translators: fraza
860   -#: entries/phrase_descriptions/polish_strings.py:231
  860 +#: entries/phrase_descriptions/polish_strings.py:232
861 861 #, python-format
862 862 msgid "%(a1)s sposobu"
863 863 msgstr "%(a1)s describing manner"
864 864  
865   -#: entries/phrase_descriptions/polish_strings.py:237
  865 +#: entries/phrase_descriptions/polish_strings.py:238
866 866 #, python-format
867 867 msgctxt "dowolna fraza lokatywna/ablatywna/..."
868 868 msgid "%(a1)s %(a2)s %(a3)s"
869 869 msgstr "%(a1)s %(a3)s %(a2)s"
870 870  
871   -#: entries/phrase_descriptions/polish_strings.py:245
  871 +#: entries/phrase_descriptions/polish_strings.py:246
872 872 #, python-format
873 873 msgctxt "dowolna fraza"
874 874 msgid "%(a1)s %(a2)s sposobu"
875 875 msgstr "%(a1)s %(a2)s describing manner"
876 876  
877 877 #. Translators: zaimki, przysłówkowe
878   -#: entries/phrase_descriptions/polish_strings.py:253
  878 +#: entries/phrase_descriptions/polish_strings.py:254
879 879 #, python-format
880 880 msgid "wyłącznie %(a1)s %(a2)s <i>jak</i>, <i>tak</i>"
881 881 msgstr "only <i>jak</i>, <i>tak</i> %(a2)s %(a1)s"
882 882  
883 883 #. Translators: fraza, przysłówkowa, fraza, konstrukcje, przysłówkowe
884   -#: entries/phrase_descriptions/polish_strings.py:257
  884 +#: entries/phrase_descriptions/polish_strings.py:258
885 885 #, python-format
886 886 msgid ""
887 887 "%(a1)s %(a2)s (%(a3)s z centrum przysłówkowym oraz %(a4)s przyimkowo-%(a5)s "
... ... @@ -891,13 +891,13 @@ msgstr &quot;&quot;
891 891 "like <i>na pewno</i>, <i>bez mała</i>)"
892 892  
893 893 #. Translators: fraza, porównawcza, wprowadzana
894   -#: entries/phrase_descriptions/polish_strings.py:261
  894 +#: entries/phrase_descriptions/polish_strings.py:262
895 895 #, python-format, python-brace-format
896 896 msgid "%(a1)s %(a2)s %(a3)s przez <i>{prep}</i>"
897 897 msgstr "%(a2)s %(a1)s %(a3)s by <i>{prep}</i>"
898 898  
899 899 #. Translators: fraza, niechromatyczna, specyficzna, fraza, realizowana
900   -#: entries/phrase_descriptions/polish_strings.py:265
  900 +#: entries/phrase_descriptions/polish_strings.py:266
901 901 #, python-format
902 902 msgid ""
903 903 "%(a1)s %(a2)s, czyli %(a3)s %(a4)s rzeczownikowa w przypadku strukturalnym, "
... ... @@ -909,7 +909,7 @@ msgstr &quot;&quot;
909 909 "uniquely "
910 910  
911 911 #. Translators: partykuła, realizująca
912   -#: entries/phrase_descriptions/polish_strings.py:274
  912 +#: entries/phrase_descriptions/polish_strings.py:275
913 913 #, python-format
914 914 msgid "%(a1)s <i>się</i> %(a2)s użycie zwrotne czasownika (<i>sam siebie</i>)"
915 915 msgstr ""
... ... @@ -917,7 +917,7 @@ msgstr &quot;&quot;
917 917 "i>)"
918 918  
919 919 #. Translators: partykuła, realizująca
920   -#: entries/phrase_descriptions/polish_strings.py:278
  920 +#: entries/phrase_descriptions/polish_strings.py:279
921 921 #, python-format
922 922 msgid ""
923 923 "%(a1)s <i>się</i> %(a2)s użycie wzajemnościowe czasownika (<i>siebie "
... ... @@ -927,7 +927,7 @@ msgstr &quot;&quot;
927 927 "each other</i>)"
928 928  
929 929 #. Translators: subject
930   -#: entries/phrase_descriptions/polish_strings.py:283
  930 +#: entries/phrase_descriptions/polish_strings.py:284
931 931 #, python-format
932 932 msgid ""
933 933 "%(a1)s czasownika wymagającego bezokolicznika, którego własności są tożsame "
... ... @@ -937,17 +937,16 @@ msgstr &quot;&quot;
937 937 "those imposed by the infinitive, including no subject"
938 938  
939 939 #. Translators: fraza, posesywna, odpowiadająca
940   -#: entries/phrase_descriptions/polish_strings.py:287
941   -#, python-format
  940 +#: entries/phrase_descriptions/polish_strings.py:288
942 941 msgid ""
943 942 "%(a1)s %(a2)s %(a3)s na pytanie <i>czyj?</i>, np. <i>mój</i>, <i>pański</i>, "
944   -"<i>Piotra</i>"
  943 +"<i>Anny</i>"
945 944 msgstr ""
946   -"%(a2)s %(a1)s %(a3)s the question <i>czyj? (whose?)</i>, e.g. <i>mój (my)</"
947   -"i>, <i>pański</i>, <i>Piotra (Peter’s)</i>"
  945 +"%(a2)s %(a1)s %(a3)s the question <i>czyj?</i>, e.g. <i>mój</"
  946 +"i>, <i>pański</i>, <i>Anny</i>"
948 947  
949 948 #. Translators: fraza, rzeczownikowa, stosowana
950   -#: entries/phrase_descriptions/polish_strings.py:292
  949 +#: entries/phrase_descriptions/polish_strings.py:293
951 950 #, python-format
952 951 msgid ""
953 952 "%(a1)s przyimkowo-%(a2)s z przyimkiem <i>po</i> %(a3)s w konstrukcjach "
... ... @@ -960,487 +959,487 @@ msgstr &quot;&quot;
960 959 "locative case (<i>dać każdemu po jabłku</i>), but in the case of numeral "
961 960 "phrases, accusative case is used (<i>dać każdemu po dwa jabłka</i>)"
962 961  
963   -#: entries/phrase_descriptions/polish_strings.py:314
  962 +#: entries/phrase_descriptions/polish_strings.py:315
964 963 #: entries/polish_strings.py:102
965 964 msgid "ablatywna"
966 965 msgstr "ablative"
967 966  
968   -#: entries/phrase_descriptions/polish_strings.py:314
  967 +#: entries/phrase_descriptions/polish_strings.py:315
969 968 msgid "ablatywnej"
970 969 msgstr "ablative"
971 970  
972   -#: entries/phrase_descriptions/polish_strings.py:314
  971 +#: entries/phrase_descriptions/polish_strings.py:315
973 972 msgid "ablatywną"
974 973 msgstr "ablative"
975 974  
976   -#: entries/phrase_descriptions/polish_strings.py:315
  975 +#: entries/phrase_descriptions/polish_strings.py:316
977 976 #: entries/polish_strings.py:103
978 977 msgid "adlatywna"
979 978 msgstr "adlative"
980 979  
981   -#: entries/phrase_descriptions/polish_strings.py:315
  980 +#: entries/phrase_descriptions/polish_strings.py:316
982 981 msgid "adlatywnej"
983 982 msgstr "adlative"
984 983  
985   -#: entries/phrase_descriptions/polish_strings.py:315
  984 +#: entries/phrase_descriptions/polish_strings.py:316
986 985 msgid "adlatywną"
987 986 msgstr "adlative"
988 987  
989   -#: entries/phrase_descriptions/polish_strings.py:316
  988 +#: entries/phrase_descriptions/polish_strings.py:317
990 989 #: entries/polish_strings.py:124
991 990 msgid "bezokolicznikowa"
992 991 msgstr "infinitival"
993 992  
994   -#: entries/phrase_descriptions/polish_strings.py:316
  993 +#: entries/phrase_descriptions/polish_strings.py:317
995 994 msgid "bezokolicznikowej"
996 995 msgstr "infinitival"
997 996  
998   -#: entries/phrase_descriptions/polish_strings.py:316
  997 +#: entries/phrase_descriptions/polish_strings.py:317
999 998 msgid "bezokolicznikową"
1000 999 msgstr "infinitival"
1001 1000  
1002   -#: entries/phrase_descriptions/polish_strings.py:317
  1001 +#: entries/phrase_descriptions/polish_strings.py:318
1003 1002 #: entries/polish_strings.py:109
1004 1003 msgid "destynacyjna"
1005 1004 msgstr "destinative"
1006 1005  
1007   -#: entries/phrase_descriptions/polish_strings.py:317
  1006 +#: entries/phrase_descriptions/polish_strings.py:318
1008 1007 msgid "destynacyjnej"
1009 1008 msgstr "destinative"
1010 1009  
1011   -#: entries/phrase_descriptions/polish_strings.py:317
  1010 +#: entries/phrase_descriptions/polish_strings.py:318
1012 1011 msgid "destynacyjną"
1013 1012 msgstr "destinative"
1014 1013  
1015   -#: entries/phrase_descriptions/polish_strings.py:318
  1014 +#: entries/phrase_descriptions/polish_strings.py:319
1016 1015 msgid "dokonana"
1017 1016 msgstr "perfect"
1018 1017  
1019   -#: entries/phrase_descriptions/polish_strings.py:318
  1018 +#: entries/phrase_descriptions/polish_strings.py:319
1020 1019 msgid "dokonanej"
1021 1020 msgstr "perfect"
1022 1021  
1023   -#: entries/phrase_descriptions/polish_strings.py:318
  1022 +#: entries/phrase_descriptions/polish_strings.py:319
1024 1023 msgid "dokonaną"
1025 1024 msgstr "perfect"
1026 1025  
1027   -#: entries/phrase_descriptions/polish_strings.py:319
  1026 +#: entries/phrase_descriptions/polish_strings.py:320
1028 1027 msgid "dowolna"
1029 1028 msgstr "any"
1030 1029  
1031   -#: entries/phrase_descriptions/polish_strings.py:319
  1030 +#: entries/phrase_descriptions/polish_strings.py:320
1032 1031 msgid "dowolnej"
1033 1032 msgstr "any"
1034 1033  
1035   -#: entries/phrase_descriptions/polish_strings.py:319
  1034 +#: entries/phrase_descriptions/polish_strings.py:320
1036 1035 msgid "dowolną"
1037 1036 msgstr "any"
1038 1037  
1039   -#: entries/phrase_descriptions/polish_strings.py:320
  1038 +#: entries/phrase_descriptions/polish_strings.py:321
1040 1039 #: entries/polish_strings.py:106
1041 1040 msgid "duratywna"
1042 1041 msgstr "durative"
1043 1042  
1044   -#: entries/phrase_descriptions/polish_strings.py:320
  1043 +#: entries/phrase_descriptions/polish_strings.py:321
1045 1044 msgid "duratywnej"
1046 1045 msgstr "durative"
1047 1046  
1048   -#: entries/phrase_descriptions/polish_strings.py:320
  1047 +#: entries/phrase_descriptions/polish_strings.py:321
1049 1048 msgid "duratywną"
1050 1049 msgstr "durative"
1051 1050  
1052   -#: entries/phrase_descriptions/polish_strings.py:321
  1051 +#: entries/phrase_descriptions/polish_strings.py:322
1053 1052 msgid "fraza"
1054 1053 msgstr "phrase"
1055 1054  
1056   -#: entries/phrase_descriptions/polish_strings.py:321
  1055 +#: entries/phrase_descriptions/polish_strings.py:322
1057 1056 msgid "frazy"
1058 1057 msgstr "phrase"
1059 1058  
1060   -#: entries/phrase_descriptions/polish_strings.py:321
  1059 +#: entries/phrase_descriptions/polish_strings.py:322
1061 1060 msgid "frazą"
1062 1061 msgstr "phrase"
1063 1062  
1064   -#: entries/phrase_descriptions/polish_strings.py:322
  1063 +#: entries/phrase_descriptions/polish_strings.py:323
1065 1064 #: entries/polish_strings.py:110
1066 1065 msgid "instrumentalna"
1067 1066 msgstr "instrumental"
1068 1067  
1069   -#: entries/phrase_descriptions/polish_strings.py:322
  1068 +#: entries/phrase_descriptions/polish_strings.py:323
1070 1069 msgid "instrumentalnej"
1071 1070 msgstr "instrumental"
1072 1071  
1073   -#: entries/phrase_descriptions/polish_strings.py:322
  1072 +#: entries/phrase_descriptions/polish_strings.py:323
1074 1073 msgid "instrumentalną"
1075 1074 msgstr "instrumental"
1076 1075  
1077   -#: entries/phrase_descriptions/polish_strings.py:323
  1076 +#: entries/phrase_descriptions/polish_strings.py:324
1078 1077 #: entries/polish_strings.py:132
1079 1078 msgid "imiesłowowa"
1080 1079 msgstr "participal"
1081 1080  
1082   -#: entries/phrase_descriptions/polish_strings.py:323
  1081 +#: entries/phrase_descriptions/polish_strings.py:324
1083 1082 msgid "imiesłowowej"
1084 1083 msgstr "participal"
1085 1084  
1086   -#: entries/phrase_descriptions/polish_strings.py:323
  1085 +#: entries/phrase_descriptions/polish_strings.py:324
1087 1086 msgid "imiesłowową"
1088 1087 msgstr "participal"
1089 1088  
1090   -#: entries/phrase_descriptions/polish_strings.py:324
  1089 +#: entries/phrase_descriptions/polish_strings.py:325
1091 1090 #: entries/polish_strings.py:108
1092 1091 msgid "kauzatywna"
1093 1092 msgstr "causative"
1094 1093  
1095   -#: entries/phrase_descriptions/polish_strings.py:324
  1094 +#: entries/phrase_descriptions/polish_strings.py:325
1096 1095 msgid "kauzatywnej"
1097 1096 msgstr "causative"
1098 1097  
1099   -#: entries/phrase_descriptions/polish_strings.py:324
  1098 +#: entries/phrase_descriptions/polish_strings.py:325
1100 1099 msgid "kauzatywną"
1101 1100 msgstr "causative"
1102 1101  
1103   -#: entries/phrase_descriptions/polish_strings.py:325
  1102 +#: entries/phrase_descriptions/polish_strings.py:326
1104 1103 msgid "konstrukcje"
1105 1104 msgstr "constructions"
1106 1105  
1107   -#: entries/phrase_descriptions/polish_strings.py:325
  1106 +#: entries/phrase_descriptions/polish_strings.py:326
1108 1107 msgid "konstrukcyj"
1109 1108 msgstr "constructions"
1110 1109  
1111   -#: entries/phrase_descriptions/polish_strings.py:325
  1110 +#: entries/phrase_descriptions/polish_strings.py:326
1112 1111 msgid "konstrukcjami"
1113 1112 msgstr "constructions"
1114 1113  
1115   -#: entries/phrase_descriptions/polish_strings.py:326
  1114 +#: entries/phrase_descriptions/polish_strings.py:327
1116 1115 #: entries/polish_strings.py:129
1117 1116 msgid "liczebnikowa"
1118 1117 msgstr "numeral"
1119 1118  
1120   -#: entries/phrase_descriptions/polish_strings.py:326
  1119 +#: entries/phrase_descriptions/polish_strings.py:327
1121 1120 msgid "liczebnikowej"
1122 1121 msgstr "numeral"
1123 1122  
1124   -#: entries/phrase_descriptions/polish_strings.py:326
  1123 +#: entries/phrase_descriptions/polish_strings.py:327
1125 1124 msgid "liczebnikową"
1126 1125 msgstr "numeral"
1127 1126  
1128   -#: entries/phrase_descriptions/polish_strings.py:327
  1127 +#: entries/phrase_descriptions/polish_strings.py:328
1129 1128 #: entries/polish_strings.py:101
1130 1129 msgid "lokatywna"
1131 1130 msgstr "locative"
1132 1131  
1133   -#: entries/phrase_descriptions/polish_strings.py:327
  1132 +#: entries/phrase_descriptions/polish_strings.py:328
1134 1133 msgid "lokatywnej"
1135 1134 msgstr "locative"
1136 1135  
1137   -#: entries/phrase_descriptions/polish_strings.py:327
  1136 +#: entries/phrase_descriptions/polish_strings.py:328
1138 1137 msgid "lokatywną"
1139 1138 msgstr "locative"
1140 1139  
1141   -#: entries/phrase_descriptions/polish_strings.py:328
  1140 +#: entries/phrase_descriptions/polish_strings.py:329
1142 1141 msgid "mowa"
1143 1142 msgstr "speech"
1144 1143  
1145   -#: entries/phrase_descriptions/polish_strings.py:328
  1144 +#: entries/phrase_descriptions/polish_strings.py:329
1146 1145 msgid "mowy"
1147 1146 msgstr "speech"
1148 1147  
1149   -#: entries/phrase_descriptions/polish_strings.py:328
  1148 +#: entries/phrase_descriptions/polish_strings.py:329
1150 1149 msgid "mową"
1151 1150 msgstr "speech"
1152 1151  
1153   -#: entries/phrase_descriptions/polish_strings.py:329
  1152 +#: entries/phrase_descriptions/polish_strings.py:330
1154 1153 #: entries/polish_strings.py:127
1155 1154 msgid "niechromatyczna"
1156 1155 msgstr "nonchromatic"
1157 1156  
1158   -#: entries/phrase_descriptions/polish_strings.py:329
  1157 +#: entries/phrase_descriptions/polish_strings.py:330
1159 1158 msgid "niechromatycznej"
1160 1159 msgstr "nonchromatic"
1161 1160  
1162   -#: entries/phrase_descriptions/polish_strings.py:329
  1161 +#: entries/phrase_descriptions/polish_strings.py:330
1163 1162 msgid "niechromatyczną"
1164 1163 msgstr "nonchromatic"
1165 1164  
1166   -#: entries/phrase_descriptions/polish_strings.py:330
  1165 +#: entries/phrase_descriptions/polish_strings.py:331
1167 1166 msgid "niedokonana"
1168 1167 msgstr "imperfect"
1169 1168  
1170   -#: entries/phrase_descriptions/polish_strings.py:330
  1169 +#: entries/phrase_descriptions/polish_strings.py:331
1171 1170 msgid "niedokonanej"
1172 1171 msgstr "imperfect"
1173 1172  
1174   -#: entries/phrase_descriptions/polish_strings.py:330
  1173 +#: entries/phrase_descriptions/polish_strings.py:331
1175 1174 msgid "niedokonaną"
1176 1175 msgstr "imperfect"
1177 1176  
1178   -#: entries/phrase_descriptions/polish_strings.py:331
  1177 +#: entries/phrase_descriptions/polish_strings.py:332
1179 1178 msgid "niezależna"
1180 1179 msgstr "direct"
1181 1180  
1182   -#: entries/phrase_descriptions/polish_strings.py:331
  1181 +#: entries/phrase_descriptions/polish_strings.py:332
1183 1182 msgid "niezależnej"
1184 1183 msgstr "direct"
1185 1184  
1186   -#: entries/phrase_descriptions/polish_strings.py:331
  1185 +#: entries/phrase_descriptions/polish_strings.py:332
1187 1186 msgid "niezależną"
1188 1187 msgstr "direct"
1189 1188  
1190   -#: entries/phrase_descriptions/polish_strings.py:332
  1189 +#: entries/phrase_descriptions/polish_strings.py:333
1191 1190 msgid "odpowiadająca"
1192 1191 msgstr "answering"
1193 1192  
1194   -#: entries/phrase_descriptions/polish_strings.py:332
  1193 +#: entries/phrase_descriptions/polish_strings.py:333
1195 1194 msgid "odpowiadającej"
1196 1195 msgstr "answering"
1197 1196  
1198   -#: entries/phrase_descriptions/polish_strings.py:332
  1197 +#: entries/phrase_descriptions/polish_strings.py:333
1199 1198 msgid "odpowiadającą"
1200 1199 msgstr "answering"
1201 1200  
1202   -#: entries/phrase_descriptions/polish_strings.py:333
  1201 +#: entries/phrase_descriptions/polish_strings.py:334
1203 1202 msgid "odsłownikowa"
1204 1203 msgstr "gerundial"
1205 1204  
1206   -#: entries/phrase_descriptions/polish_strings.py:333
  1205 +#: entries/phrase_descriptions/polish_strings.py:334
1207 1206 msgid "odsłownikowej"
1208 1207 msgstr "gerundial"
1209 1208  
1210   -#: entries/phrase_descriptions/polish_strings.py:333
  1209 +#: entries/phrase_descriptions/polish_strings.py:334
1211 1210 msgid "odsłownikową"
1212 1211 msgstr "gerundial"
1213 1212  
1214   -#: entries/phrase_descriptions/polish_strings.py:334
  1213 +#: entries/phrase_descriptions/polish_strings.py:335
1215 1214 #: entries/polish_strings.py:139
1216 1215 msgid "partykuła"
1217 1216 msgstr "particle"
1218 1217  
1219   -#: entries/phrase_descriptions/polish_strings.py:334
  1218 +#: entries/phrase_descriptions/polish_strings.py:335
1220 1219 msgid "partykuły"
1221 1220 msgstr "particle"
1222 1221  
1223   -#: entries/phrase_descriptions/polish_strings.py:334
  1222 +#: entries/phrase_descriptions/polish_strings.py:335
1224 1223 msgid "partykułą"
1225 1224 msgstr "particle"
1226 1225  
1227   -#: entries/phrase_descriptions/polish_strings.py:335
  1226 +#: entries/phrase_descriptions/polish_strings.py:336
1228 1227 #: entries/polish_strings.py:104
1229 1228 msgid "perlatywna"
1230 1229 msgstr "perlative"
1231 1230  
1232   -#: entries/phrase_descriptions/polish_strings.py:335
  1231 +#: entries/phrase_descriptions/polish_strings.py:336
1233 1232 msgid "perlatywnej"
1234 1233 msgstr "perlative"
1235 1234  
1236   -#: entries/phrase_descriptions/polish_strings.py:335
  1235 +#: entries/phrase_descriptions/polish_strings.py:336
1237 1236 msgid "perlatywną"
1238 1237 msgstr "perlative"
1239 1238  
1240   -#: entries/phrase_descriptions/polish_strings.py:336
  1239 +#: entries/phrase_descriptions/polish_strings.py:337
1241 1240 msgid "podmiotu"
1242 1241 msgstr "subject"
1243 1242  
1244   -#: entries/phrase_descriptions/polish_strings.py:336
  1243 +#: entries/phrase_descriptions/polish_strings.py:337
1245 1244 msgid "podmiotem"
1246 1245 msgstr "subject"
1247 1246  
1248   -#: entries/phrase_descriptions/polish_strings.py:337
  1247 +#: entries/phrase_descriptions/polish_strings.py:338
1249 1248 #: entries/polish_strings.py:131
1250 1249 msgid "posesywna"
1251 1250 msgstr "possesive"
1252 1251  
1253   -#: entries/phrase_descriptions/polish_strings.py:337
  1252 +#: entries/phrase_descriptions/polish_strings.py:338
1254 1253 msgid "posesywnej"
1255 1254 msgstr "possesive"
1256 1255  
1257   -#: entries/phrase_descriptions/polish_strings.py:337
  1256 +#: entries/phrase_descriptions/polish_strings.py:338
1258 1257 msgid "posesywną"
1259 1258 msgstr "possesive"
1260 1259  
1261   -#: entries/phrase_descriptions/polish_strings.py:338
  1260 +#: entries/phrase_descriptions/polish_strings.py:339
1262 1261 #: entries/polish_strings.py:117
1263 1262 msgid "porównawcza"
1264 1263 msgstr "comparative"
1265 1264  
1266   -#: entries/phrase_descriptions/polish_strings.py:338
  1265 +#: entries/phrase_descriptions/polish_strings.py:339
1267 1266 msgid "porównawczej"
1268 1267 msgstr "comparative"
1269 1268  
1270   -#: entries/phrase_descriptions/polish_strings.py:338
  1269 +#: entries/phrase_descriptions/polish_strings.py:339
1271 1270 msgid "porównawczą"
1272 1271 msgstr "comparative"
1273 1272  
1274   -#: entries/phrase_descriptions/polish_strings.py:339
  1273 +#: entries/phrase_descriptions/polish_strings.py:340
1275 1274 #: entries/polish_strings.py:115
1276 1275 msgid "przymiotnikowa"
1277 1276 msgstr "adjectival"
1278 1277  
1279   -#: entries/phrase_descriptions/polish_strings.py:339
  1278 +#: entries/phrase_descriptions/polish_strings.py:340
1280 1279 msgid "przymiotnikowej"
1281 1280 msgstr "adjectival"
1282 1281  
1283   -#: entries/phrase_descriptions/polish_strings.py:339
  1282 +#: entries/phrase_descriptions/polish_strings.py:340
1284 1283 msgid "przymiotnikową"
1285 1284 msgstr "adjectival"
1286 1285  
1287   -#: entries/phrase_descriptions/polish_strings.py:340
  1286 +#: entries/phrase_descriptions/polish_strings.py:341
1288 1287 #: entries/polish_strings.py:116
1289 1288 msgid "przysłówkowa"
1290 1289 msgstr "adverbial"
1291 1290  
1292   -#: entries/phrase_descriptions/polish_strings.py:340
  1291 +#: entries/phrase_descriptions/polish_strings.py:341
1293 1292 msgid "przysłówkowej"
1294 1293 msgstr "adverbial"
1295 1294  
1296   -#: entries/phrase_descriptions/polish_strings.py:340
  1295 +#: entries/phrase_descriptions/polish_strings.py:341
1297 1296 msgid "przysłówkową"
1298 1297 msgstr "adverbial"
1299 1298  
1300   -#: entries/phrase_descriptions/polish_strings.py:341
  1299 +#: entries/phrase_descriptions/polish_strings.py:342
1301 1300 msgid "przysłówkowe"
1302 1301 msgstr "adverbial"
1303 1302  
1304   -#: entries/phrase_descriptions/polish_strings.py:341
  1303 +#: entries/phrase_descriptions/polish_strings.py:342
1305 1304 msgid "przysłówkowych"
1306 1305 msgstr "adverbial"
1307 1306  
1308   -#: entries/phrase_descriptions/polish_strings.py:341
  1307 +#: entries/phrase_descriptions/polish_strings.py:342
1309 1308 msgid "przysłówkowymi"
1310 1309 msgstr "adverbial"
1311 1310  
1312   -#: entries/phrase_descriptions/polish_strings.py:342
  1311 +#: entries/phrase_descriptions/polish_strings.py:343
1313 1312 msgid "realizowana"
1314 1313 msgstr "realised"
1315 1314  
1316   -#: entries/phrase_descriptions/polish_strings.py:342
  1315 +#: entries/phrase_descriptions/polish_strings.py:343
1317 1316 msgid "realizowanej"
1318 1317 msgstr "realised"
1319 1318  
1320   -#: entries/phrase_descriptions/polish_strings.py:342
  1319 +#: entries/phrase_descriptions/polish_strings.py:343
1321 1320 msgid "realizowaną"
1322 1321 msgstr "realised"
1323 1322  
1324   -#: entries/phrase_descriptions/polish_strings.py:343
  1323 +#: entries/phrase_descriptions/polish_strings.py:344
1325 1324 msgid "realizująca"
1326 1325 msgstr "realising"
1327 1326  
1328   -#: entries/phrase_descriptions/polish_strings.py:343
  1327 +#: entries/phrase_descriptions/polish_strings.py:344
1329 1328 msgid "realizującej"
1330 1329 msgstr "realising"
1331 1330  
1332   -#: entries/phrase_descriptions/polish_strings.py:343
  1331 +#: entries/phrase_descriptions/polish_strings.py:344
1333 1332 msgid "realizującą"
1334 1333 msgstr "realising"
1335 1334  
1336   -#: entries/phrase_descriptions/polish_strings.py:344
  1335 +#: entries/phrase_descriptions/polish_strings.py:345
1337 1336 #: entries/polish_strings.py:128
1338 1337 msgid "rzeczownikowa"
1339 1338 msgstr "nominal"
1340 1339  
1341   -#: entries/phrase_descriptions/polish_strings.py:344
  1340 +#: entries/phrase_descriptions/polish_strings.py:345
1342 1341 msgid "rzeczownikowej"
1343 1342 msgstr "nominal"
1344 1343  
1345   -#: entries/phrase_descriptions/polish_strings.py:344
  1344 +#: entries/phrase_descriptions/polish_strings.py:345
1346 1345 msgid "rzeczownikową"
1347 1346 msgstr "nominal"
1348 1347  
1349   -#: entries/phrase_descriptions/polish_strings.py:345
  1348 +#: entries/phrase_descriptions/polish_strings.py:346
1350 1349 msgid "specyficzna"
1351 1350 msgstr "specific"
1352 1351  
1353   -#: entries/phrase_descriptions/polish_strings.py:345
  1352 +#: entries/phrase_descriptions/polish_strings.py:346
1354 1353 msgid "specyficznej"
1355 1354 msgstr "specific"
1356 1355  
1357   -#: entries/phrase_descriptions/polish_strings.py:345
  1356 +#: entries/phrase_descriptions/polish_strings.py:346
1358 1357 msgid "specyficzną"
1359 1358 msgstr "specific"
1360 1359  
1361   -#: entries/phrase_descriptions/polish_strings.py:346
  1360 +#: entries/phrase_descriptions/polish_strings.py:347
1362 1361 msgid "stosowana"
1363 1362 msgstr "used"
1364 1363  
1365   -#: entries/phrase_descriptions/polish_strings.py:346
  1364 +#: entries/phrase_descriptions/polish_strings.py:347
1366 1365 msgid "stosowanej"
1367 1366 msgstr "used"
1368 1367  
1369   -#: entries/phrase_descriptions/polish_strings.py:346
  1368 +#: entries/phrase_descriptions/polish_strings.py:347
1370 1369 msgid "stosowaną"
1371 1370 msgstr "used"
1372 1371  
1373   -#: entries/phrase_descriptions/polish_strings.py:347
  1372 +#: entries/phrase_descriptions/polish_strings.py:348
1374 1373 #: entries/polish_strings.py:105
1375 1374 msgid "temporalna"
1376 1375 msgstr "temporal"
1377 1376  
1378   -#: entries/phrase_descriptions/polish_strings.py:347
  1377 +#: entries/phrase_descriptions/polish_strings.py:348
1379 1378 msgid "temporalnej"
1380 1379 msgstr "temporal"
1381 1380  
1382   -#: entries/phrase_descriptions/polish_strings.py:347
  1381 +#: entries/phrase_descriptions/polish_strings.py:348
1383 1382 msgid "temporalną"
1384 1383 msgstr "temporal"
1385 1384  
1386   -#: entries/phrase_descriptions/polish_strings.py:348
  1385 +#: entries/phrase_descriptions/polish_strings.py:349
1387 1386 msgid "wprowadzana"
1388 1387 msgstr "introduced"
1389 1388  
1390   -#: entries/phrase_descriptions/polish_strings.py:348
  1389 +#: entries/phrase_descriptions/polish_strings.py:349
1391 1390 msgid "wprowadzanej"
1392 1391 msgstr "introduced"
1393 1392  
1394   -#: entries/phrase_descriptions/polish_strings.py:348
  1393 +#: entries/phrase_descriptions/polish_strings.py:349
1395 1394 msgid "wprowadzaną"
1396 1395 msgstr "introduced"
1397 1396  
1398   -#: entries/phrase_descriptions/polish_strings.py:349
  1397 +#: entries/phrase_descriptions/polish_strings.py:350
1399 1398 msgid "względna"
1400 1399 msgstr "relative"
1401 1400  
1402   -#: entries/phrase_descriptions/polish_strings.py:349
  1401 +#: entries/phrase_descriptions/polish_strings.py:350
1403 1402 msgid "względnej"
1404 1403 msgstr "relative"
1405 1404  
1406   -#: entries/phrase_descriptions/polish_strings.py:349
  1405 +#: entries/phrase_descriptions/polish_strings.py:350
1407 1406 msgid "względną"
1408 1407 msgstr "relative"
1409 1408  
1410   -#: entries/phrase_descriptions/polish_strings.py:350
  1409 +#: entries/phrase_descriptions/polish_strings.py:351
1411 1410 msgid "zaimki"
1412 1411 msgstr "pronouns"
1413 1412  
1414   -#: entries/phrase_descriptions/polish_strings.py:350
  1413 +#: entries/phrase_descriptions/polish_strings.py:351
1415 1414 msgid "zaimków"
1416 1415 msgstr "pronouns"
1417 1416  
1418   -#: entries/phrase_descriptions/polish_strings.py:350
  1417 +#: entries/phrase_descriptions/polish_strings.py:351
1419 1418 msgid "zaimkami"
1420 1419 msgstr "pronouns"
1421 1420  
1422   -#: entries/phrase_descriptions/polish_strings.py:351
  1421 +#: entries/phrase_descriptions/polish_strings.py:352
1423 1422 msgid "zależna"
1424 1423 msgstr "dependent"
1425 1424  
1426   -#: entries/phrase_descriptions/polish_strings.py:351
  1425 +#: entries/phrase_descriptions/polish_strings.py:352
1427 1426 msgid "zależnej"
1428 1427 msgstr "dependent"
1429 1428  
1430   -#: entries/phrase_descriptions/polish_strings.py:351
  1429 +#: entries/phrase_descriptions/polish_strings.py:352
1431 1430 msgid "zależną"
1432 1431 msgstr "dependent"
1433 1432  
1434   -#: entries/phrase_descriptions/polish_strings.py:352
  1433 +#: entries/phrase_descriptions/polish_strings.py:353
1435 1434 #: entries/polish_strings.py:119
1436 1435 msgid "zdaniowa"
1437 1436 msgstr "clause"
1438 1437  
1439   -#: entries/phrase_descriptions/polish_strings.py:352
  1438 +#: entries/phrase_descriptions/polish_strings.py:353
1440 1439 msgid "zdaniowej"
1441 1440 msgstr "clause"
1442 1441  
1443   -#: entries/phrase_descriptions/polish_strings.py:352
  1442 +#: entries/phrase_descriptions/polish_strings.py:353
1444 1443 msgid "zdaniową"
1445 1444 msgstr "clause"
1446 1445  
... ... @@ -1942,11 +1941,19 @@ msgstr &quot;good&quot;
1942 1941 msgid "Ostatnio oglądane"
1943 1942 msgstr "Last visited"
1944 1943  
1945   -#: entries/templates/entries.html:49
  1944 +#: entries/templates/entries.html:45
  1945 +msgid "Opcje"
  1946 +msgstr "Options"
  1947 +
  1948 +#: entries/templates/entries.html:51
  1949 +msgid "Wyświetlaj opisy realizacji"
  1950 +msgstr "Show realisation descriptions"
  1951 +
  1952 +#: entries/templates/entries.html:65
1946 1953 msgid "Filtrowanie"
1947 1954 msgstr "Filtering"
1948 1955  
1949   -#: entries/templates/entries.html:67
  1956 +#: entries/templates/entries.html:83
1950 1957 msgid "Filtrowanie haseł"
1951 1958 msgstr "Entry filtering"
1952 1959  
... ... @@ -1980,22 +1987,22 @@ msgstr &quot;Source&quot;
1980 1987 msgid "Brak przykładów"
1981 1988 msgstr "No examples"
1982 1989  
1983   -#: entries/views.py:373
  1990 +#: entries/views.py:372
1984 1991 msgid ""
1985 1992 "Realizacja tego argumentu w zdaniu powinna być powiązana jakąkolwiek relacją"
1986 1993 msgstr "Realisation of this argument in the sentence should be in any relation"
1987 1994  
1988   -#: entries/views.py:375
  1995 +#: entries/views.py:374
1989 1996 msgid ""
1990 1997 "Realizacja tego argumentu w zdaniu powinna być powiązana relacją <i>{}</i>"
1991 1998 msgstr ""
1992 1999 "Realisation of this argument in the sentence should be in <i>{}</i> relation"
1993 2000  
1994   -#: entries/views.py:376
  2001 +#: entries/views.py:375
1995 2002 msgid "z realizacją argumentu <i>{}</i>."
1996 2003 msgstr "with realisation of the <i>{}</i> argument."
1997 2004  
1998   -#: entries/views.py:389
  2005 +#: entries/views.py:388
1999 2006 msgid "hiperonimy:"
2000 2007 msgstr "hipernyms"
2001 2008  
... ...
locale/en/LC_MESSAGES/djangojs.mo
No preview for this file type
locale/en/LC_MESSAGES/djangojs.po
... ... @@ -8,7 +8,7 @@ msgid &quot;&quot;
8 8 msgstr ""
9 9 "Project-Id-Version: PACKAGE VERSION\n"
10 10 "Report-Msgid-Bugs-To: \n"
11   -"POT-Creation-Date: 2021-01-19 13:57+0100\n"
  11 +"POT-Creation-Date: 2021-05-25 13:38+0200\n"
12 12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13 13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14 14 "Language-Team: LANGUAGE <LL@li.org>\n"
... ... @@ -18,200 +18,164 @@ msgstr &quot;&quot;
18 18 "Content-Transfer-Encoding: 8bit\n"
19 19 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
20 20  
21   -#: entries/static/entries/js/entries.js:11
22   -#: entries/static/entries/js/entries2.js:307
  21 +#: entries/static/entries/js/entries.js:14
23 22 msgid "Opinia"
24 23 msgstr "Opinion"
25 24  
26   -#: entries/static/entries/js/entries.js:41
27   -#: entries/static/entries/js/entries2.js:331
  25 +#: entries/static/entries/js/entries.js:44
28 26 msgid "Funkcja"
29 27 msgstr "Function"
30 28  
31   -#: entries/static/entries/js/entries.js:44
32   -#: entries/static/entries/js/entries2.js:334
  29 +#: entries/static/entries/js/entries.js:47
33 30 msgid "Typy fraz"
34 31 msgstr "Phrase types"
35 32  
36   -#: entries/static/entries/js/entries.js:104
37   -#: entries/static/entries/js/entries2.js:394
  33 +#: entries/static/entries/js/entries.js:108
38 34 msgid "brak schematów"
39 35 msgstr "no schemata"
40 36  
41   -#: entries/static/entries/js/entries.js:128
  37 +#: entries/static/entries/js/entries.js:132
42 38 msgid "nowa jednostka spoza <i>Słowosieci</i>"
43 39 msgstr "new lexical unit not in <i>plWordnet</i>"
44 40  
45   -#: entries/static/entries/js/entries.js:152
46   -#: entries/static/entries/js/entries2.js:412
  41 +#: entries/static/entries/js/entries.js:156
47 42 msgid "Rola"
48 43 msgstr "Role"
49 44  
50   -#: entries/static/entries/js/entries.js:154
51   -#: entries/static/entries/js/entries2.js:414
  45 +#: entries/static/entries/js/entries.js:158
52 46 msgid "Preferencje selekcyjne"
53 47 msgstr "Selectional preferences"
54 48  
55   -#: entries/static/entries/js/entries.js:201
56   -#: entries/static/entries/js/entries2.js:450
  49 +#: entries/static/entries/js/entries.js:205
57 50 msgid "brak ram"
58 51 msgstr "no frames"
59 52  
60   -#: entries/static/entries/js/entries.js:218
61   -#: entries/static/entries/js/entries2.js:467
  53 +#: entries/static/entries/js/entries.js:222
62 54 msgid "Kliknij, aby wyświetlić przykłady dla tego schematu."
63 55 msgstr "Click to show examples for this schema."
64 56  
65   -#: entries/static/entries/js/entries.js:281
66   -#: entries/static/entries/js/entries2.js:517
67   -msgid ""
68   -"Kliknij, aby wyświetlić przykłady dla tej ramy oraz jej realizacje "
69   -"składniowe."
70   -msgstr ""
71   -"Click to show examples linked to this frame and its syntactic realisations."
  57 +#: entries/static/entries/js/entries.js:259
  58 +msgid "Kliknij, aby cofnąć wyświetlanie przykładów dla tego schematu."
  59 +msgstr "Click to undo showing examples for this schema."
72 60  
73   -#: entries/static/entries/js/entries.js:384
  61 +#: entries/static/entries/js/entries.js:271
  62 +#: entries/static/entries/js/entries.js:460
  63 +#: entries/static/entries/js/entries.js:492
  64 +#: entries/static/entries/js/entries.js:538
74 65 msgid ""
75   -"Kliknij, aby cofnąć ograniczenie wyświetlanych przykładów do powiązanych z "
76   -"tym znaczeniem."
77   -msgstr "Click to undo restriction to examples linked to this meaning."
  66 +"Kliknij, aby cofnąć ograniczenie wyświetlanych przykładów do powiązanych z"
  67 +msgstr "Click to undo restriction to examples linked to"
78 68  
79   -#: entries/static/entries/js/entries.js:386
80   -msgid "Kliknij, aby wyświetlić wyłącznie przykłady powiązane z tym znaczeniem."
81   -msgstr "Click to show only examples linked to this meaning."
  69 +#: entries/static/entries/js/entries.js:271
  70 +#: entries/static/entries/js/entries.js:273
  71 +msgid "tą pozycją"
  72 +msgstr "this position"
82 73  
83   -#: entries/static/entries/js/entries.js:416
84   -#: entries/static/entries/js/entries2.js:578
85   -msgid ""
86   -"Kliknij, aby cofnąć ograniczenie wyświetlanych przykładów do powiązanych z "
87   -"tą rolą."
88   -msgstr "Click to undo restriction to examples linked to this role."
89   -
90   -#: entries/static/entries/js/entries.js:418
91   -#: entries/static/entries/js/entries2.js:580
92   -msgid "Kliknij, aby wyświetlić wyłącznie przykłady powiązane z tą rolą."
93   -msgstr "Click to show only examples linked to this role."
  74 +#: entries/static/entries/js/entries.js:271
  75 +#: entries/static/entries/js/entries.js:273
  76 +msgid "tą frazą"
  77 +msgstr "this phrase"
94 78  
  79 +#: entries/static/entries/js/entries.js:273
95 80 #: entries/static/entries/js/entries.js:462
96   -#: entries/static/entries/js/entries2.js:616
  81 +#: entries/static/entries/js/entries.js:494
  82 +#: entries/static/entries/js/entries.js:540
  83 +msgid "Kliknij, aby wyświetlić wyłącznie przykłady powiązane z"
  84 +msgstr "Click to show only examples linked to"
  85 +
  86 +#: entries/static/entries/js/entries.js:357
97 87 msgid ""
98   -"Kliknij, aby cofnąć ograniczenie wyświetlanych przykładów do powiązanych z "
99   -"tym schematem."
100   -msgstr "Click to undo restriction to examples linked to this schema."
  88 +"Kliknij, aby wyświetlić przykłady dla tej ramy oraz jej realizacje "
  89 +"składniowe."
  90 +msgstr ""
  91 +"Click to show examples linked to this frame and its syntactic realisations."
101 92  
102   -#: entries/static/entries/js/entries.js:464
103   -#: entries/static/entries/js/entries2.js:618
104   -msgid "Kliknij, aby wyświetlić wyłącznie przykłady powiązane z tym schematem."
105   -msgstr "Click to show only examples linked to this schema."
  93 +#: entries/static/entries/js/entries.js:460
  94 +#: entries/static/entries/js/entries.js:462
  95 +msgid "tym znaczeniem"
  96 +msgstr "this meaning"
106 97  
107 98 #: entries/static/entries/js/entries.js:492
108   -#: entries/static/entries/js/entries2.js:647
  99 +#: entries/static/entries/js/entries.js:494
  100 +msgid "tą rolą"
  101 +msgstr "this role"
  102 +
  103 +#: entries/static/entries/js/entries.js:538
  104 +#: entries/static/entries/js/entries.js:540
  105 +msgid "tym schematem"
  106 +msgstr "this schema"
  107 +
  108 +#: entries/static/entries/js/entries.js:568
109 109 msgid "Kliknij, aby cofnąć wybór tej ramy."
110 110 msgstr "Click to undo choice if this frame."
111 111  
112   -#: entries/static/entries/js/entries.js:584
113   -#: entries/static/entries/js/entries.js:690
114   -#: entries/static/entries/js/entries2.js:725
  112 +#: entries/static/entries/js/entries.js:671
  113 +#: entries/static/entries/js/entries.js:777
115 114 msgid "Komentarz"
116 115 msgstr "Comment"
117 116  
118   -#: entries/static/entries/js/entries.js:601
  117 +#: entries/static/entries/js/entries.js:688
119 118 msgid ""
120 119 "Kliknij, aby cofnąć wyświetlanie typów fraz powiązanych z tym przykładem."
121 120 msgstr "Click to undo showing phrase types linked to this example."
122 121  
123   -#: entries/static/entries/js/entries.js:603
  122 +#: entries/static/entries/js/entries.js:690
124 123 msgid "Kliknij, aby wyświetlić typy fraz powiązane z tym przykładem."
125 124 msgstr "Click to show phrase types linked to this example."
126 125  
127   -#: entries/static/entries/js/entries.js:642
  126 +#: entries/static/entries/js/entries.js:729
128 127 msgid ""
129 128 "Kliknij, aby cofnąć wyświetlanie argumentów i typów fraz powiązanych z tym "
130 129 "przykładem."
131 130 msgstr ""
132 131 "Click to undo showing arguments and phrase types linked to this example."
133 132  
134   -#: entries/static/entries/js/entries.js:644
  133 +#: entries/static/entries/js/entries.js:731
135 134 msgid ""
136 135 "Kliknij, aby wyświetlić argumenty i typy fraz powiązane z tym przykładem."
137 136 msgstr "Click to show arguments and phrase types linked to this example."
138 137  
139   -#: entries/static/entries/js/entries.js:824
  138 +#: entries/static/entries/js/entries.js:949
140 139 msgid "Przetwarzanie..."
141 140 msgstr "Processing"
142 141  
143   -#: entries/static/entries/js/entries.js:825
144   -#: entries/static/entries/js/entries.js:881
  142 +#: entries/static/entries/js/entries.js:950
  143 +#: entries/static/entries/js/entries.js:1006
145 144 msgid "Szukaj:"
146 145 msgstr "Search:"
147 146  
148   -#: entries/static/entries/js/entries.js:826
  147 +#: entries/static/entries/js/entries.js:951
149 148 msgid "Liczba haseł: _TOTAL_"
150 149 msgstr "_TOTAL_ entries"
151 150  
152   -#: entries/static/entries/js/entries.js:827
153   -#: entries/static/entries/js/entries.js:882
  151 +#: entries/static/entries/js/entries.js:952
  152 +#: entries/static/entries/js/entries.js:1007
154 153 msgid "Liczba haseł: 0"
155 154 msgstr "0 entries"
156 155  
157   -#: entries/static/entries/js/entries.js:828
  156 +#: entries/static/entries/js/entries.js:953
158 157 msgid "(spośród _MAX_)"
159 158 msgstr "(out of _MAX_)"
160 159  
161   -#: entries/static/entries/js/entries.js:829
162   -#: entries/static/entries/js/entries.js:883
  160 +#: entries/static/entries/js/entries.js:954
  161 +#: entries/static/entries/js/entries.js:1008
163 162 msgid "Brak haseł do wyświetlenia."
164 163 msgstr "No entries to display."
165 164  
166   -#: entries/static/entries/js/entries.js:831
167   -#: entries/static/entries/js/entries.js:885
  165 +#: entries/static/entries/js/entries.js:956
  166 +#: entries/static/entries/js/entries.js:1010
168 167 msgid ": sortuj kolumnę rosnąco"
169 168 msgstr ": sort column in ascending order"
170 169  
171   -#: entries/static/entries/js/entries.js:832
172   -#: entries/static/entries/js/entries.js:886
  170 +#: entries/static/entries/js/entries.js:957
  171 +#: entries/static/entries/js/entries.js:1011
173 172 msgid ": sortuj kolumnę malejąco"
174 173 msgstr ": sort column in descending order"
175 174  
176   -#: entries/static/entries/js/entries2.js:62
177 175 #: entries/static/entries/js/forms.js:7
178 176 msgid "Formularz filtrowania zawiera błędy."
179 177 msgstr "The filtering form contains errors."
180 178  
181   -#: entries/static/entries/js/entries2.js:107
182   -#: entries/static/entries/js/forms.js:144
183   -msgid "zwiń"
184   -msgstr "collapse"
185   -
186   -#: entries/static/entries/js/entries2.js:112
187   -#: entries/static/entries/js/forms.js:149
188   -msgid "rozwiń"
189   -msgstr "expand"
190   -
191   -#: entries/static/entries/js/entries2.js:149
192   -#: entries/static/entries/js/forms.js:220
193   -msgid "LUB"
194   -msgstr "OR"
195   -
196   -#: entries/static/entries/js/entries2.js:149
197   -#: entries/static/entries/js/forms.js:220
198   -msgid "Usuń"
199   -msgstr "Remove"
200   -
201   -#: entries/static/entries/js/entries2.js:733
202   -msgid ""
203   -"Kliknij, aby cofnąć wyświetlanie argumentów i fraz powiązanych z tym "
204   -"przykładem."
205   -msgstr "Click to undo showing arguments and phrases linked to this example."
206   -
207   -#: entries/static/entries/js/entries2.js:735
208   -msgid "Kliknij, aby wyświetlić argumenty i frazy powiązane z tym przykładem."
209   -msgstr "Click to show arguments and phrases linked to this example."
210   -
211   -#: entries/static/entries/js/entries2.js:815
212   -msgid "brak haseł"
213   -msgstr "no entries"
214   -
215 179 #: entries/static/entries/js/forms.js:48 entries/static/entries/js/forms.js:110
216 180 msgid "nie"
217 181 msgstr "not"
... ... @@ -224,6 +188,14 @@ msgstr &quot;and&quot;
224 188 msgid "lub"
225 189 msgstr "or"
226 190  
  191 +#: entries/static/entries/js/forms.js:144
  192 +msgid "zwiń"
  193 +msgstr "collapse"
  194 +
  195 +#: entries/static/entries/js/forms.js:149
  196 +msgid "rozwiń"
  197 +msgstr "expand"
  198 +
227 199 #: entries/static/entries/js/forms.js:162
228 200 msgid ""
229 201 "Łączenie negacji elementu z operatorem ‹inny› na jednym poziomie formularza "
... ... @@ -267,9 +239,17 @@ msgstr &quot;&quot;
267 239 "possible."
268 240  
269 241 #: entries/static/entries/js/forms.js:220
  242 +msgid "LUB"
  243 +msgstr "OR"
  244 +
  245 +#: entries/static/entries/js/forms.js:220
270 246 msgid "INNY"
271 247 msgstr "OTHER"
272 248  
  249 +#: entries/static/entries/js/forms.js:220
  250 +msgid "Usuń"
  251 +msgstr "Remove"
  252 +
273 253 #: entries/static/entries/js/forms.js:231
274 254 msgid "Wykonanie zapytania z operatorem ‹inny› może trwać zauważalnie dłużej."
275 255 msgstr ""
... ...
meanings/management/commands/import_plWordnet.py
... ... @@ -102,7 +102,7 @@ def import_plWordnet():
102 102 parser.parse(xml_path)
103 103 print("...DONE")
104 104  
105   - print("")
  105 + print()
106 106  
107 107 print("Storing synsets...")
108 108 synsets = parser.getContentHandler()._synsets_to_base
... ... @@ -116,7 +116,7 @@ def import_plWordnet():
116 116 print(str(i*BULK) + "...")
117 117 print("...DONE")
118 118  
119   - print("")
  119 + print()
120 120  
121 121 print("Storing lexical units...")
122 122 lexical_units = parser.getContentHandler()._lexical_units_to_base
... ... @@ -130,7 +130,7 @@ def import_plWordnet():
130 130 print(str(i*BULK) + "...")
131 131 print("...DONE")
132 132  
133   - print("")
  133 + print()
134 134  
135 135 print("Storing hypernyms...")
136 136 hypernyms = parser.getContentHandler()._hypernymy_to_base
... ... @@ -148,5 +148,4 @@ def import_plWordnet():
148 148 print(i, child, parents)
149 149 child.hypernyms.add(*parents)
150 150 child.save()
151   -
152 151 print("...DONE")
... ...