Commit 71ad2c03b8010f91302c3684dad4aad1e3df9264
Merge branch 'master' into tomek
Conflicts: semantics/static/js/semantics_roles.js semantics/views.py
Showing
55 changed files
with
2253 additions
and
2441 deletions
Too many changes to show.
To preserve performance only 24 of 55 files are displayed.
INSTALL
@@ -61,6 +61,8 @@ Dodaj w głównym folderze projektu plik konfiguracyjny database_data.py oraz zd | @@ -61,6 +61,8 @@ Dodaj w głównym folderze projektu plik konfiguracyjny database_data.py oraz zd | ||
61 | Zainstaluj moduł psycopg2: | 61 | Zainstaluj moduł psycopg2: |
62 | >> sudo apt-get install python-psycopg2 | 62 | >> sudo apt-get install python-psycopg2 |
63 | 63 | ||
64 | +Zainstaluj Morfeusza2 zgodnie z instrukcjami na stronie http://sgjp.pl/morfeusz/dopobrania.html. | ||
65 | + | ||
64 | Zgraj pliki statyczne do dedykowanego katalogu poleceniem: | 66 | Zgraj pliki statyczne do dedykowanego katalogu poleceniem: |
65 | >> python manage.py collectstatic | 67 | >> python manage.py collectstatic |
66 | 68 | ||
@@ -74,8 +76,8 @@ Utwórz plik slowal.wsgi odpowiednio definiując w nim ścieżki do plików stat | @@ -74,8 +76,8 @@ Utwórz plik slowal.wsgi odpowiednio definiując w nim ścieżki do plików stat | ||
74 | -------------------------------------------- | 76 | -------------------------------------------- |
75 | import os, sys | 77 | import os, sys |
76 | 78 | ||
77 | -sys.path.append('/home/zil/static') | ||
78 | -sys.path.append('/home/zil/static/Slowal') | 79 | +sys.path.append('/home/zil/Slowal') |
80 | +sys.path.append('/home/zil') | ||
79 | os.environ['DJANGO_SETTINGS_MODULE'] = 'Slowal.settings' | 81 | os.environ['DJANGO_SETTINGS_MODULE'] = 'Slowal.settings' |
80 | 82 | ||
81 | import django.core.handlers.wsgi | 83 | import django.core.handlers.wsgi |
@@ -83,7 +85,7 @@ import django.core.handlers.wsgi | @@ -83,7 +85,7 @@ import django.core.handlers.wsgi | ||
83 | application = django.core.handlers.wsgi.WSGIHandler() | 85 | application = django.core.handlers.wsgi.WSGIHandler() |
84 | -------------------------------------------- | 86 | -------------------------------------------- |
85 | 87 | ||
86 | -Skonfiguruj apacha dodając plik konfiguracyjny (np. o nazwie slowal.conf) do folderu sites-available apacha (domyślnie /etc/apache2/sites-enabled/), ścieżka WSGIScriptAlias musi wskazywać na plik slowal.wsgi. Przykładowy plik konfiguracyjny poniżej: | 88 | +Skonfiguruj apacha dodając plik konfiguracyjny (np. o nazwie slowal.conf) do folderu sites-available apacha (domyślnie /etc/apache2/sites-available/), ścieżka WSGIScriptAlias musi wskazywać na plik slowal.wsgi. Przykładowy plik konfiguracyjny poniżej: |
87 | -------------------------------------------- | 89 | -------------------------------------------- |
88 | <VirtualHost *:80> | 90 | <VirtualHost *:80> |
89 | ServerAdmin bartek.niton@gmail.com | 91 | ServerAdmin bartek.niton@gmail.com |
@@ -116,8 +118,6 @@ Uruchom stronę poleceniem: | @@ -116,8 +118,6 @@ Uruchom stronę poleceniem: | ||
116 | Zrestartuj apacha: | 118 | Zrestartuj apacha: |
117 | >> sudo service apache2 restart | 119 | >> sudo service apache2 restart |
118 | 120 | ||
119 | -Zainstaluj Morfeusza2 zgodnie z instrukcjami na stronie http://sgjp.pl/morfeusz/dopobrania.html. | ||
120 | - | ||
121 | Ustaw w crontabie cykliczne uruchamianie komend create_walenty i count_positions_occurrences: | 121 | Ustaw w crontabie cykliczne uruchamianie komend create_walenty i count_positions_occurrences: |
122 | 1 0 * * 5 python /home/zil/Slowal/manage.py create_walenty | 122 | 1 0 * * 5 python /home/zil/Slowal/manage.py create_walenty |
123 | 0 1 * * * python /home/zil/Slowal/manage.py count_positions_occurrences | 123 | 0 1 * * * python /home/zil/Slowal/manage.py count_positions_occurrences |
accounts/models.py
@@ -43,7 +43,7 @@ class UserStats(Model): | @@ -43,7 +43,7 @@ class UserStats(Model): | ||
43 | # oplaty za prace leksykograficzne | 43 | # oplaty za prace leksykograficzne |
44 | bind_phraseology_frames_history = ManyToManyField('RealizedPhraseologyBinding', db_table='powiazania_frazeologiczne', | 44 | bind_phraseology_frames_history = ManyToManyField('RealizedPhraseologyBinding', db_table='powiazania_frazeologiczne', |
45 | blank=True, null=True, related_name='user_stats') | 45 | blank=True, null=True, related_name='user_stats') |
46 | - # !NOWE! oplaty za prace semantyczne | 46 | + # oplaty za prace semantyczne |
47 | semantics_real_history = ManyToManyField('RealizedSemantics', db_table='prace_semantyczne', | 47 | semantics_real_history = ManyToManyField('RealizedSemantics', db_table='prace_semantyczne', |
48 | blank=True, null=True, related_name='user_stats') | 48 | blank=True, null=True, related_name='user_stats') |
49 | # kwota uiszczona | 49 | # kwota uiszczona |
@@ -272,7 +272,6 @@ def get_anon_profile(): | @@ -272,7 +272,6 @@ def get_anon_profile(): | ||
272 | def filtering_mode(user): | 272 | def filtering_mode(user): |
273 | return user.usersettings.filter_search | 273 | return user.usersettings.filter_search |
274 | 274 | ||
275 | -# !NOWE! | ||
276 | class RealizedSemantics(Model): | 275 | class RealizedSemantics(Model): |
277 | """Model representing realized semantic work.""" | 276 | """Model representing realized semantic work.""" |
278 | # wykonane haslo | 277 | # wykonane haslo |
@@ -288,15 +287,24 @@ class RealizedSemantics(Model): | @@ -288,15 +287,24 @@ class RealizedSemantics(Model): | ||
288 | # wlasciwie wykonane ramki (wypelniane dla semantyka) | 287 | # wlasciwie wykonane ramki (wypelniane dla semantyka) |
289 | prop_frames = PositiveIntegerField(db_column='poprawne_ramki', | 288 | prop_frames = PositiveIntegerField(db_column='poprawne_ramki', |
290 | default=0) | 289 | default=0) |
290 | + # czesciowo wlasciwie wykonane ramki (wypelniane dla semantyka) !NOWE | ||
291 | + part_prop_frames = PositiveIntegerField(db_column='czesciowo_poprawne_ramki', | ||
292 | + default=0) | ||
291 | # niewlasciwie wykonane ramki (wypelniane dla semantyka) | 293 | # niewlasciwie wykonane ramki (wypelniane dla semantyka) |
292 | wrong_frames = PositiveIntegerField(db_column='niepoprawne_ramki', | 294 | wrong_frames = PositiveIntegerField(db_column='niepoprawne_ramki', |
293 | default=0) | 295 | default=0) |
296 | + # dodane powiazania miedzy ramami i schematami !NOWE | ||
297 | + added_connections = PositiveIntegerField(db_column='dodane_powiazania', | ||
298 | + default=0) | ||
294 | # wykonane ramki (wypelniane dla semantyka) | 299 | # wykonane ramki (wypelniane dla semantyka) |
295 | made_frames = PositiveIntegerField(db_column='wykonane_ramki', | 300 | made_frames = PositiveIntegerField(db_column='wykonane_ramki', |
296 | default=0) | 301 | default=0) |
297 | # poprawione ramki (wypelniane dla supersemantyka) | 302 | # poprawione ramki (wypelniane dla supersemantyka) |
298 | corr_frames = PositiveIntegerField(db_column='poprawione_ramki', | 303 | corr_frames = PositiveIntegerField(db_column='poprawione_ramki', |
299 | default=0) | 304 | default=0) |
305 | + # czesciowo poprawione ramki (wypelniane dla supersemantyka) !NOWE | ||
306 | + part_corr_frames = PositiveIntegerField(db_column='czesciowo_poprawione_ramki', | ||
307 | + default=0) | ||
300 | # ramki niepoprawiane (wypelniane dla supersemantyka) | 308 | # ramki niepoprawiane (wypelniane dla supersemantyka) |
301 | ncorr_frames = PositiveIntegerField(db_column='niepoprawione_ramki', | 309 | ncorr_frames = PositiveIntegerField(db_column='niepoprawione_ramki', |
302 | default=0) | 310 | default=0) |
dictionary/ajax_jqgrid.py
@@ -11,26 +11,7 @@ def default_sort_rules(): | @@ -11,26 +11,7 @@ def default_sort_rules(): | ||
11 | 'semanticist': { 'priority': None, 'sort_order': 'desc'}, | 11 | 'semanticist': { 'priority': None, 'sort_order': 'desc'}, |
12 | 'vocabulary': { 'priority': None, 'sort_order': 'desc'}, | 12 | 'vocabulary': { 'priority': None, 'sort_order': 'desc'}, |
13 | 'status': { 'priority': None, 'sort_order': 'desc'}} | 13 | 'status': { 'priority': None, 'sort_order': 'desc'}} |
14 | - | ||
15 | -def default_filter_rules(): | ||
16 | - return { 'pos': None, | ||
17 | - 'owner': None, | ||
18 | - 'phraseologist': None, | ||
19 | - 'semanticist': None, | ||
20 | - 'vocabulary': None, | ||
21 | - 'status': None, | ||
22 | - 'example_source': None, | ||
23 | - 'approver': None, | ||
24 | - 'reflex': None, | ||
25 | - 'negativity': None, | ||
26 | - 'predicativity': None, | ||
27 | - 'aspect': None, | ||
28 | - 'argument': '.*', | ||
29 | - 'position': '.*', | ||
30 | - 'frame_opinion' : None, | ||
31 | - 'sender': None, | ||
32 | - 'frame_phraseologic': False} | ||
33 | - | 14 | + |
34 | class JqGridAjax(object): | 15 | class JqGridAjax(object): |
35 | model = None | 16 | model = None |
36 | search_field = None | 17 | search_field = None |
dictionary/ajax_lemma_status.py
1 | # -*- coding: utf-8 -*- | 1 | # -*- coding: utf-8 -*- |
2 | 2 | ||
3 | -#Copyright (c) 2012, Bartłomiej Nitoń | ||
4 | -#All rights reserved. | ||
5 | - | ||
6 | -#Redistribution and use in source and binary forms, with or without modification, are permitted provided | ||
7 | -#that the following conditions are met: | ||
8 | - | ||
9 | -# Redistributions of source code must retain the above copyright notice, this list of conditions and | ||
10 | -# the following disclaimer. | ||
11 | -# Redistributions in binary form must reproduce the above copyright notice, this list of conditions | ||
12 | -# and the following disclaimer in the documentation and/or other materials provided with the distribution. | ||
13 | - | ||
14 | -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED | ||
15 | -# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | ||
16 | -# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||
17 | -# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | ||
18 | -# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
19 | -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
20 | -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
21 | -# POSSIBILITY OF SUCH DAMAGE. | ||
22 | - | ||
23 | import operator | 3 | import operator |
24 | 4 | ||
25 | from django.db.models import Q | 5 | from django.db.models import Q |
@@ -36,9 +16,7 @@ from semantics.utils import get_frames_differences | @@ -36,9 +16,7 @@ from semantics.utils import get_frames_differences | ||
36 | 16 | ||
37 | @render('lemma_status.html') | 17 | @render('lemma_status.html') |
38 | @ajax(method='get', encode_result=False) | 18 | @ajax(method='get', encode_result=False) |
39 | -def get_lemma_status(request, id): | ||
40 | - if request.session.has_key('lemma_from_note_id') and request.session['lemma_from_note_id']: | ||
41 | - id = request.session['lemma_from_note_id'] | 19 | +def get_lemma_status(request, id): |
42 | selected_lemma = Lemma.objects.get(id=id) | 20 | selected_lemma = Lemma.objects.get(id=id) |
43 | abort_status = None | 21 | abort_status = None |
44 | next_statuses = [] | 22 | next_statuses = [] |
@@ -254,10 +232,20 @@ def lemma_status_change(request, status_id, lemma_id): | @@ -254,10 +232,20 @@ def lemma_status_change(request, status_id, lemma_id): | ||
254 | checked_frame_value = 0.0 | 232 | checked_frame_value = 0.0 |
255 | corrected_frame_value = 0.0 | 233 | corrected_frame_value = 0.0 |
256 | bonus = 4.0 | 234 | bonus = 4.0 |
235 | + part_bonus = 2.0 | ||
236 | + connection_bonus = 0.1 | ||
257 | ### naliczanie oplat za sprawdzenie i bonusow | 237 | ### naliczanie oplat za sprawdzenie i bonusow |
258 | - update_sem_stats_conf_s(lemma_obj.entry_obj, actual_semantic_frames, | ||
259 | - lemma_obj.semanticist, request.user, new_status, | ||
260 | - checked_frame_value, corrected_frame_value, bonus) | 238 | + update_sem_stats_conf_s(entry=lemma_obj.entry_obj, |
239 | + semantic_frames=actual_semantic_frames, | ||
240 | + semanticist=lemma_obj.semanticist, | ||
241 | + supersemanticist=request.user, | ||
242 | + status=new_status, | ||
243 | + checked_frame_value=checked_frame_value, | ||
244 | + corrected_frame_value=corrected_frame_value, | ||
245 | + bonus_factor=bonus, | ||
246 | + part_bonus_factor=part_bonus, | ||
247 | + connection_bonus=connection_bonus) | ||
248 | + | ||
261 | add_new_frames_to_phraseologic_propositions(lemma_obj) | 249 | add_new_frames_to_phraseologic_propositions(lemma_obj) |
262 | changed = True | 250 | changed = True |
263 | # zmiana statusu na w obrobce semantycznej | 251 | # zmiana statusu na w obrobce semantycznej |
@@ -496,7 +484,8 @@ def update_sem_stats_ready_s(entry, semantic_frames, semanticist, status, frame_ | @@ -496,7 +484,8 @@ def update_sem_stats_ready_s(entry, semantic_frames, semanticist, status, frame_ | ||
496 | semanticist.user_stats.semantics_real_history.add(realized_semantics) | 484 | semanticist.user_stats.semantics_real_history.add(realized_semantics) |
497 | 485 | ||
498 | def update_sem_stats_conf_s(entry, semantic_frames, semanticist, supersemanticist, status, | 486 | def update_sem_stats_conf_s(entry, semantic_frames, semanticist, supersemanticist, status, |
499 | - checked_frame_value, corrected_frame_value, bonus_factor): | 487 | + checked_frame_value, corrected_frame_value, |
488 | + bonus_factor, part_bonus_factor, connection_bonus): | ||
500 | ready_statuses = Lemma_Status.objects.filter(type__sym_name='ready_s') | 489 | ready_statuses = Lemma_Status.objects.filter(type__sym_name='ready_s') |
501 | q_ready_statuses = [Q(status=ready_status) for ready_status in ready_statuses.all()] | 490 | q_ready_statuses = [Q(status=ready_status) for ready_status in ready_statuses.all()] |
502 | 491 | ||
@@ -505,17 +494,28 @@ def update_sem_stats_conf_s(entry, semantic_frames, semanticist, supersemanticis | @@ -505,17 +494,28 @@ def update_sem_stats_conf_s(entry, semantic_frames, semanticist, supersemanticis | ||
505 | checked_sem_frames = semantic_frames | 494 | checked_sem_frames = semantic_frames |
506 | ready_to_checked_diffs = get_frames_differences(ready_sem_frames.all(), checked_sem_frames.all()) | 495 | ready_to_checked_diffs = get_frames_differences(ready_sem_frames.all(), checked_sem_frames.all()) |
507 | checked_to_ready_diffs = get_frames_differences(checked_sem_frames.all(), ready_sem_frames.all()) | 496 | checked_to_ready_diffs = get_frames_differences(checked_sem_frames.all(), ready_sem_frames.all()) |
508 | - sem_dict = {'same_frames': len(ready_to_checked_diffs['matching_frames']), | 497 | + |
498 | + connections_amount = count_connections(ready_to_checked_diffs) | ||
499 | + sem_cash = (bonus_factor*float(len(ready_to_checked_diffs['matching_frames'])) + | ||
500 | + part_bonus_factor*float(len(ready_to_checked_diffs['part_matching_frames'])) + | ||
501 | + connection_bonus*float(connections_amount)) | ||
502 | + sem_dict = {'same_frames': len(ready_to_checked_diffs['matching_frames']), | ||
503 | + 'part_same_frames': len(ready_to_checked_diffs['part_matching_frames']), | ||
509 | 'wrong_frames': len(ready_to_checked_diffs['missing_frames']), | 504 | 'wrong_frames': len(ready_to_checked_diffs['missing_frames']), |
510 | - 'cash': bonus_factor*float(len(ready_to_checked_diffs['matching_frames']))} | 505 | + 'added_connections': connections_amount, |
506 | + 'cash': sem_cash} | ||
507 | + | ||
508 | + supersem_cash = (float(len(checked_to_ready_diffs['missing_frames'])+len(checked_to_ready_diffs['part_matching_frames']))*corrected_frame_value + | ||
509 | + float(len(ready_to_checked_diffs['matching_frames']))*checked_frame_value) | ||
511 | supersem_dict = {'same_frames': len(checked_to_ready_diffs['matching_frames']), | 510 | supersem_dict = {'same_frames': len(checked_to_ready_diffs['matching_frames']), |
511 | + 'part_same_frames': len(checked_to_ready_diffs['part_matching_frames']), | ||
512 | 'redo_frames': len(checked_to_ready_diffs['missing_frames']), | 512 | 'redo_frames': len(checked_to_ready_diffs['missing_frames']), |
513 | - 'cash': (float(len(checked_to_ready_diffs['missing_frames']))*corrected_frame_value+ | ||
514 | - float(len(ready_to_checked_diffs['matching_frames']))*checked_frame_value)} | 513 | + 'cash': supersem_cash} |
515 | 514 | ||
516 | supersem_real_semantics = RealizedSemantics(entry=entry, | 515 | supersem_real_semantics = RealizedSemantics(entry=entry, |
517 | cash=supersem_dict['cash'], | 516 | cash=supersem_dict['cash'], |
518 | corr_frames=supersem_dict['redo_frames'], | 517 | corr_frames=supersem_dict['redo_frames'], |
518 | + part_corr_frames=supersem_dict['part_same_frames'], | ||
519 | ncorr_frames=supersem_dict['same_frames'], | 519 | ncorr_frames=supersem_dict['same_frames'], |
520 | status=status, | 520 | status=status, |
521 | bonus=False) | 521 | bonus=False) |
@@ -526,12 +526,22 @@ def update_sem_stats_conf_s(entry, semantic_frames, semanticist, supersemanticis | @@ -526,12 +526,22 @@ def update_sem_stats_conf_s(entry, semantic_frames, semanticist, supersemanticis | ||
526 | sem_real_semantics = RealizedSemantics(entry=entry, | 526 | sem_real_semantics = RealizedSemantics(entry=entry, |
527 | cash=sem_dict['cash'], | 527 | cash=sem_dict['cash'], |
528 | prop_frames=sem_dict['same_frames'], | 528 | prop_frames=sem_dict['same_frames'], |
529 | + part_prop_frames=sem_dict['part_same_frames'], | ||
529 | wrong_frames=sem_dict['wrong_frames'], | 530 | wrong_frames=sem_dict['wrong_frames'], |
531 | + added_connections=sem_dict['added_connections'], | ||
530 | status=status, | 532 | status=status, |
531 | bonus=True) | 533 | bonus=True) |
532 | sem_real_semantics.save() | 534 | sem_real_semantics.save() |
533 | sem_real_semantics.frames.add(*semantic_frames.all()) | 535 | sem_real_semantics.frames.add(*semantic_frames.all()) |
534 | semanticist.user_stats.semantics_real_history.add(sem_real_semantics) | 536 | semanticist.user_stats.semantics_real_history.add(sem_real_semantics) |
535 | - | 537 | + |
538 | +def count_connections(differences): | ||
539 | + amount = 0 | ||
540 | + for frame in differences['matching_frames']: | ||
541 | + amount += frame.connected_schemata().count() | ||
542 | + for frame in differences['part_matching_frames']: | ||
543 | + amount += frame.connected_schemata().count() | ||
544 | + return amount | ||
545 | + | ||
536 | def remove_semantic_payments(entry): | 546 | def remove_semantic_payments(entry): |
537 | RealizedSemantics.objects.filter(entry=entry).delete() | 547 | RealizedSemantics.objects.filter(entry=entry).delete() |
dictionary/ajax_lemma_view.py
1 | # -*- coding: utf-8 -*- | 1 | # -*- coding: utf-8 -*- |
2 | 2 | ||
3 | -#Copyright (c) 2012, Bartłomiej Nitoń | ||
4 | -#All rights reserved. | ||
5 | - | ||
6 | -#Redistribution and use in source and binary forms, with or without modification, are permitted provided | ||
7 | -#that the following conditions are met: | ||
8 | - | ||
9 | -# Redistributions of source code must retain the above copyright notice, this list of conditions and | ||
10 | -# the following disclaimer. | ||
11 | -# Redistributions in binary form must reproduce the above copyright notice, this list of conditions | ||
12 | -# and the following disclaimer in the documentation and/or other materials provided with the distribution. | ||
13 | - | ||
14 | -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED | ||
15 | -# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | ||
16 | -# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||
17 | -# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | ||
18 | -# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
19 | -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
20 | -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
21 | -# POSSIBILITY OF SUCH DAMAGE. | ||
22 | - | ||
23 | import math | 3 | import math |
24 | import copy | 4 | import copy |
25 | import re | 5 | import re |
@@ -32,7 +12,11 @@ from django.contrib.auth.models import User, Group | @@ -32,7 +12,11 @@ from django.contrib.auth.models import User, Group | ||
32 | from django.core import serializers | 12 | from django.core import serializers |
33 | 13 | ||
34 | from common.js_to_obj import frameObjToSerializableDict, jsArgToObj, jsFrameToObj, jsPosToObj | 14 | from common.js_to_obj import frameObjToSerializableDict, jsArgToObj, jsFrameToObj, jsPosToObj |
15 | +from dictionary.common_func import escape_regex | ||
35 | from dictionary.convert_frames import frame_conversion | 16 | from dictionary.convert_frames import frame_conversion |
17 | +from dictionary.filtering import default_filter_rules, prepare_filter_form, \ | ||
18 | + save_lemma_filters_and_get_schemata_filter_setup, \ | ||
19 | + schemata_filter_options | ||
36 | from dictionary.models import Vocabulary, Lemma, Lemma_Status, Frame_Opinion, \ | 20 | from dictionary.models import Vocabulary, Lemma, Lemma_Status, Frame_Opinion, \ |
37 | Frame_Opinion_Value, Frame, NKJP_Example, NKJP_ArgSelection, \ | 21 | Frame_Opinion_Value, Frame, NKJP_Example, NKJP_ArgSelection, \ |
38 | NKJP_Source, NKJP_Opinion, Position, \ | 22 | NKJP_Source, NKJP_Opinion, Position, \ |
@@ -44,9 +28,9 @@ from dictionary.models import Vocabulary, Lemma, Lemma_Status, Frame_Opinion, \ | @@ -44,9 +28,9 @@ from dictionary.models import Vocabulary, Lemma, Lemma_Status, Frame_Opinion, \ | ||
44 | sorted_default_frame_char_vals, XcpExample, \ | 28 | sorted_default_frame_char_vals, XcpExample, \ |
45 | POS, get_frame_char_and_its_value, get_frame_char_by_type_and_value_pk, \ | 29 | POS, get_frame_char_and_its_value, get_frame_char_by_type_and_value_pk, \ |
46 | sortFrameChars, sortArguments, sortPositions, \ | 30 | sortFrameChars, sortArguments, sortPositions, \ |
47 | - get_or_create_position, get_phraseologic_frames_only, pos_compatible | 31 | + get_or_create_position, get_schemata_by_type, pos_compatible |
48 | from dictionary.forms import AddPositionForm, FrameForm, Pos_Cat_Form, \ | 32 | from dictionary.forms import AddPositionForm, FrameForm, Pos_Cat_Form, \ |
49 | - AddNkjpExampleForm, MessageForm, SortForm, FilterForm, \ | 33 | + AddNkjpExampleForm, MessageForm, SortForm, \ |
50 | SimilarLemmasNewForm, ChangeUserFunctionForm, \ | 34 | SimilarLemmasNewForm, ChangeUserFunctionForm, \ |
51 | ExampleOpinionForm, \ | 35 | ExampleOpinionForm, \ |
52 | FrameConversionForm, CreatePositionForm, AssignPhraseologicFrameForm | 36 | FrameConversionForm, CreatePositionForm, AssignPhraseologicFrameForm |
@@ -56,13 +40,15 @@ from dictionary.saving import connect_example_operation, disconnect_all_examples | @@ -56,13 +40,15 @@ from dictionary.saving import connect_example_operation, disconnect_all_examples | ||
56 | 40 | ||
57 | from common.decorators import render, ajax, AjaxError | 41 | from common.decorators import render, ajax, AjaxError |
58 | from common.util import triple_arg_poss | 42 | from common.util import triple_arg_poss |
43 | +from dictionary.filtering import filter_lemmas | ||
59 | from dictionary.validation import find_similar_frames, get_all_test_missing_frames, get_aspect_rel_lemmas, \ | 44 | from dictionary.validation import find_similar_frames, get_all_test_missing_frames, get_aspect_rel_lemmas, \ |
60 | get_wrong_aspect_frames, validate_B_frames, get_deriv_miss_frames_message, \ | 45 | get_wrong_aspect_frames, validate_B_frames, get_deriv_miss_frames_message, \ |
61 | validate_phraseology_binded_frames, validate_rule_5, \ | 46 | validate_phraseology_binded_frames, validate_rule_5, \ |
62 | validate_examples_and_mark_errors, validate_schemas_and_mark_errors, \ | 47 | validate_examples_and_mark_errors, validate_schemas_and_mark_errors, \ |
48 | + validate_schemata_for_semantics_and_mark_errors, \ | ||
63 | get_missing_aspects_msg, validate_same_positions_schemata | 49 | get_missing_aspects_msg, validate_same_positions_schemata |
64 | 50 | ||
65 | -from semantics.models import LexicalUnitExamples | 51 | +from semantics.models import LexicalUnitExamples, SemanticFrame |
66 | 52 | ||
67 | from wordnet.models import LexicalUnit | 53 | from wordnet.models import LexicalUnit |
68 | 54 | ||
@@ -77,13 +63,11 @@ from django.core.validators import email_re | @@ -77,13 +63,11 @@ from django.core.validators import email_re | ||
77 | from accounts.models import UserSettings, UserStats, RealizedPhraseologyBinding, \ | 63 | from accounts.models import UserSettings, UserStats, RealizedPhraseologyBinding, \ |
78 | can_modify_phraseology_only, get_anon_profile | 64 | can_modify_phraseology_only, get_anon_profile |
79 | 65 | ||
80 | -from ajax_jqgrid import JqGridAjax, default_sort_rules, default_filter_rules | 66 | +from ajax_jqgrid import JqGridAjax, default_sort_rules |
81 | 67 | ||
82 | import locale | 68 | import locale |
83 | locale.setlocale(locale.LC_ALL, 'pl_PL.UTF-8') | 69 | locale.setlocale(locale.LC_ALL, 'pl_PL.UTF-8') |
84 | 70 | ||
85 | -import HTMLParser | ||
86 | - | ||
87 | DEFAULT_SAVE_PATH = os.path.join(PROJECT_PATH, 'tmp') | 71 | DEFAULT_SAVE_PATH = os.path.join(PROJECT_PATH, 'tmp') |
88 | 72 | ||
89 | def reverse(string): | 73 | def reverse(string): |
@@ -165,7 +149,7 @@ def prepareFrameTable(frame): | @@ -165,7 +149,7 @@ def prepareFrameTable(frame): | ||
165 | 149 | ||
166 | def nkjpExamplesObjToJs(nkjp_examples, user, lemma): | 150 | def nkjpExamplesObjToJs(nkjp_examples, user, lemma): |
167 | example_dict_list = [] | 151 | example_dict_list = [] |
168 | - lexical_units = lemma.entry_obj.lexical_units() | 152 | + lexical_units = lemma.entry_obj.meanings.all() |
169 | for example in nkjp_examples: | 153 | for example in nkjp_examples: |
170 | frame = example.frame; | 154 | frame = example.frame; |
171 | frame_table_id = 'frame_'+str(frame.id)+'_' | 155 | frame_table_id = 'frame_'+str(frame.id)+'_' |
@@ -178,18 +162,14 @@ def nkjpExamplesObjToJs(nkjp_examples, user, lemma): | @@ -178,18 +162,14 @@ def nkjpExamplesObjToJs(nkjp_examples, user, lemma): | ||
178 | 162 | ||
179 | confirmed = True | 163 | confirmed = True |
180 | approvers_count = lemma.entry_obj.pos.example_approvers_num | 164 | approvers_count = lemma.entry_obj.pos.example_approvers_num |
181 | - #Configuration.objects.get(selected_conf=True).example_approvers_num | ||
182 | if example.source.confirmation_required and example.approvers.count() < approvers_count: | 165 | if example.source.confirmation_required and example.approvers.count() < approvers_count: |
183 | try: | 166 | try: |
184 | example.approvers.get(username=user.username) | 167 | example.approvers.get(username=user.username) |
185 | except: | 168 | except: |
186 | - confirmed = False | ||
187 | - | ||
188 | - sentence = example.sentence.replace('\\', '\\\\').replace("\n", "\\n").replace("\r", "\\r").replace("\t", "\\t").replace("\"", "\\\"") | ||
189 | - comment = example.comment.replace('\\', '\\\\').replace("\n", "\\n").replace("\r", "\\r").replace("\t", "\\t").replace("\"", "\\\"") | ||
190 | - h = HTMLParser.HTMLParser() | ||
191 | - sentence = h.unescape(sentence) | ||
192 | - comment = h.unescape(comment) | 169 | + confirmed = False |
170 | + | ||
171 | + sentence = example.sentence | ||
172 | + comment = example.comment | ||
193 | 173 | ||
194 | example_dict = { 'example_id' : example.id, | 174 | example_dict = { 'example_id' : example.id, |
195 | 'frame_id' : frame_table_id, | 175 | 'frame_id' : frame_table_id, |
@@ -219,18 +199,19 @@ def nkjpLemmaExamplesObjToJs(nkjp_examples, user, lemma): | @@ -219,18 +199,19 @@ def nkjpLemmaExamplesObjToJs(nkjp_examples, user, lemma): | ||
219 | for example in nkjp_examples: | 199 | for example in nkjp_examples: |
220 | confirmed = True | 200 | confirmed = True |
221 | approvers_count = lemma.entry_obj.pos.example_approvers_num | 201 | approvers_count = lemma.entry_obj.pos.example_approvers_num |
222 | - #Configuration.objects.get(selected_conf=True).example_approvers_num | ||
223 | if example.source.confirmation_required and example.approvers.count() < approvers_count: | 202 | if example.source.confirmation_required and example.approvers.count() < approvers_count: |
224 | try: | 203 | try: |
225 | example.approvers.get(username=user.username) | 204 | example.approvers.get(username=user.username) |
226 | except: | 205 | except: |
227 | confirmed = False | 206 | confirmed = False |
228 | 207 | ||
229 | - sentence = example.sentence.replace('\\', '\\\\').replace("\n", "\\n").replace("\r", "\\r").replace("\t", "\\t").replace("\"", "\\\"") | ||
230 | - comment = example.comment.replace('\\', '\\\\').replace("\n", "\\n").replace("\r", "\\r").replace("\t", "\\t").replace("\"", "\\\"") | ||
231 | - h = HTMLParser.HTMLParser() | ||
232 | - sentence = h.unescape(sentence) | ||
233 | - comment = h.unescape(comment) | 208 | + sentence = example.sentence |
209 | + comment = example.comment | ||
210 | +# sentence = example.sentence.replace('\\', '\\\\').replace("\n", "\\n").replace("\r", "\\r").replace("\t", "\\t").replace("\"", "\\\"") | ||
211 | +# comment = example.comment.replace('\\', '\\\\').replace("\n", "\\n").replace("\r", "\\r").replace("\t", "\\t").replace("\"", "\\\"") | ||
212 | +# h = HTMLParser.HTMLParser() | ||
213 | +# sentence = h.unescape(sentence) | ||
214 | +# comment = h.unescape(comment) | ||
234 | 215 | ||
235 | example_dict = { 'example_id' : example.id, | 216 | example_dict = { 'example_id' : example.id, |
236 | 'frame_id' : '', | 217 | 'frame_id' : '', |
@@ -249,8 +230,6 @@ def nkjpLemmaExamplesObjToJs(nkjp_examples, user, lemma): | @@ -249,8 +230,6 @@ def nkjpLemmaExamplesObjToJs(nkjp_examples, user, lemma): | ||
249 | @render('old_frames.html') | 230 | @render('old_frames.html') |
250 | @ajax(method='get', encode_result=False) | 231 | @ajax(method='get', encode_result=False) |
251 | def get_old_frames(request, id): | 232 | def get_old_frames(request, id): |
252 | - if request.session.has_key('lemma_from_note_id') and request.session['lemma_from_note_id']: | ||
253 | - id = request.session['lemma_from_note_id'] | ||
254 | selected_lemma = Lemma.objects.get(id=id) | 233 | selected_lemma = Lemma.objects.get(id=id) |
255 | old_frames = selected_lemma.old_frames | 234 | old_frames = selected_lemma.old_frames |
256 | reflexed_frames = [] | 235 | reflexed_frames = [] |
@@ -299,13 +278,7 @@ def get_arg_id(request, text_rep): | @@ -299,13 +278,7 @@ def get_arg_id(request, text_rep): | ||
299 | @ajax(method='get', encode_result=False) | 278 | @ajax(method='get', encode_result=False) |
300 | def get_lemma_preview(request, id, main_lemma_id): | 279 | def get_lemma_preview(request, id, main_lemma_id): |
301 | selected_lemma = Lemma.objects.get(id=id) | 280 | selected_lemma = Lemma.objects.get(id=id) |
302 | - new_frames = selected_lemma.frames.order_by('text_rep') | ||
303 | - | ||
304 | - serialized_frames = [] | ||
305 | - for frame in new_frames: | ||
306 | - serialized_frames.append(frameObjToSerializableDict(selected_lemma, frame)) | ||
307 | - json_frames = json_encode(serialized_frames) | ||
308 | - | 281 | + |
309 | frame_char_models = Frame_Char_Model.objects.order_by('priority') | 282 | frame_char_models = Frame_Char_Model.objects.order_by('priority') |
310 | frame_char_prior_model_vals = frame_char_models[0].frame_char_values.all() | 283 | frame_char_prior_model_vals = frame_char_models[0].frame_char_values.all() |
311 | 284 | ||
@@ -315,51 +288,15 @@ def get_lemma_preview(request, id, main_lemma_id): | @@ -315,51 +288,15 @@ def get_lemma_preview(request, id, main_lemma_id): | ||
315 | 288 | ||
316 | json_frame_char_list = json_encode(frame_char_list) | 289 | json_frame_char_list = json_encode(frame_char_list) |
317 | 290 | ||
318 | - # konwertowanie przykladow na zrozumiale przez java sript | ||
319 | - nkjp_examples = selected_lemma.nkjp_examples.all() | ||
320 | - nkjp_examples_js = nkjpExamplesObjToJs(nkjp_examples, request.user, selected_lemma) | ||
321 | - | ||
322 | - json_nkjp_examples = json_encode(nkjp_examples_js) | ||
323 | - | ||
324 | similarLemmasNewForm = SimilarLemmasNewForm(statuses=Lemma_Status.objects.order_by('priority')) | 291 | similarLemmasNewForm = SimilarLemmasNewForm(statuses=Lemma_Status.objects.order_by('priority')) |
325 | 292 | ||
326 | - return {'serialized_frames': json_frames, | ||
327 | - 'frame_char_list': json_frame_char_list, | ||
328 | - 'nkjp_examples': json_nkjp_examples, | 293 | + return {'frame_char_list': json_frame_char_list, |
329 | 'selected_lemma': selected_lemma, | 294 | 'selected_lemma': selected_lemma, |
330 | 'similarLemmasNewForm': similarLemmasNewForm} | 295 | 'similarLemmasNewForm': similarLemmasNewForm} |
331 | 296 | ||
332 | @ajax(method='get') | 297 | @ajax(method='get') |
333 | def get_frame_filter_options(request): | 298 | def get_frame_filter_options(request): |
334 | - # pobieranie wartosci aspektu | ||
335 | - aspect_model = Frame_Char_Model.objects.get(model_name=u'ASPEKT') | ||
336 | - aspect_vals_objs = aspect_model.frame_char_values.order_by('-priority') | ||
337 | - aspect_str_list = [val.value for val in aspect_vals_objs] | ||
338 | - | ||
339 | - # pobieranie wartosci zwrotnosci | ||
340 | - reflex_model = Frame_Char_Model.objects.get(model_name=u'ZWROTNOŚĆ') | ||
341 | - reflex_vals_objs = reflex_model.frame_char_values.order_by('-priority') | ||
342 | - reflex_str_list = [val.value for val in reflex_vals_objs] | ||
343 | - | ||
344 | - # pobieranie wartosci negatywnosci | ||
345 | - neg_model = Frame_Char_Model.objects.get(model_name=u'NEGATYWNOŚĆ') | ||
346 | - neg_vals_objs = neg_model.frame_char_values.order_by('-priority') | ||
347 | - neg_str_list = [val.value for val in neg_vals_objs] | ||
348 | - | ||
349 | - # pobieranie wartosci predykatywnosci | ||
350 | - pred_model = Frame_Char_Model.objects.get(model_name=u'PREDYKATYWNOŚĆ') | ||
351 | - pred_vals_objs = pred_model.frame_char_values.order_by('-priority') | ||
352 | - pred_str_list = [val.value for val in pred_vals_objs] | ||
353 | - | ||
354 | - # pobieranie opinii o schemacie | ||
355 | - opinion_str_list = [val.value for val in Frame_Opinion_Value.objects.order_by('priority')] | ||
356 | - | ||
357 | - return {'reflex_options': reflex_str_list, | ||
358 | - 'aspect_options': aspect_str_list, | ||
359 | - 'neg_options': neg_str_list, | ||
360 | - 'pred_options': pred_str_list, | ||
361 | - 'opinion_options': opinion_str_list} | ||
362 | - | 299 | + return schemata_filter_options() |
363 | 300 | ||
364 | @render('lemma_desc.html') | 301 | @render('lemma_desc.html') |
365 | @ajax(method='get', encode_result=False) | 302 | @ajax(method='get', encode_result=False) |
@@ -376,44 +313,14 @@ def get_lemma_desc(request, id): | @@ -376,44 +313,14 @@ def get_lemma_desc(request, id): | ||
376 | @render('new_frames.html') | 313 | @render('new_frames.html') |
377 | @ajax(method='get', encode_result=False) | 314 | @ajax(method='get', encode_result=False) |
378 | def get_new_frames(request, id): | 315 | def get_new_frames(request, id): |
379 | - if request.session.has_key('lemma_from_note_id') and request.session['lemma_from_note_id']: | ||
380 | - id = request.session['lemma_from_note_id'] | ||
381 | - | ||
382 | - selected_lemma = Lemma.objects.get(id=id) | ||
383 | - new_frames = selected_lemma.frames.order_by('text_rep') | ||
384 | - | ||
385 | -# sprawdz czy uzytkownik jest wlascicielem wybranego hasla | ||
386 | - can_modify = user_can_modify(selected_lemma, request.user) | ||
387 | - | ||
388 | - serialized_frames = [] | ||
389 | - for frame in new_frames: | ||
390 | - serialized_frames.append(frameObjToSerializableDict(selected_lemma, frame, True)) | ||
391 | - json_frames = json_encode(serialized_frames) | ||
392 | - | ||
393 | - # konwertowanie przykladow na zrozumiale przez java sript | ||
394 | - nkjp_examples = selected_lemma.nkjp_examples.order_by('source__priority', | ||
395 | - 'opinion__priority', | ||
396 | - 'sentence') | ||
397 | - nkjp_examples_js = nkjpExamplesObjToJs(nkjp_examples, request.user, selected_lemma) | ||
398 | - | ||
399 | - json_nkjp_examples = json_encode(nkjp_examples_js) | ||
400 | - | ||
401 | - add_nkjp_form = AddNkjpExampleForm() | ||
402 | - | ||
403 | - lemma_nkjp_examples = selected_lemma.lemma_nkjp_examples.order_by('source__priority', | ||
404 | - 'opinion__priority', | ||
405 | - 'sentence') | ||
406 | - lemma_nkjp_examples_js = nkjpLemmaExamplesObjToJs(lemma_nkjp_examples, request.user, selected_lemma) | ||
407 | - json_lemma_nkjp_examples = json_encode(lemma_nkjp_examples_js) | ||
408 | - | ||
409 | - return {'serialized_frames': json_frames, | ||
410 | - 'add_nkjp_form': add_nkjp_form, | ||
411 | - 'nkjp_examples': json_nkjp_examples, | ||
412 | - 'can_modify': can_modify, | ||
413 | - 'selected_lemma': selected_lemma, | ||
414 | - 'lemma_nkjp_examples': json_lemma_nkjp_examples, | ||
415 | - 'skladnica_examples': selected_lemma.skladnica_frames.exists(), | ||
416 | - 'xcp_examples': selected_lemma.entry_obj.xcp_examples.exists()} | 316 | + selected_lemma = Lemma.objects.get(id=id) |
317 | + can_modify = user_can_modify(selected_lemma, request.user) | ||
318 | + add_nkjp_form = AddNkjpExampleForm() | ||
319 | + return {'add_nkjp_form': add_nkjp_form, | ||
320 | + 'can_modify': can_modify, | ||
321 | + 'selected_lemma': selected_lemma, | ||
322 | + 'skladnica_examples': selected_lemma.skladnica_frames.exists(), | ||
323 | + 'xcp_examples': selected_lemma.entry_obj.xcp_examples.exists()} | ||
417 | 324 | ||
418 | 325 | ||
419 | @ajax(method='get', encode_result=True) | 326 | @ajax(method='get', encode_result=True) |
@@ -427,72 +334,26 @@ def get_ctrl_preview(request, id): | @@ -427,72 +334,26 @@ def get_ctrl_preview(request, id): | ||
427 | 334 | ||
428 | @render('lemma_examples.html') | 335 | @render('lemma_examples.html') |
429 | @ajax(method='get', encode_result=False) | 336 | @ajax(method='get', encode_result=False) |
430 | -def get_lemma_examples(request, id): | ||
431 | - if request.session.has_key('lemma_from_note_id') and request.session['lemma_from_note_id']: | ||
432 | - id = request.session['lemma_from_note_id'] | 337 | +def get_lemma_examples(request, id): |
433 | selected_lemma = Lemma.objects.get(id=id) | 338 | selected_lemma = Lemma.objects.get(id=id) |
434 | - lemma_nkjp_examples = selected_lemma.lemma_nkjp_examples.order_by('source__priority', | ||
435 | - 'opinion__priority', | ||
436 | - 'sentence') | ||
437 | - lemma_nkjp_examples_js = nkjpLemmaExamplesObjToJs(lemma_nkjp_examples, request.user, selected_lemma) | 339 | +# lemma_nkjp_examples = selected_lemma.lemma_nkjp_examples.order_by('source__priority', |
340 | +# 'opinion__priority', | ||
341 | +# 'sentence') | ||
342 | +# lemma_nkjp_examples_js = nkjpLemmaExamplesObjToJs(lemma_nkjp_examples, request.user, selected_lemma) | ||
438 | # sprawdz czy uzytkownik jest wlascicielem wybranego hasla | 343 | # sprawdz czy uzytkownik jest wlascicielem wybranego hasla |
439 | can_modify = user_can_modify(selected_lemma, request.user) | 344 | can_modify = user_can_modify(selected_lemma, request.user) |
440 | - json_lemma_nkjp_examples = json_encode(lemma_nkjp_examples_js) | 345 | + #json_lemma_nkjp_examples = json_encode(lemma_nkjp_examples_js) |
441 | add_nkjp_form = AddNkjpExampleForm() | 346 | add_nkjp_form = AddNkjpExampleForm() |
442 | 347 | ||
443 | return {'add_nkjp_form': add_nkjp_form, | 348 | return {'add_nkjp_form': add_nkjp_form, |
444 | - 'lemma_nkjp_examples': json_lemma_nkjp_examples, | 349 | + #'lemma_nkjp_examples': json_lemma_nkjp_examples, |
445 | 'can_modify': can_modify} | 350 | 'can_modify': can_modify} |
446 | 351 | ||
447 | -############################ semantics ################################### | ||
448 | -@ajax(method='get') | ||
449 | -def schema_got_assigned_semantics(request, lemma_id, schema_id): | ||
450 | - lemma = Lemma.objects.get(id=lemma_id) | ||
451 | -# sprawdz czy najnowsza wersja | ||
452 | -# if lemma.old: | ||
453 | -# raise AjaxError('old lemma') | ||
454 | - frames = lemma.entry_obj.actual_frames() # jeszcze po przykladach trzeba sprawdzac | ||
455 | - schema_examples = lemma.nkjp_examples.filter(frame__id=schema_id) | ||
456 | - for frame in frames.all(): | ||
457 | - if complements_pinned(frame, schema_id) or examples_pinned(frame, schema_examples): | ||
458 | - return {'got_assigned_semantics': True} | ||
459 | - return {'got_assigned_semantics': False} | ||
460 | - | ||
461 | -def complements_pinned(frame, schema_id): | ||
462 | - if frame.complements.filter(realizations__frame__id=schema_id).exists(): | ||
463 | - return True | ||
464 | - return False | ||
465 | - | ||
466 | -def examples_pinned(frame, schema_examples): | ||
467 | - for lexical_unit in frame.lexical_units.all(): | ||
468 | - for example in schema_examples.all(): | ||
469 | - if LexicalUnitExamples.objects.filter(lexical_unit=lexical_unit, | ||
470 | - example=example).exists(): | ||
471 | - return True | ||
472 | - return False | ||
473 | - | ||
474 | -@ajax(method='get') | ||
475 | -def example_got_assigned_semantics(request, lemma_id, example_id): | ||
476 | - lemma = Lemma.objects.get(id=lemma_id) | ||
477 | -# sprawdz czy najnowsza wersja | ||
478 | -# if lemma.old: | ||
479 | -# raise AjaxError('old lemma') | ||
480 | - # TODO niech lexical units beda wybierane z uzyciem Entry jak juz Tomasz to zrobi | ||
481 | - lexical_units = LexicalUnit.objects.filter(Q(base = lemma.entry)|Q(base = lemma.entry + u' się')) | ||
482 | - for lu in lexical_units: | ||
483 | - if LexicalUnitExamples.objects.filter(example__id=example_id, | ||
484 | - lexical_unit=lu).exists(): | ||
485 | - return {'got_assigned_semantics': True} | ||
486 | - return {'got_assigned_semantics': False} | ||
487 | - | ||
488 | ############################ lemma notes ################################# | 352 | ############################ lemma notes ################################# |
489 | 353 | ||
490 | @render('lemma_notes.html') | 354 | @render('lemma_notes.html') |
491 | @ajax(method='get', encode_result=False) | 355 | @ajax(method='get', encode_result=False) |
492 | def get_lemma_notes(request, id): | 356 | def get_lemma_notes(request, id): |
493 | - if request.session.has_key('lemma_from_note_id') and request.session['lemma_from_note_id']: | ||
494 | - id = request.session['lemma_from_note_id'] | ||
495 | - request.session['lemma_from_note_id'] = '' | ||
496 | selected_lemma = Lemma.objects.get(id=id) | 357 | selected_lemma = Lemma.objects.get(id=id) |
497 | add_note_form = MessageForm() | 358 | add_note_form = MessageForm() |
498 | messages = selected_lemma.messages.filter(private=False).order_by('-time') | 359 | messages = selected_lemma.messages.filter(private=False).order_by('-time') |
@@ -672,9 +533,7 @@ def restore_lemma(request, change_id, lemma_id): | @@ -672,9 +533,7 @@ def restore_lemma(request, change_id, lemma_id): | ||
672 | 533 | ||
673 | @render('change_ctrl.html') | 534 | @render('change_ctrl.html') |
674 | @ajax(method='get', encode_result=False) | 535 | @ajax(method='get', encode_result=False) |
675 | -def get_change_ctrl(request, id): | ||
676 | - if request.session.has_key('lemma_from_note_id') and request.session['lemma_from_note_id']: | ||
677 | - id = request.session['lemma_from_note_id'] | 536 | +def get_change_ctrl(request, id): |
678 | selected_lemma = Lemma.objects.get(id=id) | 537 | selected_lemma = Lemma.objects.get(id=id) |
679 | old_versions = selected_lemma.old_versions.order_by('-time') | 538 | old_versions = selected_lemma.old_versions.order_by('-time') |
680 | can_modify = (user_can_modify(selected_lemma, request.user) and | 539 | can_modify = (user_can_modify(selected_lemma, request.user) and |
@@ -844,176 +703,14 @@ def get_sort_order(request): | @@ -844,176 +703,14 @@ def get_sort_order(request): | ||
844 | 703 | ||
845 | @render('filter_form.html') | 704 | @render('filter_form.html') |
846 | @ajax(method='get', encode_result=False) | 705 | @ajax(method='get', encode_result=False) |
847 | -def filter_form(request): | ||
848 | - if request.session.has_key('lemma_preview') and request.session['lemma_preview']: | ||
849 | - if not request.session.has_key('filter_rules_lemma_preview'): | ||
850 | - request.session['filter_rules_lemma_preview'] = default_filter_rules() | ||
851 | - filter_rules = request.session['filter_rules_lemma_preview'] | ||
852 | - else: | ||
853 | - if not request.session.has_key('filter_rules'): | ||
854 | - request.session['filter_rules'] = default_filter_rules() | ||
855 | - filter_rules = request.session['filter_rules'] | ||
856 | - | ||
857 | - users = User.objects.none() | ||
858 | - phraseologists = User.objects.none() | ||
859 | - semanticists = User.objects.none() | ||
860 | - vocabularies = Vocabulary.objects.none() | ||
861 | - senders = User.objects.none() | ||
862 | - statuses = get_anon_profile().visible_statuses.all() | ||
863 | - can_confirm_example = False | ||
864 | - if request.user.is_authenticated(): | ||
865 | - users = User.objects.filter(lemmas__old=False).distinct().order_by('username') | ||
866 | - phraseologists = User.objects.filter(phraseologist_lemmas__old=False).distinct().order_by('username') | ||
867 | - semanticists = User.objects.filter(semanticist_lemmas__old=False).distinct().order_by('username') | ||
868 | - vocabularies = request.user.visible_vocabularies.all() | ||
869 | - senders = User.objects.order_by('groups__group_settings__priority') | ||
870 | - statuses = Lemma_Status.objects.all() | ||
871 | - if request.user.has_perm('dictionary.confirm_example') or request.user.is_superuser: | ||
872 | - can_confirm_example = True | ||
873 | - | ||
874 | - form = FilterForm(users=users, | ||
875 | - phraseologists=phraseologists, | ||
876 | - semanticists=semanticists, | ||
877 | - vocabularies=vocabularies, | ||
878 | - senders=senders, | ||
879 | - statuses=statuses, | ||
880 | - sel_pos=filter_rules['pos'], | ||
881 | - sel_user=filter_rules['owner'], | ||
882 | - sel_phraseologist=filter_rules['phraseologist'], | ||
883 | - sel_semanticist=filter_rules['semanticist'], | ||
884 | - sel_vocabulary=filter_rules['vocabulary'], | ||
885 | - sel_status=filter_rules['status'], | ||
886 | - sel_reflex=filter_rules['reflex'], | ||
887 | - sel_negativity=filter_rules['negativity'], | ||
888 | - sel_predicativity=filter_rules['predicativity'], | ||
889 | - sel_aspect=filter_rules['aspect'], | ||
890 | - sel_has_argument=filter_rules['argument'], | ||
891 | - sel_has_position=filter_rules['position'], | ||
892 | - sel_frame_opinion=filter_rules['frame_opinion'], | ||
893 | - can_confirm_example = can_confirm_example, | ||
894 | - sel_example_source=filter_rules['example_source'], | ||
895 | - sel_approver=filter_rules['approver'], | ||
896 | - sel_sender=filter_rules['sender'], | ||
897 | - frame_phraseologic=filter_rules['frame_phraseologic']) | ||
898 | - return {'form': form} | 706 | +def filter_form(request): |
707 | + return prepare_filter_form(request) | ||
899 | 708 | ||
900 | @ajax(method='post') | 709 | @ajax(method='post') |
901 | def filter_form_submit(request, form_data): | 710 | def filter_form_submit(request, form_data): |
902 | - filter_dict = dict((x['name'], x['value']) for x in form_data) | ||
903 | - | ||
904 | - if filter_dict['pos']: | ||
905 | - pos_obj = POS.objects.get(id=filter_dict['pos']) | ||
906 | - else: | ||
907 | - pos_obj = None | ||
908 | - | ||
909 | - if filter_dict['owner']: | ||
910 | - owner_obj = User.objects.get(id=filter_dict['owner']) | ||
911 | - else: | ||
912 | - owner_obj = None | ||
913 | - | ||
914 | - if filter_dict['phraseologist']: | ||
915 | - phraseologist_obj = User.objects.get(id=filter_dict['phraseologist']) | ||
916 | - else: | ||
917 | - phraseologist_obj = None | ||
918 | - | ||
919 | - if filter_dict['semanticist']: | ||
920 | - semanticist_obj = User.objects.get(id=filter_dict['semanticist']) | ||
921 | - else: | ||
922 | - semanticist_obj = None | ||
923 | - | ||
924 | - if filter_dict['vocabulary']: | ||
925 | - vocabulary_obj = Vocabulary.objects.get(name=filter_dict['vocabulary']) | ||
926 | - else: | ||
927 | - vocabulary_obj = None | ||
928 | - | ||
929 | - if filter_dict['status']: | ||
930 | - status_obj = Lemma_Status.objects.get(id=filter_dict['status']) | ||
931 | - else: | ||
932 | - status_obj = None | ||
933 | - | ||
934 | - if filter_dict['example_source']: | ||
935 | - nkjp_source_obj = NKJP_Source.objects.get(id=filter_dict['example_source']) | ||
936 | - else: | ||
937 | - nkjp_source_obj = None | ||
938 | - | ||
939 | - if filter_dict['approver']: | ||
940 | - approver_obj = User.objects.get(id=filter_dict['approver']) | ||
941 | - else: | ||
942 | - approver_obj = None | ||
943 | - | ||
944 | - if filter_dict['has_message_from']: | ||
945 | - try: | ||
946 | - sender_obj = User.objects.get(pk=filter_dict['has_message_from']) | ||
947 | - except User.DoesNotExist: | ||
948 | - sender_obj = None | ||
949 | - else: | ||
950 | - sender_obj = None | ||
951 | - | ||
952 | - reflex_obj, reflex_val = get_frame_char_and_its_value(filter_dict['reflex'], '*') | ||
953 | - negativity_obj, negativity_val = get_frame_char_and_its_value(filter_dict['negativity'], '*') | ||
954 | - aspect_obj, aspect_val = get_frame_char_and_its_value(filter_dict['aspect'], '*') | ||
955 | - pred_obj, pred_val = get_frame_char_and_its_value(filter_dict['predicativity'], '*') | ||
956 | - | ||
957 | - argument = filter_dict['has_argument'] | ||
958 | - position = filter_dict['has_position'] | ||
959 | - | ||
960 | - if filter_dict['frame_opinion']: | ||
961 | - frame_opinion_obj = Frame_Opinion_Value.objects.get(id=filter_dict['frame_opinion']) | ||
962 | - opinion_val = frame_opinion_obj.value | ||
963 | - else: | ||
964 | - frame_opinion_obj = None | ||
965 | - opinion_val = '*' | ||
966 | - | ||
967 | - if 'frame_phraseologic' in filter_dict: | ||
968 | - frame_phraseologic = filter_dict['frame_phraseologic'] | ||
969 | - else: | ||
970 | - frame_phraseologic = False | ||
971 | - | ||
972 | - if request.session.has_key('lemma_preview') and request.session['lemma_preview']: | ||
973 | - request.session['filter_rules_lemma_preview'] = {'pos' : pos_obj, | ||
974 | - 'owner' : owner_obj, | ||
975 | - 'phraseologist' : phraseologist_obj, | ||
976 | - 'semanticist' : semanticist_obj, | ||
977 | - 'vocabulary' : vocabulary_obj, | ||
978 | - 'status' : status_obj, | ||
979 | - 'example_source' : nkjp_source_obj, | ||
980 | - 'approver' : approver_obj, | ||
981 | - 'reflex' : reflex_obj, | ||
982 | - 'negativity' : negativity_obj, | ||
983 | - 'predicativity' : pred_obj, | ||
984 | - 'aspect' : aspect_obj, | ||
985 | - 'argument' : argument, | ||
986 | - 'position' : position, | ||
987 | - 'frame_opinion' : frame_opinion_obj, | ||
988 | - 'sender' : sender_obj, | ||
989 | - 'frame_phraseologic' : frame_phraseologic} | ||
990 | - else: | ||
991 | - request.session['filter_rules'] = {'pos' : pos_obj, | ||
992 | - 'owner' : owner_obj, | ||
993 | - 'phraseologist' : phraseologist_obj, | ||
994 | - 'semanticist' : semanticist_obj, | ||
995 | - 'vocabulary' : vocabulary_obj, | ||
996 | - 'status' : status_obj, | ||
997 | - 'example_source' : nkjp_source_obj, | ||
998 | - 'approver' : approver_obj, | ||
999 | - 'reflex' : reflex_obj, | ||
1000 | - 'negativity' : negativity_obj, | ||
1001 | - 'predicativity' : pred_obj, | ||
1002 | - 'aspect' : aspect_obj, | ||
1003 | - 'argument' : argument, | ||
1004 | - 'position' : position, | ||
1005 | - 'frame_opinion' : frame_opinion_obj, | ||
1006 | - 'sender' : sender_obj, | ||
1007 | - 'frame_phraseologic' : frame_phraseologic} | ||
1008 | - | ||
1009 | - return {'filter_frames': filter_dict['filter_frames'], | ||
1010 | - 'reflex' : reflex_val, | ||
1011 | - 'negativity' : negativity_val, | ||
1012 | - 'predicativity': pred_val, | ||
1013 | - 'opinion' : opinion_val, | ||
1014 | - 'aspect' : aspect_val, | ||
1015 | - 'position' : filter_dict['has_position'], | ||
1016 | - 'argument' : filter_dict['has_argument']} | 711 | + filter_dict = dict((x['name'], x['value']) for x in form_data) |
712 | + schemata_filter_options = save_lemma_filters_and_get_schemata_filter_setup(request, filter_dict) | ||
713 | + return schemata_filter_options | ||
1017 | 714 | ||
1018 | @ajax(method='post') | 715 | @ajax(method='post') |
1019 | def save_columns(request, col_model, col_names, remap): | 716 | def save_columns(request, col_model, col_names, remap): |
@@ -1572,10 +1269,7 @@ def get_default_char_value(possibilities): | @@ -1572,10 +1269,7 @@ def get_default_char_value(possibilities): | ||
1572 | value = possibilities.get(default=True) | 1269 | value = possibilities.get(default=True) |
1573 | except Frame_Char_Value.DoesNotExist: | 1270 | except Frame_Char_Value.DoesNotExist: |
1574 | value = possibilities.all()[0] | 1271 | value = possibilities.all()[0] |
1575 | - return value | ||
1576 | - | ||
1577 | -def escape_regex(string): | ||
1578 | - return string.replace('(', '\(').replace(')', '\)').replace('{', '\{').replace('}', '\}').replace('[', '\[').replace(']', '\]') | 1272 | + return value |
1579 | 1273 | ||
1580 | def regex_query(string): | 1274 | def regex_query(string): |
1581 | q_query = [] | 1275 | q_query = [] |
@@ -2180,7 +1874,7 @@ def get_frame_chars(request, frame_id): | @@ -2180,7 +1874,7 @@ def get_frame_chars(request, frame_id): | ||
2180 | @ajax(method='get', encode_result=False) | 1874 | @ajax(method='get', encode_result=False) |
2181 | def xcp_example_propositions(request, frame, argument_ids, lemma_id): | 1875 | def xcp_example_propositions(request, frame, argument_ids, lemma_id): |
2182 | propositions = [] | 1876 | propositions = [] |
2183 | - lemma_obj = Lemma.objects.get(old=False, id=lemma_id) | 1877 | + lemma_obj = Lemma.objects.get(id=lemma_id) |
2184 | entry = lemma_obj.entry_obj | 1878 | entry = lemma_obj.entry_obj |
2185 | # TODO: zlikwidowac zaslepke na przyslowki | 1879 | # TODO: zlikwidowac zaslepke na przyslowki |
2186 | if entry.pos.tag != 'adv': | 1880 | if entry.pos.tag != 'adv': |
@@ -2553,7 +2247,7 @@ def save_new_frames(request, data, id, examples, lemma_examples): | @@ -2553,7 +2247,7 @@ def save_new_frames(request, data, id, examples, lemma_examples): | ||
2553 | reconnect_examples_operations.remove(disconnect_example_operation(example, nkjp_example_obj)) | 2247 | reconnect_examples_operations.remove(disconnect_example_operation(example, nkjp_example_obj)) |
2554 | except ValueError: | 2248 | except ValueError: |
2555 | reconnect_examples_operations.append(connect_example_operation(example, nkjp_example_obj)) | 2249 | reconnect_examples_operations.append(connect_example_operation(example, nkjp_example_obj)) |
2556 | - reconnect_examples(reconnect_examples_operations) | 2250 | + reconnect_examples(new_lemma_ver, reconnect_examples_operations) |
2557 | 2251 | ||
2558 | # dodawanie przykladow nkjp do czasownika | 2252 | # dodawanie przykladow nkjp do czasownika |
2559 | for example in decoded_lemma_examples: | 2253 | for example in decoded_lemma_examples: |
@@ -2605,10 +2299,12 @@ def validate_new_frames(request, data, id, examples, lemma_examples, | @@ -2605,10 +2299,12 @@ def validate_new_frames(request, data, id, examples, lemma_examples, | ||
2605 | 2299 | ||
2606 | status_need_validation = False | 2300 | status_need_validation = False |
2607 | status_need_examples_check = False | 2301 | status_need_examples_check = False |
2302 | + status_need_semantic_check = False | ||
2608 | try: | 2303 | try: |
2609 | status_obj = Lemma_Status.objects.get(id=status_id) | 2304 | status_obj = Lemma_Status.objects.get(id=status_id) |
2610 | status_need_validation = status_obj.validate | 2305 | status_need_validation = status_obj.validate |
2611 | status_need_examples_check = status_obj.check_examples | 2306 | status_need_examples_check = status_obj.check_examples |
2307 | + status_need_semantic_check = status_obj.check_semantics | ||
2612 | except Lemma_Status.DoesNotExist: | 2308 | except Lemma_Status.DoesNotExist: |
2613 | status_obj = None | 2309 | status_obj = None |
2614 | 2310 | ||
@@ -2620,6 +2316,8 @@ def validate_new_frames(request, data, id, examples, lemma_examples, | @@ -2620,6 +2316,8 @@ def validate_new_frames(request, data, id, examples, lemma_examples, | ||
2620 | serialized_frames, error = validate_examples_and_mark_errors(old_object, status_obj, selected_frame_id) | 2316 | serialized_frames, error = validate_examples_and_mark_errors(old_object, status_obj, selected_frame_id) |
2621 | elif status_need_validation or not status_obj: | 2317 | elif status_need_validation or not status_obj: |
2622 | serialized_frames, error = validate_schemas_and_mark_errors(old_object, status_obj, selected_frame_id) | 2318 | serialized_frames, error = validate_schemas_and_mark_errors(old_object, status_obj, selected_frame_id) |
2319 | + elif status_need_semantic_check: | ||
2320 | + serialized_frames, error = validate_schemata_for_semantics_and_mark_errors(old_object, status_obj, selected_frame_id) | ||
2623 | 2321 | ||
2624 | if error: | 2322 | if error: |
2625 | return {'id' : '', | 2323 | return {'id' : '', |
@@ -2820,63 +2518,6 @@ def prepare_sort_rules(sort_rules): | @@ -2820,63 +2518,6 @@ def prepare_sort_rules(sort_rules): | ||
2820 | prepared_sort_rules.append(rule['name']) | 2518 | prepared_sort_rules.append(rule['name']) |
2821 | return prepared_sort_rules | 2519 | return prepared_sort_rules |
2822 | 2520 | ||
2823 | -def pos_regex_frames(frames, string): | ||
2824 | - try: | ||
2825 | - alternative_queries = [] | ||
2826 | - for alternative in string.split('|'): | ||
2827 | - possible_frames = frames | ||
2828 | - for conj in alternative.split('&'): | ||
2829 | - model_results = [] | ||
2830 | - negation = False | ||
2831 | - conj = conj.strip() | ||
2832 | - if conj.startswith('!'): | ||
2833 | - conj = conj.lstrip('!') | ||
2834 | - negation = True | ||
2835 | - regex = ur'^%s$' % escape_regex(conj) | ||
2836 | - model_results = Position.objects.filter(frames__lemmas__old=False, | ||
2837 | - text_rep__regex=regex).distinct() | ||
2838 | - if model_results.exists(): | ||
2839 | - if negation: | ||
2840 | - possible_frames = possible_frames.exclude(positions__in=model_results) | ||
2841 | - else: | ||
2842 | - possible_frames = possible_frames.filter(positions__in=model_results) | ||
2843 | - elif not model_results.exists() and not negation: | ||
2844 | - possible_frames = Frame.objects.none() | ||
2845 | - alternative_queries.append(Q(id__in=possible_frames)) | ||
2846 | - frames = frames.filter(reduce(operator.or_, alternative_queries)).distinct() | ||
2847 | - except: | ||
2848 | - frames = Frame.objects.none() | ||
2849 | - return frames | ||
2850 | - | ||
2851 | -def arg_regex_frames(frames, string): | ||
2852 | - try: | ||
2853 | - alternative_queries = [] | ||
2854 | - for alternative in string.split('|'): | ||
2855 | - possible_frames = frames | ||
2856 | - for conj in alternative.split('&'): | ||
2857 | - model_results = [] | ||
2858 | - negation = False | ||
2859 | - conj = conj.strip() | ||
2860 | - if conj.startswith('!'): | ||
2861 | - conj = conj.lstrip('!') | ||
2862 | - negation = True | ||
2863 | - regex = ur'^%s$' % escape_regex(conj) | ||
2864 | - model_results = Argument.objects.filter(positions__frames__lemmas__old=False, | ||
2865 | - text_rep__regex=regex).distinct() | ||
2866 | - if model_results.exists(): | ||
2867 | - if negation: | ||
2868 | - possible_frames = possible_frames.exclude(positions__arguments__in=model_results) | ||
2869 | - else: | ||
2870 | - possible_frames = possible_frames.filter(positions__arguments__in=model_results) | ||
2871 | - elif not model_results.exists() and not negation: | ||
2872 | - possible_frames = Frame.objects.none() | ||
2873 | - alternative_queries.append(Q(id__in=possible_frames)) | ||
2874 | - frames = frames.filter(reduce(operator.or_, alternative_queries)).distinct() | ||
2875 | - except: | ||
2876 | - frames = Frame.objects.none() | ||
2877 | - return frames | ||
2878 | - | ||
2879 | -# @TODO to co tutaj jest prezentowane jest bardzo glupie | ||
2880 | def get_lemma_query(prepared_sort_rules, filter_rules, lemma_query, user): | 2521 | def get_lemma_query(prepared_sort_rules, filter_rules, lemma_query, user): |
2881 | lemmas = Lemma.objects.none() | 2522 | lemmas = Lemma.objects.none() |
2882 | if user.is_authenticated(): | 2523 | if user.is_authenticated(): |
@@ -2897,66 +2538,8 @@ def get_lemma_query(prepared_sort_rules, filter_rules, lemma_query, user): | @@ -2897,66 +2538,8 @@ def get_lemma_query(prepared_sort_rules, filter_rules, lemma_query, user): | ||
2897 | lemmas = lemmas.filter(reduce(operator.or_, q_vocab_list)) | 2538 | lemmas = lemmas.filter(reduce(operator.or_, q_vocab_list)) |
2898 | lemmas = lemmas.filter(reduce(operator.or_, q_status_list)) | 2539 | lemmas = lemmas.filter(reduce(operator.or_, q_status_list)) |
2899 | 2540 | ||
2900 | - ## filtrowanie | ||
2901 | - if filter_rules['owner']: | ||
2902 | - lemmas = lemmas.filter(owner=filter_rules['owner']) | ||
2903 | - if filter_rules['phraseologist']: | ||
2904 | - lemmas = lemmas.filter(phraseologist=filter_rules['phraseologist']) | ||
2905 | - if filter_rules['semanticist']: | ||
2906 | - lemmas = lemmas.filter(semanticist=filter_rules['semanticist']) | ||
2907 | - if filter_rules['vocabulary']: | ||
2908 | - lemmas = lemmas.filter(vocabulary=filter_rules['vocabulary']) | ||
2909 | - if filter_rules['status']: | ||
2910 | - lemmas = lemmas.filter(status=filter_rules['status']) | ||
2911 | - if filter_rules['frame_opinion']: | ||
2912 | - lemmas = lemmas.filter(frame_opinions__value=filter_rules['frame_opinion']) | ||
2913 | - | ||
2914 | - frames = Frame.objects.all() | ||
2915 | - if filter_rules['reflex']: | ||
2916 | - frames = frames.filter(characteristics=filter_rules['reflex']) | ||
2917 | - if filter_rules['negativity']: | ||
2918 | - frames = frames.filter(characteristics=filter_rules['negativity']) | ||
2919 | - if filter_rules['predicativity']: | ||
2920 | - frames = frames.filter(characteristics=filter_rules['predicativity']) | ||
2921 | - if filter_rules['aspect']: | ||
2922 | - frames = frames.filter(characteristics=filter_rules['aspect']) | ||
2923 | - if filter_rules['position'] and filter_rules['position'] != '.*': | ||
2924 | - frames = pos_regex_frames(frames, filter_rules['position']) | ||
2925 | - if filter_rules['argument'] and filter_rules['argument'] != '.*': | ||
2926 | - frames = arg_regex_frames(frames, filter_rules['argument']) | ||
2927 | - if filter_rules['frame_phraseologic']: | ||
2928 | - frames = get_phraseologic_frames_only(frames) | ||
2929 | - | ||
2930 | - if (filter_rules['reflex'] or filter_rules['negativity'] or | ||
2931 | - filter_rules['aspect'] or filter_rules['predicativity'] or | ||
2932 | - filter_rules['frame_phraseologic'] or filter_rules['frame_opinion'] or | ||
2933 | - (filter_rules['argument'] and filter_rules['argument'] != '.*') or | ||
2934 | - (filter_rules['position'] and filter_rules['position'] != '.*')): | ||
2935 | - if filter_rules['frame_opinion']: | ||
2936 | - lemmas = lemmas.filter(frame_opinions__frame__in=frames, | ||
2937 | - frame_opinions__value=filter_rules['frame_opinion']).distinct() | ||
2938 | - else: | ||
2939 | - lemmas = lemmas.filter(frames__in=frames).distinct() | ||
2940 | - | ||
2941 | - if filter_rules['sender']: | ||
2942 | - lemmas = lemmas.filter(messages__sender=filter_rules['sender']) | ||
2943 | - | ||
2944 | - if filter_rules['pos']: | ||
2945 | - lemmas = lemmas.filter(entry_obj__pos=filter_rules['pos']) | ||
2946 | - | ||
2947 | - if filter_rules['example_source']: | ||
2948 | - lemmas = lemmas.filter(Q(nkjp_examples__source=filter_rules['example_source']) & | ||
2949 | - Q(nkjp_examples__approved=False)).distinct() | ||
2950 | - napproved_examples = NKJP_Example.objects.filter(Q(source=filter_rules['example_source']) & | ||
2951 | - Q(approved=False) & | ||
2952 | - Q(lemmas__old=False) & | ||
2953 | - ~Q(approvers=user)).distinct() | ||
2954 | - | ||
2955 | - if filter_rules['approver']: | ||
2956 | - napproved_examples = napproved_examples.filter(approvers=filter_rules['approver']) | ||
2957 | - lemmas = lemmas.filter(nkjp_examples__in=napproved_examples) | ||
2958 | - | ||
2959 | - lemmas = lemmas.distinct() | 2541 | + ## filtrowanie |
2542 | + lemmas = filter_lemmas(lemmas, filter_rules, user) | ||
2960 | 2543 | ||
2961 | ## sortowanie | 2544 | ## sortowanie |
2962 | entrySortDefined = False | 2545 | entrySortDefined = False |
@@ -3211,3 +2794,28 @@ def get_examples(request, lemma_id): | @@ -3211,3 +2794,28 @@ def get_examples(request, lemma_id): | ||
3211 | json_examples = json_encode(examples_js) | 2794 | json_examples = json_encode(examples_js) |
3212 | return {'examples': json_examples, | 2795 | return {'examples': json_examples, |
3213 | 'can_modify': user_can_modify(lemma, request.user)} | 2796 | 'can_modify': user_can_modify(lemma, request.user)} |
2797 | + | ||
2798 | +@ajax(method='get') | ||
2799 | +def get_schemata_and_examples(request, lemma_id): | ||
2800 | + lemma = Lemma.objects.get(id=lemma_id) | ||
2801 | + | ||
2802 | + examples = lemma.nkjp_examples.order_by('source__priority', | ||
2803 | + 'opinion__priority', | ||
2804 | + 'sentence') | ||
2805 | + examples_js = nkjpExamplesObjToJs(examples, request.user, lemma) | ||
2806 | + json_examples = json_encode(examples_js) | ||
2807 | + | ||
2808 | + lemma_examples = lemma.lemma_nkjp_examples.order_by('source__priority', | ||
2809 | + 'opinion__priority', | ||
2810 | + 'sentence') | ||
2811 | + lemma_examples_js = nkjpLemmaExamplesObjToJs(lemma_examples, request.user, lemma) | ||
2812 | + json_lemma_examples = json_encode(lemma_examples_js) | ||
2813 | + | ||
2814 | + schemata = lemma.frames.order_by('text_rep') | ||
2815 | + serialized_schemata = [frameObjToSerializableDict(lemma, schema, True) for schema in schemata] | ||
2816 | + json_schemata = json_encode(serialized_schemata) | ||
2817 | + | ||
2818 | + return {'examples': json_examples, | ||
2819 | + 'lemma_examples': json_lemma_examples, | ||
2820 | + 'schemata': json_schemata, | ||
2821 | + 'can_modify': user_can_modify(lemma, request.user)} |
dictionary/ajax_user_stats.py
@@ -22,8 +22,10 @@ | @@ -22,8 +22,10 @@ | ||
22 | 22 | ||
23 | """Module covering functions used in user statistics views""" | 23 | """Module covering functions used in user statistics views""" |
24 | 24 | ||
25 | +import operator | ||
26 | + | ||
25 | from django.contrib.auth.models import User | 27 | from django.contrib.auth.models import User |
26 | -from django.db.models import Count, Sum | 28 | +from django.db.models import Count, Sum, Q |
27 | 29 | ||
28 | from common.decorators import render, ajax | 30 | from common.decorators import render, ajax |
29 | from dictionary.models import Lemma, Lemma_Status | 31 | from dictionary.models import Lemma, Lemma_Status |
@@ -86,8 +88,8 @@ def get_user_stats(request, user_name): | @@ -86,8 +88,8 @@ def get_user_stats(request, user_name): | ||
86 | 'all_semantic_owned_lemmas_count': all_semantic_owned_lemmas.count(), | 88 | 'all_semantic_owned_lemmas_count': all_semantic_owned_lemmas.count(), |
87 | 'all_semantic_owned_frames_count': all_semantic_owned_frames_count, | 89 | 'all_semantic_owned_frames_count': all_semantic_owned_frames_count, |
88 | 'earned_cash': total_earned_cash, | 90 | 'earned_cash': total_earned_cash, |
89 | - 'paid_cash' : round(user.user_stats.paid_cash, 2), | ||
90 | - 'surcharge' : round(user.user_stats.paid_cash-total_earned_cash, 2), | 91 | + 'paid_cash': round(user.user_stats.paid_cash, 2), |
92 | + 'surcharge': round(user.user_stats.paid_cash-total_earned_cash, 2), | ||
91 | 'lex_work_stats': lex_work_stats, | 93 | 'lex_work_stats': lex_work_stats, |
92 | 'phraseology_work_stats': phraseology_work_stats, | 94 | 'phraseology_work_stats': phraseology_work_stats, |
93 | 'semantics_work_stats': semantics_work_stats} | 95 | 'semantics_work_stats': semantics_work_stats} |
@@ -212,22 +214,23 @@ def get_phraseology_stats(user): | @@ -212,22 +214,23 @@ def get_phraseology_stats(user): | ||
212 | return phraseology_work_stats | 214 | return phraseology_work_stats |
213 | 215 | ||
214 | def get_used_bindings(added_bindings): | 216 | def get_used_bindings(added_bindings): |
215 | - used_bindings = added_bindings | 217 | + unused_bindings = [] |
216 | for added_binding in added_bindings.all(): | 218 | for added_binding in added_bindings.all(): |
217 | binded_entry = added_binding.binded_entry | 219 | binded_entry = added_binding.binded_entry |
218 | act_binded_lemma = binded_entry.lemmas.get(old=False) | 220 | act_binded_lemma = binded_entry.lemmas.get(old=False) |
219 | if act_binded_lemma.status.type.sym_name == 'erase': | 221 | if act_binded_lemma.status.type.sym_name == 'erase': |
220 | - used_bindings = used_bindings.exclude(pk=added_binding.pk) | 222 | + unused_bindings.append(added_binding.pk) |
221 | else: | 223 | else: |
222 | added_frame = added_binding.phraseologic_frame | 224 | added_frame = added_binding.phraseologic_frame |
223 | - act_lemma_phras_frames = act_binded_lemma.frames.annotate(positions_count=Count('positions'))\ | ||
224 | - .filter(phraseologic=True, | ||
225 | - positions_count=added_frame.positions.count()) | 225 | + act_lemma_phras_frames = act_binded_lemma.frames.filter(phraseologic=True) |
226 | + act_lemma_phras_frames = act_lemma_phras_frames.annotate(positions_count=Count('positions')) | ||
227 | + act_lemma_phras_frames = act_lemma_phras_frames.filter(positions_count=added_frame.positions.count()) | ||
226 | for pos in added_frame.positions.all(): | 228 | for pos in added_frame.positions.all(): |
227 | act_lemma_phras_frames = act_lemma_phras_frames.filter(positions__text_rep=pos.text_rep) | 229 | act_lemma_phras_frames = act_lemma_phras_frames.filter(positions__text_rep=pos.text_rep) |
228 | - if not act_lemma_phras_frames.exists(): | ||
229 | - used_bindings = used_bindings.exclude(pk=added_binding.pk) | ||
230 | - return used_bindings | 230 | + if not act_lemma_phras_frames.exists(): |
231 | + unused_bindings.append(added_binding.pk) | ||
232 | + break | ||
233 | + return added_bindings.exclude(pk__in=unused_bindings) | ||
231 | 234 | ||
232 | def get_semantics_stats(user): | 235 | def get_semantics_stats(user): |
233 | earned_cash = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('cash'))['cash__sum'] | 236 | earned_cash = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('cash'))['cash__sum'] |
@@ -241,28 +244,40 @@ def get_semantics_stats(user): | @@ -241,28 +244,40 @@ def get_semantics_stats(user): | ||
241 | prop_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('prop_frames'))['prop_frames__sum'] | 244 | prop_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('prop_frames'))['prop_frames__sum'] |
242 | if prop_frames == None: | 245 | if prop_frames == None: |
243 | prop_frames = 0 | 246 | prop_frames = 0 |
247 | + part_prop_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('part_prop_frames'))['part_prop_frames__sum'] | ||
248 | + if part_prop_frames == None: | ||
249 | + part_prop_frames = 0 | ||
244 | wrong_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('wrong_frames'))['wrong_frames__sum'] | 250 | wrong_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('wrong_frames'))['wrong_frames__sum'] |
245 | if wrong_frames == None: | 251 | if wrong_frames == None: |
246 | wrong_frames = 0 | 252 | wrong_frames = 0 |
247 | corr_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('corr_frames'))['corr_frames__sum'] | 253 | corr_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('corr_frames'))['corr_frames__sum'] |
248 | if corr_frames == None: | 254 | if corr_frames == None: |
249 | - corr_frames = 0 | 255 | + corr_frames = 0 |
256 | + part_corr_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('part_corr_frames'))['part_corr_frames__sum'] | ||
257 | + if part_corr_frames == None: | ||
258 | + part_corr_frames = 0 | ||
250 | ncorr_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('ncorr_frames'))['ncorr_frames__sum'] | 259 | ncorr_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('ncorr_frames'))['ncorr_frames__sum'] |
251 | if ncorr_frames == None: | 260 | if ncorr_frames == None: |
252 | ncorr_frames = 0 | 261 | ncorr_frames = 0 |
253 | made_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('made_frames'))['made_frames__sum'] | 262 | made_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('made_frames'))['made_frames__sum'] |
254 | if made_frames == None: | 263 | if made_frames == None: |
255 | - made_frames = 0 | 264 | + made_frames = 0 |
265 | + added_connections = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('added_connections'))['added_connections__sum'] | ||
266 | + if added_connections == None: | ||
267 | + added_connections = 0 | ||
256 | efficacy = 0.0 | 268 | efficacy = 0.0 |
257 | if prop_frames+wrong_frames > 0: | 269 | if prop_frames+wrong_frames > 0: |
258 | efficacy = float(prop_frames)/float(prop_frames+wrong_frames)*100.0 | 270 | efficacy = float(prop_frames)/float(prop_frames+wrong_frames)*100.0 |
259 | 271 | ||
260 | - sem_work_stats = {'earned_cash' : round(earned_cash, 2), | ||
261 | - 'bonus_cash' : round(bonus_cash, 2), | ||
262 | - 'prop_frames' : prop_frames, | ||
263 | - 'wrong_frames' : wrong_frames, | ||
264 | - 'corr_frames' : corr_frames, | ||
265 | - 'checked_frames': ncorr_frames+corr_frames, | ||
266 | - 'made_frames' : made_frames, | ||
267 | - 'efficacy' : round(efficacy, 2)} | 272 | + sem_work_stats = {'earned_cash': round(earned_cash, 2), |
273 | + 'bonus_cash': round(bonus_cash, 2), | ||
274 | + 'prop_frames': prop_frames, | ||
275 | + 'part_prop_frames': part_prop_frames, | ||
276 | + 'wrong_frames': wrong_frames, | ||
277 | + 'corr_frames': corr_frames, | ||
278 | + 'part_corr_frames': part_corr_frames, | ||
279 | + 'checked_frames': ncorr_frames+corr_frames+part_corr_frames, | ||
280 | + 'made_frames': made_frames, | ||
281 | + 'efficacy': round(efficacy, 2), | ||
282 | + 'added_connections' : added_connections} | ||
268 | return sem_work_stats | 283 | return sem_work_stats |
dictionary/ajax_vocabulary_management.py
@@ -155,6 +155,8 @@ def create_text_walenty(file_name, lemmas, vocabularies, frame_opinions, | @@ -155,6 +155,8 @@ def create_text_walenty(file_name, lemmas, vocabularies, frame_opinions, | ||
155 | pred_val=pred_val, | 155 | pred_val=pred_val, |
156 | aspect_val=aspect_val).order_by('text_rep') | 156 | aspect_val=aspect_val).order_by('text_rep') |
157 | for frame in matching_frames: | 157 | for frame in matching_frames: |
158 | + if not lemma.phraseology_ready() and frame.phraseologic: | ||
159 | + continue | ||
158 | if not frame_opinions or founded_frame_opinions.filter(frame=frame).exists(): | 160 | if not frame_opinions or founded_frame_opinions.filter(frame=frame).exists(): |
159 | text_rep = frame.get_position_spaced_text_rep() | 161 | text_rep = frame.get_position_spaced_text_rep() |
160 | if add_frame_opinions: | 162 | if add_frame_opinions: |
dictionary/common_func.py
1 | #-*- coding:utf-8 -*- | 1 | #-*- coding:utf-8 -*- |
2 | 2 | ||
3 | -#Copyright (c) 2012, Bartłomiej Nitoń | ||
4 | -#All rights reserved. | ||
5 | - | ||
6 | -#Redistribution and use in source and binary forms, with or without modification, are permitted provided | ||
7 | -#that the following conditions are met: | ||
8 | - | ||
9 | -# Redistributions of source code must retain the above copyright notice, this list of conditions and | ||
10 | -# the following disclaimer. | ||
11 | -# Redistributions in binary form must reproduce the above copyright notice, this list of conditions | ||
12 | -# and the following disclaimer in the documentation and/or other materials provided with the distribution. | ||
13 | - | ||
14 | -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED | ||
15 | -# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | ||
16 | -# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||
17 | -# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | ||
18 | -# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
19 | -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
20 | -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
21 | -# POSSIBILITY OF SUCH DAMAGE. | ||
22 | - | ||
23 | ''' | 3 | ''' |
24 | Common functions used in Slowal application. | 4 | Common functions used in Slowal application. |
25 | ''' | 5 | ''' |
@@ -131,4 +111,6 @@ def have_same_positions_structure(pos1, pos2): | @@ -131,4 +111,6 @@ def have_same_positions_structure(pos1, pos2): | ||
131 | if(pos1_args == pos2_args and pos1_cats==pos2_cats): | 111 | if(pos1_args == pos2_args and pos1_cats==pos2_cats): |
132 | same_structure = True | 112 | same_structure = True |
133 | return same_structure | 113 | return same_structure |
134 | - | 114 | + |
115 | +def escape_regex(string): | ||
116 | + return string.replace('(', '\(').replace(')', '\)').replace('{', '\{').replace('}', '\}').replace('[', '\[').replace(']', '\]') |
dictionary/filtering.py
0 → 100644
1 | +# -*- coding: utf-8 -*- | ||
2 | + | ||
3 | +import operator | ||
4 | + | ||
5 | +from django.contrib.auth.models import User | ||
6 | +from django.db.models import Q | ||
7 | + | ||
8 | +from accounts.models import get_anon_profile | ||
9 | +from dictionary.common_func import escape_regex | ||
10 | +from dictionary.forms import FilterForm | ||
11 | +from dictionary.models import Argument, Frame, Frame_Char_Model, Frame_Opinion_Value, \ | ||
12 | + Lemma, Lemma_Status, NKJP_Example, NKJP_Source, POS, \ | ||
13 | + Position, Vocabulary, \ | ||
14 | + get_frame_char_and_its_value, get_schemata_by_type | ||
15 | +from semantics.forms import GeneralSelPrefForm, RelationalSelPrefForm, RoleForm, \ | ||
16 | + SynsetSelPrefForm | ||
17 | +from semantics.models import Complement, FrameOpinion, RelationalSelectivePreference, \ | ||
18 | + SemanticFrame | ||
19 | +from wordnet.models import LexicalUnit | ||
20 | + | ||
21 | +def schemata_filter_options(): | ||
22 | + # pobieranie wartosci aspektu | ||
23 | + aspect_model = Frame_Char_Model.objects.get(model_name=u'ASPEKT') | ||
24 | + aspect_vals_objs = aspect_model.frame_char_values.order_by('-priority') | ||
25 | + aspect_options = [{'name': '*', 'value': '*'}] | ||
26 | + aspect_options.extend([{'name': val.value, 'value': val.value} for val in aspect_vals_objs]) | ||
27 | + | ||
28 | + # pobieranie wartosci zwrotnosci | ||
29 | + reflex_model = Frame_Char_Model.objects.get(model_name=u'ZWROTNOŚĆ') | ||
30 | + reflex_vals_objs = reflex_model.frame_char_values.order_by('-priority') | ||
31 | + reflex_options = [{'name': '*', 'value': '*'}] | ||
32 | + reflex_options.extend([{'name': val.value, 'value': val.value} for val in reflex_vals_objs]) | ||
33 | + | ||
34 | + # pobieranie wartosci negatywnosci | ||
35 | + neg_model = Frame_Char_Model.objects.get(model_name=u'NEGATYWNOŚĆ') | ||
36 | + neg_vals_objs = neg_model.frame_char_values.order_by('-priority') | ||
37 | + neg_options = [{'name': '*', 'value': '*'}] | ||
38 | + neg_options.extend([{'name': val.value, 'value': val.value} for val in neg_vals_objs]) | ||
39 | + | ||
40 | + # pobieranie wartosci predykatywnosci | ||
41 | + pred_model = Frame_Char_Model.objects.get(model_name=u'PREDYKATYWNOŚĆ') | ||
42 | + pred_vals_objs = pred_model.frame_char_values.order_by('-priority') | ||
43 | + pred_options = [{'name': '*', 'value': '*'}] | ||
44 | + pred_options.extend([{'name': val.value, 'value': val.value} for val in pred_vals_objs]) | ||
45 | + | ||
46 | + # pobieranie opinii o schemacie | ||
47 | + opinion_options = [{'name': '*', 'value': '*'}] | ||
48 | + opinion_options.extend([{'name': val.value, 'value': val.value} for val in Frame_Opinion_Value.objects.order_by('priority')]) | ||
49 | + | ||
50 | + schema_type_options = [{'name': '*', 'value': '*'}, | ||
51 | + {'name': 'normalny', 'value': 'normal'}, | ||
52 | + {'name': 'frazeologiczny', 'value': 'phraseologic'}] | ||
53 | + | ||
54 | + return {'schema_type_options': schema_type_options, | ||
55 | + 'reflex_options': reflex_options, | ||
56 | + 'aspect_options': aspect_options, | ||
57 | + 'neg_options': neg_options, | ||
58 | + 'pred_options': pred_options, | ||
59 | + 'opinion_options': opinion_options} | ||
60 | + | ||
61 | +def all_filter_rules_loaded(rules): | ||
62 | + if set(default_filter_rules().keys()) != set(rules): | ||
63 | + return False | ||
64 | + return True | ||
65 | + | ||
66 | +def default_filter_rules(): | ||
67 | + return {'lemma': '.*', | ||
68 | + 'pos': None, | ||
69 | + 'contains_phraseology': None, | ||
70 | + 'owner': None, | ||
71 | + 'phraseologist': None, | ||
72 | + 'semanticist': None, | ||
73 | + 'vocabulary': None, | ||
74 | + 'status': None, | ||
75 | + 'example_source': None, | ||
76 | + 'approver': None, | ||
77 | + 'reflex': None, | ||
78 | + 'negativity': None, | ||
79 | + 'predicativity': None, | ||
80 | + 'aspect': None, | ||
81 | + 'argument': '.*', | ||
82 | + 'position': '.*', | ||
83 | + 'schema_opinion' : None, | ||
84 | + 'sender': None, | ||
85 | + 'schema_type': None, | ||
86 | + 'frame_opinion': None, | ||
87 | + 'sem_arguments': []} | ||
88 | + | ||
89 | +def prepare_filter_form(request): | ||
90 | + if request.session.has_key('lemma_preview') and request.session['lemma_preview']: | ||
91 | + if not request.session.has_key('filter_rules_lemma_preview'): | ||
92 | + request.session['filter_rules_lemma_preview'] = default_filter_rules() | ||
93 | + filter_rules = request.session['filter_rules_lemma_preview'] | ||
94 | + else: | ||
95 | + if not request.session.has_key('filter_rules'): | ||
96 | + request.session['filter_rules'] = default_filter_rules() | ||
97 | + filter_rules = request.session['filter_rules'] | ||
98 | + | ||
99 | + users = User.objects.none() | ||
100 | + phraseologists = User.objects.none() | ||
101 | + semanticists = User.objects.none() | ||
102 | + vocabularies = Vocabulary.objects.none() | ||
103 | + senders = User.objects.none() | ||
104 | + statuses = get_anon_profile().visible_statuses.all() | ||
105 | + can_confirm_example = False | ||
106 | + if request.user.is_authenticated(): | ||
107 | + users = User.objects.filter(lemmas__old=False).distinct().order_by('username') | ||
108 | + phraseologists = User.objects.filter(phraseologist_lemmas__old=False).distinct().order_by('username') | ||
109 | + semanticists = User.objects.filter(semanticist_lemmas__old=False).distinct().order_by('username') | ||
110 | + vocabularies = request.user.visible_vocabularies.all() | ||
111 | + senders = User.objects.order_by('groups__group_settings__priority') | ||
112 | + statuses = Lemma_Status.objects.all() | ||
113 | + if request.user.has_perm('dictionary.confirm_example') or request.user.is_superuser: | ||
114 | + can_confirm_example = True | ||
115 | + | ||
116 | + form = FilterForm(users=users, | ||
117 | + phraseologists=phraseologists, | ||
118 | + semanticists=semanticists, | ||
119 | + vocabularies=vocabularies, | ||
120 | + senders=senders, | ||
121 | + statuses=statuses, | ||
122 | + lemma=filter_rules['lemma'], | ||
123 | + sel_pos=filter_rules['pos'], | ||
124 | + contains_phraseology=filter_rules['contains_phraseology'], | ||
125 | + sel_user=filter_rules['owner'], | ||
126 | + sel_phraseologist=filter_rules['phraseologist'], | ||
127 | + sel_semanticist=filter_rules['semanticist'], | ||
128 | + sel_vocabulary=filter_rules['vocabulary'], | ||
129 | + sel_status=filter_rules['status'], | ||
130 | + sel_reflex=filter_rules['reflex'], | ||
131 | + sel_negativity=filter_rules['negativity'], | ||
132 | + sel_predicativity=filter_rules['predicativity'], | ||
133 | + sel_aspect=filter_rules['aspect'], | ||
134 | + sel_has_argument=filter_rules['argument'], | ||
135 | + sel_has_position=filter_rules['position'], | ||
136 | + sel_schema_opinion=filter_rules['schema_opinion'], | ||
137 | + can_confirm_example = can_confirm_example, | ||
138 | + sel_example_source=filter_rules['example_source'], | ||
139 | + sel_approver=filter_rules['approver'], | ||
140 | + sel_sender=filter_rules['sender'], | ||
141 | + sel_schema_type=filter_rules['schema_type'], | ||
142 | + sel_frame_opinion=filter_rules['frame_opinion']) | ||
143 | + return {'form': form, | ||
144 | + 'sem_args_forms': sem_args_to_forms(filter_rules['sem_arguments'])} | ||
145 | + | ||
146 | +def sem_args_to_forms(sem_arguments): | ||
147 | + args_forms = [] | ||
148 | + first_alternative = True | ||
149 | + for alternative in sem_arguments: | ||
150 | + if first_alternative: | ||
151 | + first_alternative = False | ||
152 | + else: | ||
153 | + args_forms.append('or') | ||
154 | + for arg in alternative: | ||
155 | + args_forms.append(RoleForm(negation=arg['negation'], | ||
156 | + sel_role=arg['role'], | ||
157 | + sel_attribute=arg['attribute'], | ||
158 | + sel_preferences=get_sel_prefs_as_forms(arg))) | ||
159 | + return args_forms | ||
160 | + | ||
161 | +def get_sel_prefs_as_forms(arg): | ||
162 | + forms = [] | ||
163 | + if arg['general_prefs']: | ||
164 | + forms.extend(general_prefs_to_forms(arg['general_prefs'])) | ||
165 | + if arg['synset_prefs']: | ||
166 | + forms.extend(synset_prefs_to_forms(arg['synset_prefs'])) | ||
167 | + if arg['relational_prefs']: | ||
168 | + forms.extend(relational_prefs_to_forms(arg['relational_prefs'])) | ||
169 | + return forms | ||
170 | + | ||
171 | +def general_prefs_to_forms(prefs): | ||
172 | + forms = [] | ||
173 | + for pref in prefs: | ||
174 | + forms.append(GeneralSelPrefForm(sel_preference=pref)) | ||
175 | + return forms | ||
176 | + | ||
177 | +def synset_prefs_to_forms(prefs): | ||
178 | + forms = [] | ||
179 | + for pref in prefs: | ||
180 | + forms.append(SynsetSelPrefForm(sel_preference=pref)) | ||
181 | + return forms | ||
182 | + | ||
183 | +def relational_prefs_to_forms(prefs): | ||
184 | + forms = [] | ||
185 | + for pref in prefs: | ||
186 | + forms.append(RelationalSelPrefForm(sel_relation=pref['relation'], | ||
187 | + sel_role=pref['role'], | ||
188 | + sel_attribute=pref['attribute'])) | ||
189 | + return forms | ||
190 | + | ||
191 | +def save_lemma_filters_and_get_schemata_filter_setup(request, filter_dict): | ||
192 | + if filter_dict['pos']: | ||
193 | + pos_obj = POS.objects.get(id=filter_dict['pos']) | ||
194 | + else: | ||
195 | + pos_obj = None | ||
196 | + | ||
197 | + if filter_dict['owner']: | ||
198 | + owner_obj = User.objects.get(id=filter_dict['owner']) | ||
199 | + else: | ||
200 | + owner_obj = None | ||
201 | + | ||
202 | + if filter_dict['phraseologist']: | ||
203 | + phraseologist_obj = User.objects.get(id=filter_dict['phraseologist']) | ||
204 | + else: | ||
205 | + phraseologist_obj = None | ||
206 | + | ||
207 | + if filter_dict['semanticist']: | ||
208 | + semanticist_obj = User.objects.get(id=filter_dict['semanticist']) | ||
209 | + else: | ||
210 | + semanticist_obj = None | ||
211 | + | ||
212 | + if filter_dict['vocabulary']: | ||
213 | + vocabulary_obj = Vocabulary.objects.get(name=filter_dict['vocabulary']) | ||
214 | + else: | ||
215 | + vocabulary_obj = None | ||
216 | + | ||
217 | + if filter_dict['status']: | ||
218 | + status_obj = Lemma_Status.objects.get(id=filter_dict['status']) | ||
219 | + else: | ||
220 | + status_obj = None | ||
221 | + | ||
222 | + if filter_dict['example_source']: | ||
223 | + nkjp_source_obj = NKJP_Source.objects.get(id=filter_dict['example_source']) | ||
224 | + else: | ||
225 | + nkjp_source_obj = None | ||
226 | + | ||
227 | + if filter_dict['approver']: | ||
228 | + approver_obj = User.objects.get(id=filter_dict['approver']) | ||
229 | + else: | ||
230 | + approver_obj = None | ||
231 | + | ||
232 | + if filter_dict['has_message_from']: | ||
233 | + try: | ||
234 | + sender_obj = User.objects.get(pk=filter_dict['has_message_from']) | ||
235 | + except User.DoesNotExist: | ||
236 | + sender_obj = None | ||
237 | + else: | ||
238 | + sender_obj = None | ||
239 | + | ||
240 | + reflex_obj, reflex_val = get_frame_char_and_its_value(filter_dict['reflex'], '*') | ||
241 | + negativity_obj, negativity_val = get_frame_char_and_its_value(filter_dict['negativity'], '*') | ||
242 | + aspect_obj, aspect_val = get_frame_char_and_its_value(filter_dict['aspect'], '*') | ||
243 | + pred_obj, pred_val = get_frame_char_and_its_value(filter_dict['predicativity'], '*') | ||
244 | + | ||
245 | + if filter_dict['schema_opinion']: | ||
246 | + schema_opinion_obj = Frame_Opinion_Value.objects.get(id=filter_dict['schema_opinion']) | ||
247 | + opinion_val = schema_opinion_obj.value | ||
248 | + else: | ||
249 | + schema_opinion_obj = None | ||
250 | + opinion_val = '*' | ||
251 | + | ||
252 | + if 'schema_type' in filter_dict: | ||
253 | + schema_type = filter_dict['schema_type'] | ||
254 | + else: | ||
255 | + schema_type = None | ||
256 | + | ||
257 | + if 'frame_opinion' in filter_dict and filter_dict['frame_opinion']: | ||
258 | + frame_opinion = FrameOpinion.objects.get(id=filter_dict['frame_opinion']) | ||
259 | + else: | ||
260 | + frame_opinion = None | ||
261 | + | ||
262 | + sem_arguments = [constraints for constraints in filter_dict['sem_arguments'] if constraints != []] | ||
263 | + | ||
264 | + if request.session.has_key('lemma_preview') and request.session['lemma_preview']: | ||
265 | + request.session['filter_rules_lemma_preview'] = {'pos' : pos_obj, | ||
266 | + 'contains_phraseology': filter_dict['contains_phraseology'], | ||
267 | + 'owner' : owner_obj, | ||
268 | + 'phraseologist' : phraseologist_obj, | ||
269 | + 'semanticist' : semanticist_obj, | ||
270 | + 'vocabulary' : vocabulary_obj, | ||
271 | + 'status' : status_obj, | ||
272 | + 'example_source' : nkjp_source_obj, | ||
273 | + 'approver' : approver_obj, | ||
274 | + 'reflex' : reflex_obj, | ||
275 | + 'negativity' : negativity_obj, | ||
276 | + 'predicativity' : pred_obj, | ||
277 | + 'aspect' : aspect_obj, | ||
278 | + 'argument' : filter_dict['has_argument'], | ||
279 | + 'position' : filter_dict['has_position'], | ||
280 | + 'lemma' : filter_dict['lemma'], | ||
281 | + 'schema_opinion' : schema_opinion_obj, | ||
282 | + 'sender' : sender_obj, | ||
283 | + 'schema_type' : schema_type, | ||
284 | + 'frame_opinion' : frame_opinion, | ||
285 | + 'sem_arguments' : sem_arguments} | ||
286 | + else: | ||
287 | + request.session['filter_rules'] = {'pos' : pos_obj, | ||
288 | + 'contains_phraseology': filter_dict['contains_phraseology'], | ||
289 | + 'owner' : owner_obj, | ||
290 | + 'phraseologist' : phraseologist_obj, | ||
291 | + 'semanticist' : semanticist_obj, | ||
292 | + 'vocabulary' : vocabulary_obj, | ||
293 | + 'status' : status_obj, | ||
294 | + 'example_source' : nkjp_source_obj, | ||
295 | + 'approver' : approver_obj, | ||
296 | + 'reflex' : reflex_obj, | ||
297 | + 'negativity' : negativity_obj, | ||
298 | + 'predicativity' : pred_obj, | ||
299 | + 'aspect' : aspect_obj, | ||
300 | + 'argument' : filter_dict['has_argument'], | ||
301 | + 'position' : filter_dict['has_position'], | ||
302 | + 'lemma' : filter_dict['lemma'], | ||
303 | + 'schema_opinion' : schema_opinion_obj, | ||
304 | + 'sender' : sender_obj, | ||
305 | + 'schema_type' : schema_type, | ||
306 | + 'frame_opinion' : frame_opinion, | ||
307 | + 'sem_arguments' : sem_arguments} | ||
308 | + | ||
309 | + return {'filter_frames': filter_dict['filter_frames'], | ||
310 | + 'schema_type' : schema_type, | ||
311 | + 'reflex' : reflex_val, | ||
312 | + 'negativity' : negativity_val, | ||
313 | + 'predicativity': pred_val, | ||
314 | + 'opinion' : opinion_val, | ||
315 | + 'aspect' : aspect_val, | ||
316 | + 'position' : filter_dict['has_position'], | ||
317 | + 'argument' : filter_dict['has_argument']} | ||
318 | + | ||
319 | +def filter_lemmas(lemmas, filter_rules, user): | ||
320 | + lemmas = filter_by_lemma_properties(lemmas, filter_rules, user) | ||
321 | + lemmas = filter_by_schemata(lemmas, filter_rules) | ||
322 | + lemmas = filter_by_frames(lemmas, filter_rules) | ||
323 | + return lemmas | ||
324 | + | ||
325 | +def filter_by_lemma_properties(lemmas, filter_rules, user): | ||
326 | + if filter_rules['owner']: | ||
327 | + lemmas = lemmas.filter(owner=filter_rules['owner']) | ||
328 | + if filter_rules['phraseologist']: | ||
329 | + lemmas = lemmas.filter(phraseologist=filter_rules['phraseologist']) | ||
330 | + if filter_rules['semanticist']: | ||
331 | + lemmas = lemmas.filter(semanticist=filter_rules['semanticist']) | ||
332 | + if filter_rules['vocabulary']: | ||
333 | + lemmas = lemmas.filter(vocabulary=filter_rules['vocabulary']) | ||
334 | + if filter_rules['status']: | ||
335 | + lemmas = lemmas.filter(status=filter_rules['status']) | ||
336 | + if filter_rules['schema_opinion']: | ||
337 | + lemmas = lemmas.filter(frame_opinions__value=filter_rules['schema_opinion']) | ||
338 | + if filter_rules['lemma'] and filter_rules['lemma'] != '.*': | ||
339 | + lemmas = lemma_regex_filter(lemmas, filter_rules['lemma']) | ||
340 | + if filter_rules['sender']: | ||
341 | + lemmas = lemmas.filter(messages__sender=filter_rules['sender']) | ||
342 | + if filter_rules['pos']: | ||
343 | + lemmas = lemmas.filter(entry_obj__pos=filter_rules['pos']) | ||
344 | + if filter_rules['contains_phraseology']: | ||
345 | + phraseologic_lemmas = lemmas.filter(frames__phraseologic=True) | ||
346 | + if filter_rules['contains_phraseology'] == 'yes': | ||
347 | + lemmas = phraseologic_lemmas | ||
348 | + else: | ||
349 | + lemmas = lemmas.exclude(pk__in=phraseologic_lemmas) | ||
350 | + if filter_rules['example_source']: | ||
351 | + lemmas = lemmas.filter(Q(nkjp_examples__source=filter_rules['example_source']) & | ||
352 | + Q(nkjp_examples__approved=False)).distinct() | ||
353 | + napproved_examples = NKJP_Example.objects.filter(Q(source=filter_rules['example_source']) & | ||
354 | + Q(approved=False) & | ||
355 | + Q(lemmas__old=False) & | ||
356 | + ~Q(approvers=user)).distinct() | ||
357 | + | ||
358 | + if filter_rules['approver']: | ||
359 | + napproved_examples = napproved_examples.filter(approvers=filter_rules['approver']) | ||
360 | + lemmas = lemmas.filter(nkjp_examples__in=napproved_examples) | ||
361 | + lemmas = lemmas.distinct() | ||
362 | + return lemmas | ||
363 | + | ||
364 | +def lemma_regex_filter(lemmas, string): | ||
365 | + try: | ||
366 | + alternative_queries = [] | ||
367 | + for alternative in string.split('|'): | ||
368 | + possible_lemmas = lemmas | ||
369 | + for conj in alternative.split('&'): | ||
370 | + model_results = [] | ||
371 | + negation = False | ||
372 | + conj = conj.strip() | ||
373 | + if conj.startswith('!'): | ||
374 | + conj = conj.lstrip('!') | ||
375 | + negation = True | ||
376 | + regex = ur'^%s$' % escape_regex(conj) | ||
377 | + model_results = Lemma.objects.filter(old=False, | ||
378 | + entry_obj__name__regex=regex).distinct() | ||
379 | + if model_results.exists(): | ||
380 | + if negation: | ||
381 | + possible_lemmas = possible_lemmas.exclude(pk__in=model_results) | ||
382 | + else: | ||
383 | + possible_lemmas = possible_lemmas.filter(pk__in=model_results) | ||
384 | + elif not model_results.exists() and not negation: | ||
385 | + possible_lemmas = Lemma.objects.none() | ||
386 | + alternative_queries.append(Q(id__in=possible_lemmas)) | ||
387 | + lemmas = lemmas.filter(reduce(operator.or_, alternative_queries)).distinct() | ||
388 | + except: | ||
389 | + lemmas = Lemma.objects.none() | ||
390 | + return lemmas | ||
391 | + | ||
392 | +def filter_by_schemata(lemmas, filter_rules): | ||
393 | + schemata = Frame.objects | ||
394 | + if filter_rules['reflex']: | ||
395 | + schemata = schemata.filter(characteristics=filter_rules['reflex']) | ||
396 | + if filter_rules['negativity']: | ||
397 | + schemata = schemata.filter(characteristics=filter_rules['negativity']) | ||
398 | + if filter_rules['predicativity']: | ||
399 | + schemata = schemata.filter(characteristics=filter_rules['predicativity']) | ||
400 | + if filter_rules['aspect']: | ||
401 | + schemata = schemata.filter(characteristics=filter_rules['aspect']) | ||
402 | + if filter_rules['position'] and filter_rules['position'] != '.*': | ||
403 | + schemata = pos_regex_frames(schemata, filter_rules['position']) | ||
404 | + if filter_rules['argument'] and filter_rules['argument'] != '.*': | ||
405 | + schemata = arg_regex_frames(schemata, filter_rules['argument']) | ||
406 | + if filter_rules['schema_type']: | ||
407 | + schemata = get_schemata_by_type(filter_rules['schema_type'], schemata) | ||
408 | + | ||
409 | + if (filter_rules['reflex'] or filter_rules['negativity'] or | ||
410 | + filter_rules['aspect'] or filter_rules['predicativity'] or | ||
411 | + filter_rules['schema_type'] or filter_rules['schema_opinion'] or | ||
412 | + (filter_rules['argument'] and filter_rules['argument'] != '.*') or | ||
413 | + (filter_rules['position'] and filter_rules['position'] != '.*')): | ||
414 | + if filter_rules['schema_opinion']: | ||
415 | + lemmas = lemmas.filter(frame_opinions__frame__in=schemata.all(), | ||
416 | + frame_opinions__value=filter_rules['schema_opinion']) | ||
417 | + else: | ||
418 | + lemmas = lemmas.filter(frames__in=schemata.all()) | ||
419 | + lemmas = lemmas.distinct() | ||
420 | + return lemmas | ||
421 | + | ||
422 | +def pos_regex_frames(frames, string): | ||
423 | + try: | ||
424 | + alternative_queries = [] | ||
425 | + for alternative in string.split('|'): | ||
426 | + possible_frames = frames | ||
427 | + for conj in alternative.split('&'): | ||
428 | + model_results = [] | ||
429 | + negation = False | ||
430 | + conj = conj.strip() | ||
431 | + if conj.startswith('!'): | ||
432 | + conj = conj.lstrip('!') | ||
433 | + negation = True | ||
434 | + regex = ur'^%s$' % escape_regex(conj) | ||
435 | + model_results = Position.objects.filter(frames__lemmas__old=False, | ||
436 | + text_rep__regex=regex).distinct() | ||
437 | + if model_results.exists(): | ||
438 | + if negation: | ||
439 | + possible_frames = possible_frames.exclude(positions__in=model_results) | ||
440 | + else: | ||
441 | + possible_frames = possible_frames.filter(positions__in=model_results) | ||
442 | + elif not model_results.exists() and not negation: | ||
443 | + possible_frames = Frame.objects.none() | ||
444 | + alternative_queries.append(Q(id__in=possible_frames)) | ||
445 | + frames = frames.filter(reduce(operator.or_, alternative_queries)).distinct() | ||
446 | + except: | ||
447 | + frames = Frame.objects.none() | ||
448 | + return frames | ||
449 | + | ||
450 | +def arg_regex_frames(frames, string): | ||
451 | + try: | ||
452 | + alternative_queries = [] | ||
453 | + for alternative in string.split('|'): | ||
454 | + possible_frames = frames | ||
455 | + for conj in alternative.split('&'): | ||
456 | + model_results = [] | ||
457 | + negation = False | ||
458 | + conj = conj.strip() | ||
459 | + if conj.startswith('!'): | ||
460 | + conj = conj.lstrip('!') | ||
461 | + negation = True | ||
462 | + regex = ur'^%s$' % escape_regex(conj) | ||
463 | + model_results = Argument.objects.filter(positions__frames__lemmas__old=False, | ||
464 | + text_rep__regex=regex).distinct() | ||
465 | + if model_results.exists(): | ||
466 | + if negation: | ||
467 | + possible_frames = possible_frames.exclude(positions__arguments__in=model_results) | ||
468 | + else: | ||
469 | + possible_frames = possible_frames.filter(positions__arguments__in=model_results) | ||
470 | + elif not model_results.exists() and not negation: | ||
471 | + possible_frames = Frame.objects.none() | ||
472 | + alternative_queries.append(Q(id__in=possible_frames)) | ||
473 | + frames = frames.filter(reduce(operator.or_, alternative_queries)).distinct() | ||
474 | + except: | ||
475 | + frames = Frame.objects.none() | ||
476 | + return frames | ||
477 | + | ||
478 | +def filter_by_frames(lemmas, filter_rules): | ||
479 | + frames = SemanticFrame.objects.filter(next__isnull=True, removed=False) | ||
480 | + if filter_rules['frame_opinion']: | ||
481 | + frames = frames.filter(opinion=filter_rules['frame_opinion']) | ||
482 | + if filter_rules['sem_arguments']: | ||
483 | + frames = get_frames_by_args_rule(frames, filter_rules['sem_arguments']) | ||
484 | + if filter_rules['frame_opinion'] or filter_rules['sem_arguments']: | ||
485 | + lemmas = lemmas.filter(entry_obj__meanings__frames__in=frames).distinct() | ||
486 | + return lemmas | ||
487 | + | ||
488 | +def get_frames_by_args_rule(frames, args_filter_rule): | ||
489 | + matching_frames = [] | ||
490 | + for alternative in args_filter_rule: | ||
491 | + alt_matching_frames = get_matching_frames(frames, alternative) | ||
492 | + matching_frames.extend(alt_matching_frames.values_list('id', flat=True)) | ||
493 | + return frames.filter(id__in=list(set(matching_frames))) | ||
494 | + | ||
495 | +def get_matching_frames(frames, arguments_rules): | ||
496 | + for rules in arguments_rules: | ||
497 | + if not rules['negation']: | ||
498 | + frames = frames.filter(complements__in=matching_complements(rules)) | ||
499 | + else: | ||
500 | + frames = frames.exclude(complements__in=matching_complements(rules)) | ||
501 | + return frames | ||
502 | + | ||
503 | +def matching_complements(filter_rules): | ||
504 | + complements = Complement.objects | ||
505 | + if filter_rules['role']: | ||
506 | + complements = complements.filter(roles=filter_rules['role']) | ||
507 | + if filter_rules['attribute']: | ||
508 | + complements = complements.filter(roles=filter_rules['attribute']) | ||
509 | + if filter_rules['general_prefs'] or filter_rules['synset_prefs'] or filter_rules['relational_prefs']: | ||
510 | + complements = complements.filter(selective_preference__isnull=False) | ||
511 | + if filter_rules['general_prefs']: | ||
512 | + complements = filter_by_general_prefs(complements, filter_rules['general_prefs']) | ||
513 | + if filter_rules['synset_prefs']: | ||
514 | + complements = filter_by_synset_prefs(complements, filter_rules['synset_prefs']) | ||
515 | + if filter_rules['relational_prefs']: | ||
516 | + complements = filter_by_relational_prefs(complements, filter_rules['relational_prefs']) | ||
517 | + return complements.all() | ||
518 | + | ||
519 | +def filter_by_general_prefs(complements, prefs): | ||
520 | + complements = complements.exclude(selective_preference__generals=None) | ||
521 | + for pref in list(set(prefs)): | ||
522 | + if pref: | ||
523 | + complements = complements.filter(selective_preference__generals=pref) | ||
524 | + return complements | ||
525 | + | ||
526 | +def filter_by_synset_prefs(complements, prefs): | ||
527 | + complements = complements.exclude(selective_preference__synsets=None) | ||
528 | + for pref in list(set(prefs)): | ||
529 | + if pref: | ||
530 | + try: | ||
531 | + pref_parts = pref.split('-') | ||
532 | + base = pref_parts[0] | ||
533 | + sense = pref_parts[1] | ||
534 | + synset = LexicalUnit.objects.get(base=base, sense=sense).synset | ||
535 | + complements = complements.filter(selective_preference__synsets=synset) | ||
536 | + except: | ||
537 | + complements = Complement.objects.none() | ||
538 | + return complements | ||
539 | + | ||
540 | +def filter_by_relational_prefs(complements, prefs): | ||
541 | + complements = complements.exclude(selective_preference__relations=None) | ||
542 | + for pref in prefs: | ||
543 | + if pref['relation'] or pref['role'] or pref['attribute']: | ||
544 | + relational_prefs = RelationalSelectivePreference.objects | ||
545 | + if pref['relation']: | ||
546 | + relational_prefs = relational_prefs.filter(relation=pref['relation']) | ||
547 | + if pref['role'] or pref['attribute']: | ||
548 | + to_complements = Complement.objects | ||
549 | + if pref['role']: | ||
550 | + to_complements = to_complements.filter(roles=pref['role']) | ||
551 | + if pref['attribute']: | ||
552 | + to_complements = to_complements.filter(roles=pref['attribute']) | ||
553 | + relational_prefs = relational_prefs.filter(to__in=to_complements.all()).distinct() | ||
554 | + complements = complements.filter(selective_preference__relations__in=relational_prefs).distinct() | ||
555 | + return complements | ||
556 | + | ||
0 | \ No newline at end of file | 557 | \ No newline at end of file |
dictionary/forms.py
1 | #-*- coding:utf-8 -*- | 1 | #-*- coding:utf-8 -*- |
2 | 2 | ||
3 | -#Copyright (c) 2012, Bartłomiej Nitoń | ||
4 | -#All rights reserved. | ||
5 | - | ||
6 | -#Redistribution and use in source and binary forms, with or without modification, are permitted provided | ||
7 | -#that the following conditions are met: | ||
8 | - | ||
9 | -# Redistributions of source code must retain the above copyright notice, this list of conditions and | ||
10 | -# the following disclaimer. | ||
11 | -# Redistributions in binary form must reproduce the above copyright notice, this list of conditions | ||
12 | -# and the following disclaimer in the documentation and/or other materials provided with the distribution. | ||
13 | - | ||
14 | -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED | ||
15 | -# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | ||
16 | -# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||
17 | -# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | ||
18 | -# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
19 | -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
20 | -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
21 | -# POSSIBILITY OF SUCH DAMAGE. | ||
22 | - | ||
23 | import datetime | 3 | import datetime |
24 | 4 | ||
25 | from django.contrib.auth.forms import UserCreationForm | 5 | from django.contrib.auth.forms import UserCreationForm |
@@ -28,6 +8,7 @@ from django.db.models import Q | @@ -28,6 +8,7 @@ from django.db.models import Q | ||
28 | from django.forms import * | 8 | from django.forms import * |
29 | 9 | ||
30 | from dictionary.models import * | 10 | from dictionary.models import * |
11 | +from semantics.models import FrameOpinion | ||
31 | #Frame, Argument_Model, AttrValueSelectionMode, \ | 12 | #Frame, Argument_Model, AttrValueSelectionMode, \ |
32 | # AttrValuesSeparator, Atribute_Value, PositionCategory, \ | 13 | # AttrValuesSeparator, Atribute_Value, PositionCategory, \ |
33 | # Argument, Atribute_Model, ArgRealOpinion, Frame_Characteristic, \ | 14 | # Argument, Atribute_Model, ArgRealOpinion, Frame_Characteristic, \ |
@@ -529,9 +510,14 @@ class MessageForm(ModelForm): | @@ -529,9 +510,14 @@ class MessageForm(ModelForm): | ||
529 | exclude = ('sender', 'lemma', 'new', 'recipient') | 510 | exclude = ('sender', 'lemma', 'new', 'recipient') |
530 | 511 | ||
531 | 512 | ||
532 | -############################ sorting, filtering | 513 | +############################ sorting, filtering |
514 | + | ||
533 | class FilterForm(Form): | 515 | class FilterForm(Form): |
516 | + # Lemma filters | ||
517 | + lemma = forms.CharField(label=u'Lemat', required=False) | ||
534 | pos = ModelChoiceField(label=u'Część mowy', queryset=POS.objects.none(), required=False) | 518 | pos = ModelChoiceField(label=u'Część mowy', queryset=POS.objects.none(), required=False) |
519 | + contains_phraseology = ChoiceField(choices=[('', '---------'), ('yes', 'zawiera'), ('no', 'nie zawiera')], | ||
520 | + label=u'Frazeologia', required=False) | ||
535 | owner = ModelChoiceField(label=u'Właściciel', queryset=User.objects.none(), required=False) | 521 | owner = ModelChoiceField(label=u'Właściciel', queryset=User.objects.none(), required=False) |
536 | phraseologist = ModelChoiceField(label=u'Frazeolog', queryset=User.objects.none(), required=False) | 522 | phraseologist = ModelChoiceField(label=u'Frazeolog', queryset=User.objects.none(), required=False) |
537 | semanticist = ModelChoiceField(label=u'Semantyk', queryset=User.objects.none(), required=False) | 523 | semanticist = ModelChoiceField(label=u'Semantyk', queryset=User.objects.none(), required=False) |
@@ -544,7 +530,10 @@ class FilterForm(Form): | @@ -544,7 +530,10 @@ class FilterForm(Form): | ||
544 | approver = ModelChoiceField(label=u'Zatwierdzający przykład', queryset=User.objects.filter(Q(groups__permissions__codename='confirm_example') | | 530 | approver = ModelChoiceField(label=u'Zatwierdzający przykład', queryset=User.objects.filter(Q(groups__permissions__codename='confirm_example') | |
545 | Q(is_superuser=True)).distinct().order_by('username'), | 531 | Q(is_superuser=True)).distinct().order_by('username'), |
546 | required=False) | 532 | required=False) |
547 | - reflex = ModelChoiceField(label=u'Zwrotność', | 533 | + # Schema filters |
534 | + schema_type = ChoiceField(choices=[('', '---------'), ('normal', 'normalny'), ('phraseologic', 'frazeologiczny')], | ||
535 | + label=u'Typ schematu', required=False) | ||
536 | + reflex = ModelChoiceField(label=u'Zwrotność', | ||
548 | queryset=Frame_Characteristic.objects.filter(type=u'ZWROTNOŚĆ').order_by('value__priority'), | 537 | queryset=Frame_Characteristic.objects.filter(type=u'ZWROTNOŚĆ').order_by('value__priority'), |
549 | required=False) | 538 | required=False) |
550 | negativity = ModelChoiceField(label=u'Negatywność', | 539 | negativity = ModelChoiceField(label=u'Negatywność', |
@@ -558,28 +547,34 @@ class FilterForm(Form): | @@ -558,28 +547,34 @@ class FilterForm(Form): | ||
558 | required=False) | 547 | required=False) |
559 | has_argument = forms.CharField(label=u'Zawiera typ frazy', required=False) | 548 | has_argument = forms.CharField(label=u'Zawiera typ frazy', required=False) |
560 | has_position = forms.CharField(label=u'Zawiera pozycję', required=False) | 549 | has_position = forms.CharField(label=u'Zawiera pozycję', required=False) |
561 | - frame_opinion = ModelChoiceField(label=u'Opinia o schemacie', queryset=Frame_Opinion_Value.objects.all(), | ||
562 | - required=False) | ||
563 | - frame_phraseologic = forms.BooleanField(label=u'Schemat frazeologiczny', initial=False, | ||
564 | - required=False) | 550 | + schema_opinion = ModelChoiceField(label=u'Opinia o schemacie', queryset=Frame_Opinion_Value.objects.all(), |
551 | + required=False) | ||
565 | filter_frames = forms.BooleanField(label=u'Odfiltruj niepasujące schematy', initial=False, | 552 | filter_frames = forms.BooleanField(label=u'Odfiltruj niepasujące schematy', initial=False, |
566 | required=False) | 553 | required=False) |
554 | + # Frame filters | ||
555 | + frame_opinion = ModelChoiceField(label=u'Opinia o ramie', queryset=FrameOpinion.objects.order_by('priority'), | ||
556 | + required=False) | ||
567 | 557 | ||
568 | def __init__(self, users, phraseologists, semanticists, vocabularies, statuses, senders, | 558 | def __init__(self, users, phraseologists, semanticists, vocabularies, statuses, senders, |
569 | - sel_pos=None, sel_user=None, sel_phraseologist=None, sel_semanticist=None, | ||
570 | - sel_vocabulary=None, sel_status=None, frame_phraseologic=False,#sel_old_property=None, | 559 | + lemma='.*', sel_pos=None, contains_phraseology=None, |
560 | + sel_user=None, sel_phraseologist=None, sel_semanticist=None, | ||
561 | + sel_vocabulary=None, sel_status=None, sel_schema_type=None, | ||
571 | sel_reflex=None, sel_negativity=None, sel_predicativity=None, | 562 | sel_reflex=None, sel_negativity=None, sel_predicativity=None, |
572 | - sel_aspect=None, sel_has_argument='.*', sel_has_position='.*', #sel_has_frame='.*', | ||
573 | - sel_frame_opinion=None, can_confirm_example=False, sel_example_source=None, | ||
574 | - sel_approver=None, sel_sender=None, *args, **kwargs): | 563 | + sel_aspect=None, sel_has_argument='.*', sel_has_position='.*', |
564 | + sel_schema_opinion=None, can_confirm_example=False, sel_example_source=None, | ||
565 | + sel_approver=None, sel_sender=None, | ||
566 | + sel_frame_opinion=None, *args, **kwargs): | ||
575 | super(FilterForm, self).__init__(*args, **kwargs) | 567 | super(FilterForm, self).__init__(*args, **kwargs) |
568 | + | ||
576 | self.fields['pos'].queryset = POS.objects.exclude(tag='unk') | 569 | self.fields['pos'].queryset = POS.objects.exclude(tag='unk') |
577 | self.fields['owner'].queryset = users | 570 | self.fields['owner'].queryset = users |
578 | self.fields['phraseologist'].queryset = phraseologists | 571 | self.fields['phraseologist'].queryset = phraseologists |
579 | self.fields['semanticist'].queryset = semanticists | 572 | self.fields['semanticist'].queryset = semanticists |
580 | self.fields['vocabulary'].queryset = vocabularies | 573 | self.fields['vocabulary'].queryset = vocabularies |
581 | self.fields['status'].queryset = statuses | 574 | self.fields['status'].queryset = statuses |
575 | + self.fields['lemma'].initial = lemma | ||
582 | self.fields['pos'].initial = sel_pos | 576 | self.fields['pos'].initial = sel_pos |
577 | + self.fields['contains_phraseology'].initial = contains_phraseology | ||
583 | self.fields['owner'].initial = sel_user | 578 | self.fields['owner'].initial = sel_user |
584 | self.fields['phraseologist'].initial = sel_phraseologist | 579 | self.fields['phraseologist'].initial = sel_phraseologist |
585 | self.fields['semanticist'].initial = sel_semanticist | 580 | self.fields['semanticist'].initial = sel_semanticist |
@@ -593,23 +588,20 @@ class FilterForm(Form): | @@ -593,23 +588,20 @@ class FilterForm(Form): | ||
593 | self.fields['example_source'].initial = None | 588 | self.fields['example_source'].initial = None |
594 | self.fields['approver'].widget = self.fields['approver'].hidden_widget() | 589 | self.fields['approver'].widget = self.fields['approver'].hidden_widget() |
595 | self.fields['approver'].initial = None | 590 | self.fields['approver'].initial = None |
596 | -# self.fields['has_old_frames_property'].initial = sel_old_property | ||
597 | self.fields['reflex'].initial = sel_reflex | 591 | self.fields['reflex'].initial = sel_reflex |
598 | self.fields['negativity'].initial = sel_negativity | 592 | self.fields['negativity'].initial = sel_negativity |
599 | self.fields['predicativity'].initial = sel_predicativity | 593 | self.fields['predicativity'].initial = sel_predicativity |
600 | self.fields['aspect'].initial = sel_aspect | 594 | self.fields['aspect'].initial = sel_aspect |
601 | self.fields['has_argument'].initial = sel_has_argument | 595 | self.fields['has_argument'].initial = sel_has_argument |
602 | self.fields['has_position'].initial = sel_has_position | 596 | self.fields['has_position'].initial = sel_has_position |
603 | - #self.fields['has_frame'].initial = sel_has_frame | ||
604 | - self.fields['frame_opinion'].initial = sel_frame_opinion | 597 | + self.fields['schema_opinion'].initial = sel_schema_opinion |
605 | self.fields['has_message_from'].initial = sel_sender | 598 | self.fields['has_message_from'].initial = sel_sender |
606 | self.fields['has_message_from'].queryset = senders | 599 | self.fields['has_message_from'].queryset = senders |
607 | 600 | ||
608 | - self.fields['frame_phraseologic'].initial = frame_phraseologic | 601 | + self.fields['schema_type'].initial = sel_schema_type |
602 | + self.fields['frame_opinion'].initial = sel_frame_opinion | ||
609 | 603 | ||
610 | self.hide_unused_fields() | 604 | self.hide_unused_fields() |
611 | - | ||
612 | - #self.fields['has_frame'].widget = self.fields['has_frame'].hidden_widget() | ||
613 | 605 | ||
614 | def hide_unused_fields(self): | 606 | def hide_unused_fields(self): |
615 | for field_name in self.fields: | 607 | for field_name in self.fields: |
dictionary/management/commands/approve_examples.py
0 → 100644
1 | +#-*- coding:utf-8 -*- | ||
2 | + | ||
3 | +from django.core.management.base import BaseCommand | ||
4 | + | ||
5 | +from dictionary.models import NKJP_Example | ||
6 | + | ||
7 | +class Command(BaseCommand): | ||
8 | + args = 'none' | ||
9 | + help = "" | ||
10 | + | ||
11 | + def handle(self, **options): | ||
12 | + approve_examples() | ||
13 | + | ||
14 | +def approve_examples(): | ||
15 | + for example in NKJP_Example.objects.filter(approved=False): | ||
16 | + if example.approvers.count() > 0: | ||
17 | + example.approved = True | ||
18 | + example.save() | ||
19 | + print example | ||
20 | + | ||
0 | \ No newline at end of file | 21 | \ No newline at end of file |
dictionary/management/commands/create_TEI_walenty.py
1 | #-*- coding:utf-8 -*- | 1 | #-*- coding:utf-8 -*- |
2 | 2 | ||
3 | -#Copyright (c) 2015, Bartłomiej Nitoń | ||
4 | -#All rights reserved. | ||
5 | - | ||
6 | -#Redistribution and use in source and binary forms, with or without modification, are permitted provided | ||
7 | -#that the following conditions are met: | ||
8 | - | ||
9 | -# Redistributions of source code must retain the above copyright notice, this list of conditions and | ||
10 | -# the following disclaimer. | ||
11 | -# Redistributions in binary form must reproduce the above copyright notice, this list of conditions | ||
12 | -# and the following disclaimer in the documentation and/or other materials provided with the distribution. | ||
13 | - | ||
14 | -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED | ||
15 | -# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | ||
16 | -# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||
17 | -# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | ||
18 | -# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
19 | -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
20 | -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
21 | -# POSSIBILITY OF SUCH DAMAGE. | ||
22 | - | ||
23 | import datetime | 3 | import datetime |
24 | import os | 4 | import os |
25 | 5 |
dictionary/management/commands/get_examples.py
1 | #-*- coding:utf-8 -*- | 1 | #-*- coding:utf-8 -*- |
2 | 2 | ||
3 | import codecs | 3 | import codecs |
4 | -import operator | 4 | +import datetime |
5 | import os | 5 | import os |
6 | -import re | ||
7 | -from subprocess import call | ||
8 | -from tempfile import mkdtemp, mkstemp | ||
9 | 6 | ||
10 | from django.core.management.base import BaseCommand | 7 | from django.core.management.base import BaseCommand |
11 | -from django.utils.encoding import smart_str | ||
12 | -from django.db.models import Q | ||
13 | 8 | ||
14 | -#import corpus2 | ||
15 | -from common.morfeusz import analyse | ||
16 | - | ||
17 | -from dictionary.models import Argument, Lemma | 9 | +from dictionary.models import Lemma, get_ready_statuses |
18 | from settings import PROJECT_PATH | 10 | from settings import PROJECT_PATH |
19 | 11 | ||
20 | BASE_PATH = os.path.join(PROJECT_PATH, 'data') | 12 | BASE_PATH = os.path.join(PROJECT_PATH, 'data') |
21 | -#['gotowe', 'sprawdzone', 'tymczasowy'] | ||
22 | -STATUSES_LS = [u'zalążkowe', u'gotowe', u'sprawdzone', | ||
23 | - u'(F) w obróbce', u'(F) gotowe', u'(F) sprawdzone', | ||
24 | - u'(S) w obróbce', u'(S) gotowe', u'(S) sprawdzone'] | ||
25 | - | ||
26 | -NOUN_TAGS = ['subst', 'ger'] | ||
27 | - | ||
28 | -#VERBTAGLIST = ['fin', 'praet', 'bedzie', 'inf', 'imps', 'impt', | ||
29 | -# 'winien', 'pred'] | ||
30 | -#ADJTAGLIST = ['adj', 'pact', 'ppas'] | ||
31 | -#INTERPTAGLIST = ['interp'] | ||
32 | -#NUMERALTAGLIST = ['num', 'numcol'] | ||
33 | - | ||
34 | -XCES_HEADER = """<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE cesAna SYSTEM 'xcesAnaIPI.dtd'><cesAna type="pre_morph" version="WROC-1.0" xmlns:xlink="http://www.w3.org/1999/xlink"> | ||
35 | -<chunkList xml:base="text.xml"> | ||
36 | -""" | ||
37 | -XCES_FOOTER = """</chunkList> | ||
38 | -</cesAna> | ||
39 | -""" | ||
40 | - | ||
41 | -WCRFT_CONFIG = 'nkjp_s2.ini' | ||
42 | - | ||
43 | -LABELS = ('haslo', | ||
44 | - 'status hasla', | ||
45 | - 'identyfikator schematu', | ||
46 | - 'schemat', | ||
47 | - 'opinia o schemacie', | ||
48 | - 'przyklad', | ||
49 | - 'otagowany przyklad', | ||
50 | - 'fragmenty przykladu', | ||
51 | - 'opinia o przykladzie', | ||
52 | - 'zrodlo przykladu', | ||
53 | - 'wybor argumentow') | ||
54 | 13 | ||
55 | - | ||
56 | -ARG_TYPES_BY_PRIORITY = ['fixed', | ||
57 | - # frazy przyimkowe | ||
58 | - 'preplexnp', 'comprepnp', 'prepnp', 'prepncp', 'prepadjp', | ||
59 | - # frazy rzeczownikowe | ||
60 | - 'lexnp', 'np', | ||
61 | - # frazy rzeczownikowo-zdaniowe | ||
62 | - 'ncp', 'cp', | ||
63 | - # adjp | ||
64 | - 'adjp', | ||
65 | - # bezokoliczniki | ||
66 | - 'infp', | ||
67 | - # refl | ||
68 | - 'refl', | ||
69 | - # xp | ||
70 | - 'xp', | ||
71 | - # advp | ||
72 | - 'advp', | ||
73 | - # nonch | ||
74 | - 'nonch', | ||
75 | - # lemma - nie jest sortowane chyba, bo dodawane na innym etapie niz reszta argumentow | ||
76 | - 'lemma', | ||
77 | - # xp | ||
78 | - 'xp' | ||
79 | - ] | 14 | +LABELS = (u'hasło', |
15 | + u'status hasła', | ||
16 | + u'identyfikator schematu', | ||
17 | + u'schemat', | ||
18 | + u'opinia o schemacie', | ||
19 | + u'przykład', | ||
20 | + u'opinia o przykładzie', | ||
21 | + u'zródło przykładu', | ||
22 | + u'wybór typów fraz') | ||
80 | 23 | ||
81 | class Command(BaseCommand): | 24 | class Command(BaseCommand): |
82 | help = 'Get pinned examples from Slowal.' | 25 | help = 'Get pinned examples from Slowal.' |
83 | 26 | ||
84 | def handle(self, **options): | 27 | def handle(self, **options): |
85 | - get_examples() | ||
86 | - | ||
87 | -def write_examples(q_statuses): | ||
88 | - try: | ||
89 | - examples_file = codecs.open(os.path.join(BASE_PATH, | ||
90 | - 'examples_gotowe_plus.txt'), 'wt', 'utf-8') | ||
91 | - for lemma in Lemma.objects.filter(old=False).filter(reduce(operator.or_, q_statuses)).order_by('entry').all(): | ||
92 | - print lemma | ||
93 | - examples_file.write(lemma.entry+'\n') | ||
94 | - for frame in lemma.frames.order_by('text_rep').all(): | ||
95 | - if lemma.frame_opinions.get(frame=frame).value.value != u'zła': | ||
96 | - examples_file.write('\t%s\n' % frame.text_rep) | ||
97 | - for example in lemma.nkjp_examples.filter(frame=frame): | ||
98 | - examples_file.write('\t\t--> %s\n' % example.sentence) | ||
99 | - examples_file.write('\n\n') | ||
100 | - finally: | ||
101 | - examples_file.close() | ||
102 | - | ||
103 | -def write_xces_opening(outfile): | ||
104 | - outfile.write(XCES_HEADER) | ||
105 | - | ||
106 | -def write_xces_closing(outfile): | ||
107 | - outfile.write(XCES_FOOTER) | 28 | + get_examples() |
29 | + | ||
30 | +def get_examples(): | ||
31 | + ready_statuses = get_ready_statuses() | ||
32 | + write_detailed_examples(ready_statuses) | ||
33 | + # write_examples(ready_statuses) | ||
108 | 34 | ||
109 | -def write_paragraph(what, outfile): | ||
110 | - if len(what) > 0 and not what.isspace(): | ||
111 | - outfile.write(u'<chunk type="p" id="p1">') | ||
112 | - outfile.write(what) | ||
113 | - outfile.write(u'</chunk>\n') | ||
114 | - | ||
115 | -def sentence_to_xces(sentence): | 35 | +def write_detailed_examples(statuses): |
116 | try: | 36 | try: |
117 | - tmp_folder = mkdtemp() | ||
118 | - os.chdir(tmp_folder) | ||
119 | - tmp_file, tmpfilename = mkstemp(dir=tmp_folder) | ||
120 | - os.close(tmp_file) | ||
121 | - outfile = codecs.open(tmpfilename, 'wt', 'utf-8') | ||
122 | - write_xces_opening(outfile) | ||
123 | - write_paragraph(sentence, outfile) | ||
124 | - write_xces_closing(outfile) | ||
125 | - finally: | ||
126 | - outfile.close() | ||
127 | - return tmpfilename | ||
128 | - | ||
129 | -def chunks(rdr): | ||
130 | - """Yields subsequent paragraphs from a reader.""" | ||
131 | - while True: | ||
132 | - chunk = rdr.get_next_chunk() | ||
133 | - if not chunk: | ||
134 | - break | ||
135 | - yield chunk | ||
136 | - | ||
137 | -#def tag_sentence(tagged_sentence_path): | ||
138 | -# sentences_count = 0 | ||
139 | -# tagged_sentence_chunks = [] | ||
140 | -# tagset = corpus2.get_named_tagset('nkjp') | ||
141 | -# rdr = corpus2.TokenReader.create_path_reader('xces', tagset, tagged_sentence_path) | ||
142 | -# for chunk in chunks(rdr): | ||
143 | -# for sent in chunk.sentences(): | ||
144 | -# sentences_count += 1 | ||
145 | -# for tok in sent.tokens(): | ||
146 | -# prefered_lexeme = tok.get_preferred_lexeme(tagset) | ||
147 | -# base_form = prefered_lexeme.lemma_utf8().decode('utf-8') | ||
148 | -# orth_form = tok.orth_utf8().decode('utf-8') | ||
149 | -# tags = tagset.tag_to_string(prefered_lexeme.tag()) | ||
150 | -# sentence_chunk = u'%s[%s>%s]' % (orth_form, base_form, tags) | ||
151 | -# tagged_sentence_chunks.append(sentence_chunk) | ||
152 | -# tagged_sentence = ' '.join(tagged_sentence_chunks) | ||
153 | -# if sentences_count > 1: | ||
154 | -# pass | ||
155 | -# return tagged_sentence | ||
156 | - | ||
157 | -#def get_tagged_sentence(sentence): | ||
158 | -# tagged_sentence = 'Error!' | ||
159 | -# try: | ||
160 | -# tmp_folder = mkdtemp() | ||
161 | -# os.chdir(tmp_folder) | ||
162 | -# xces_file, xces_path = mkstemp(dir=tmp_folder) | ||
163 | -# os.close(xces_file) | ||
164 | -# tagged_sentence_file, tagged_sentence_path = mkstemp(dir=tmp_folder) | ||
165 | -# os.close(tagged_sentence_file) | ||
166 | -# xces_file = codecs.open(xces_path, 'wt', 'utf-8') | ||
167 | -# write_xces_opening(xces_file) | ||
168 | -# write_paragraph(sentence, xces_file) | ||
169 | -# write_xces_closing(xces_file) | ||
170 | -# xces_file.close() | ||
171 | -# try: | ||
172 | -# call(['wcrft', WCRFT_CONFIG, xces_path, '-O', tagged_sentence_path, '-C', '-i', 'premorph']) | ||
173 | -# tagged_sentence = tag_sentence(tagged_sentence_path) | ||
174 | -# except: | ||
175 | -# print 'Tagging failed.' | ||
176 | -# finally: | ||
177 | -# xces_file.close() | ||
178 | -# os.remove(xces_path) | ||
179 | -# os.remove(tagged_sentence_path) | ||
180 | -# return tagged_sentence | ||
181 | - | ||
182 | -def write_detailed_examples(q_statuses): | ||
183 | - try: | ||
184 | - examples_file = codecs.open(os.path.join(BASE_PATH, | ||
185 | - 'detailed_examples_20150616.csv'), 'wt', 'utf-8') | ||
186 | - examples_file.write(u'%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' % LABELS) | ||
187 | - for lemma in Lemma.objects.filter(old=False).filter(reduce(operator.or_, q_statuses)).order_by('entry').all(): | 37 | + lemmas = Lemma.objects.filter(old=False) |
38 | + lemmas = lemmas.filter(status__in=statuses) | ||
39 | + now = datetime.datetime.now().strftime('%Y%m%d') | ||
40 | + examples_file = codecs.open(os.path.join(BASE_PATH, 'detailed_examples_%s.csv' % now), 'wt', 'utf-8') | ||
41 | + examples_file.write(u'%s\n' % u'\t'.join(LABELS)) | ||
42 | + for lemma in lemmas.order_by('entry_obj__name'): | ||
188 | print lemma | 43 | print lemma |
189 | - lemma_entry = lemma.entry | 44 | + lemma_entry = lemma.entry_obj.name |
190 | lemma_status = lemma.status.status | 45 | lemma_status = lemma.status.status |
191 | for frame in lemma.frames.order_by('text_rep').all(): | 46 | for frame in lemma.frames.order_by('text_rep').all(): |
192 | - frame_text_rep = frame.text_rep | 47 | + if not lemma.phraseology_ready() and frame.phraseologic: |
48 | + continue | ||
193 | frame_opinion = lemma.frame_opinions.filter(frame=frame).all()[0].value | 49 | frame_opinion = lemma.frame_opinions.filter(frame=frame).all()[0].value |
194 | for example in lemma.nkjp_examples.filter(frame=frame): | 50 | for example in lemma.nkjp_examples.filter(frame=frame): |
195 | - sentence = example.sentence.replace('\n', ' ').replace('\r', '').replace('\t', ' ') | ||
196 | - #tagged_sentence = get_tagged_sentence(sentence) mozna wlaczyc w razie czego | ||
197 | - tagged_sentence = '' | ||
198 | - example_opinion = example.opinion.opinion | ||
199 | - example_source = example.source.source | 51 | + sentence = example.sentence.replace('\n', ' ').replace('\r', '').replace('\t', ' ') |
200 | arguments_selection = u'%s' % u' + '.join([u'%s' % selection.__unicode__() for selection in example.arguments.all()]) | 52 | arguments_selection = u'%s' % u' + '.join([u'%s' % selection.__unicode__() for selection in example.arguments.all()]) |
201 | - examples_file.write(u'%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t%s\t%s\t%s\n' % (lemma_entry, | ||
202 | - lemma_status, | ||
203 | - frame.id, | ||
204 | - frame_text_rep, | ||
205 | - frame_opinion, | ||
206 | - sentence, | ||
207 | - tagged_sentence, | ||
208 | - example_opinion, | ||
209 | - example_source, | ||
210 | - arguments_selection)) | 53 | + examples_file.write(u'%s\t%s\t%d\t%s\t%s\t%s\t%s\t%s\t%s\n' % (lemma_entry, |
54 | + lemma_status, | ||
55 | + frame.id, | ||
56 | + frame.get_position_spaced_text_rep(), | ||
57 | + frame_opinion, | ||
58 | + sentence, | ||
59 | + example.opinion.opinion, | ||
60 | + example.source.source, | ||
61 | + arguments_selection)) | ||
211 | finally: | 62 | finally: |
212 | examples_file.close() | 63 | examples_file.close() |
213 | - | ||
214 | -def get_arguments(arguments_selection): | ||
215 | - arguments = [] | ||
216 | - positions = arguments_selection.split('+') | ||
217 | - for position in positions: | ||
218 | - category = '' | ||
219 | - position = position.strip().lstrip('[').rstrip(']') | ||
220 | - if position.startswith('subj'): | ||
221 | - category = 'subj' | ||
222 | - elif position.startswith('obj'): | ||
223 | - category = 'obj' | ||
224 | - selection = re.findall(ur'<.*?>', position)[0] | ||
225 | - for arg in selection.lstrip('<').rstrip('>').split(';'): | ||
226 | - if category: | ||
227 | - arguments.append(u'%s:%s' % (category, arg)) | ||
228 | - else: | ||
229 | - arguments.append(arg) | ||
230 | - arguments = sort_arguments(arguments) | ||
231 | - return arguments | ||
232 | - | ||
233 | -def sort_arguments(arguments): | ||
234 | - sorted_arguments = [] | ||
235 | - for type in ARG_TYPES_BY_PRIORITY: | ||
236 | - for arg in arguments: | ||
237 | - (arg_type, attributes, category) = arg_from_text_rep(arg) | ||
238 | - if arg_type == type: | ||
239 | - sorted_arguments.append(arg) | ||
240 | - return sorted_arguments | ||
241 | - | ||
242 | -def arg_from_text_rep(argument): | ||
243 | - attributes = [] | ||
244 | - category = '' | ||
245 | - if ':' in argument: | ||
246 | - arg_split = argument.split(':') | ||
247 | - category = arg_split[0] | ||
248 | - argument = arg_split[1] | ||
249 | - arg_parts = argument.split('(') | ||
250 | - arg_type = arg_parts[0] | ||
251 | - if len(arg_parts) > 1: | ||
252 | - attributes = arg_parts[1].rstrip(')').replace("'", "").split(',') | ||
253 | - return arg_type, attributes, category | ||
254 | - | ||
255 | -def tokenize_sentence(sentence): | ||
256 | - token_idx = 0 | ||
257 | - tokens = [] | ||
258 | - chunks = sentence.split('] ') | ||
259 | - for chunk in chunks: | ||
260 | - if chunk.startswith('[[['): | ||
261 | - token = {'idx': token_idx, | ||
262 | - 'orth': '[', | ||
263 | - 'base': '[', | ||
264 | - 'tags': ['interp'], | ||
265 | - 'argument': '', | ||
266 | - 'argument_start': -1, | ||
267 | - 'argument_end': -1, | ||
268 | - 'occupied': False} | ||
269 | - elif chunk.startswith('>'): | ||
270 | - token = {'idx': token_idx, | ||
271 | - 'orth': '>', | ||
272 | - 'base': '>', | ||
273 | - 'tags': ['interp'], | ||
274 | - 'argument': '', | ||
275 | - 'argument_start': -1, | ||
276 | - 'argument_end': -1, | ||
277 | - 'occupied': False} | ||
278 | - else: | ||
279 | - chunk_parts = chunk.split('[') | ||
280 | - (base, tags) = (chunk_parts[1].split('>'))#rstrip(']').) | ||
281 | - orth = chunk_parts[0].lower() | ||
282 | - token = {'idx': token_idx, | ||
283 | - 'orth': orth, | ||
284 | - 'base': base, | ||
285 | - 'tags': tags.split(':'), | ||
286 | - 'argument': '', | ||
287 | - 'argument_start': -1, | ||
288 | - 'argument_end': -1, | ||
289 | - 'occupied': False} | ||
290 | - tokens.append(token) | ||
291 | - token_idx += 1 | ||
292 | - return tokens | ||
293 | - | ||
294 | -def case_conversion(case, category): | ||
295 | - if case == 'instr': | ||
296 | - case = 'inst' | ||
297 | - elif case == 'part': | ||
298 | - case = u'gen|acc' | ||
299 | - elif case == 'str' and (category == 'subj' or not category): | ||
300 | - case = 'nom' | ||
301 | - elif case == 'str' and category == 'obj': | ||
302 | - case = 'acc' | ||
303 | - return case | ||
304 | - | ||
305 | -def number_conversion(number): | ||
306 | - if number == '_': | ||
307 | - number = '' | ||
308 | - return number | ||
309 | - | ||
310 | -def aspect_conversion(aspect): | ||
311 | - if aspect == '_': | ||
312 | - aspect = '' | ||
313 | - return aspect | ||
314 | - | ||
315 | -def phrase_type_conversion(phrase_type): | ||
316 | - if phrase_type == u'że': | ||
317 | - phrase_type = u'że|iż' | ||
318 | - elif phrase_type == u'żeby': | ||
319 | - phrase_type = u'żeby|aby|by|iżby|ażeby' | ||
320 | - elif phrase_type == u'żeby2': | ||
321 | - phrase_type = u'że|iż|żeby' # !!! nie wiem co ma być pod żeby2 | ||
322 | - elif phrase_type == u'int': | ||
323 | - phrase_type = u'kiedy|jak|czy' # !!! nie wiem co ma być pod int | ||
324 | - elif phrase_type == u'jakby': | ||
325 | - phrase_type = u'jakby|jak gdyby' | ||
326 | - return phrase_type | ||
327 | 64 | ||
328 | -def complex_prep_lemma_conversion(lemma): | ||
329 | - if lemma == u'powodu': | ||
330 | - lemma = u'powód' | ||
331 | - elif lemma == u'sprawie': | ||
332 | - lemma = u'sprawa' | ||
333 | - elif lemma == u'kwestii': | ||
334 | - lemma = u'kwestia' | ||
335 | - elif lemma == u'roli': | ||
336 | - lemma = u'rola' | ||
337 | - elif lemma == u'okolicach': | ||
338 | - lemma = u'okolica' | ||
339 | - elif lemma == u'czasie': | ||
340 | - lemma = u'czas' | ||
341 | - elif lemma == u'stronie': | ||
342 | - lemma = u'strona' | ||
343 | - elif lemma == u'początku': | ||
344 | - lemma = u'początek' | ||
345 | - return lemma | ||
346 | - | ||
347 | -def proper_case(token, case): | ||
348 | - possible_cases = [case] | ||
349 | - proper_case = False | ||
350 | - if '|' in case: | ||
351 | - possible_cases = case.split('|') | ||
352 | - if len(set(token['tags']) & set(possible_cases)) == 1: | ||
353 | - proper_case = True | ||
354 | - return proper_case | ||
355 | - | ||
356 | -def get_matching_token(tokens, orth='', base='', case='', | ||
357 | - number='', phrase_type='', aspect='', | ||
358 | - degree='', pos=''): | ||
359 | -# print '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' | ||
360 | -# print 'orth: %s, base: %s, case: %s, number: %s, pos: %s' % (orth, | ||
361 | -# base, | ||
362 | -# case, | ||
363 | -# number, | ||
364 | -# pos) | ||
365 | - matching_token = None | ||
366 | - for token in tokens: | ||
367 | - match = True | ||
368 | - if token['occupied']: | ||
369 | - continue | ||
370 | - if orth and not token['orth'] == orth: | ||
371 | - match = False | ||
372 | - if base and not token['base'] == base: | ||
373 | - match = False | ||
374 | - if case and not proper_case(token, case): | ||
375 | - match = False | ||
376 | - if number and not number in token['tags']: | ||
377 | - match = False | ||
378 | - if aspect and not aspect in token['tags']: | ||
379 | - match = False | ||
380 | - if degree and not degree in token['tags']: | ||
381 | - match = False | ||
382 | - if pos and not pos in token['tags']: | ||
383 | - match = False | ||
384 | - if match: | ||
385 | - matching_token = token | ||
386 | - break | ||
387 | - return matching_token | ||
388 | - | ||
389 | -def fill_token_data(token, argument, start_idx, end_idx): | ||
390 | - token['argument'] = argument | ||
391 | - token['argument_start'] = start_idx | ||
392 | - token['argument_end'] = end_idx | ||
393 | - | ||
394 | -def mark_fixed(tokens, argument, tresc): | ||
395 | - tresc_idx = 0 | ||
396 | - tresc_orths = tresc.split() | ||
397 | - tresc_start = -1 | ||
398 | - tresc_end = -1 | ||
399 | - for token in tokens: | ||
400 | - if token['occupied']: | ||
401 | - continue | ||
402 | - if token['orth'] == tresc_orths[tresc_idx]: | ||
403 | - tresc_idx += 1 | ||
404 | - if tresc_start == -1: | ||
405 | - tresc_start = tokens.index(token) | ||
406 | - else: | ||
407 | - tresc_idx = 0 | ||
408 | - tresc_start = -1 | ||
409 | - if tresc_idx == len(tresc_orths): | ||
410 | - tresc_end = tokens.index(token) | ||
411 | - break | ||
412 | - for token in tokens[tresc_start:tresc_end+1]: | ||
413 | - fill_token_data(token, argument, tresc_start, tresc_end) | ||
414 | - token['occupied'] = True | ||
415 | - | ||
416 | -def mark_preplexnp(tokens, argument, preposition, case, number, lemma): | ||
417 | - preposition_token = get_matching_token(tokens, orth='', base=preposition, | ||
418 | - case=case, number='', pos='prep') # !! case nie powinien być zgodny z lematem?? | ||
419 | - start_idx = tokens.index(preposition_token) | ||
420 | - lemma_token = get_matching_token(tokens[start_idx:], orth='', base=lemma, | ||
421 | - case=case, number=number, pos='subst') | ||
422 | - end_idx = tokens.index(lemma_token) | ||
423 | - fill_token_data(preposition_token, argument, start_idx, end_idx) | ||
424 | - fill_token_data(lemma_token, argument, start_idx, end_idx) | ||
425 | - for token in tokens[start_idx:end_idx+1]: | ||
426 | - token['occupied'] = True | ||
427 | - | ||
428 | -def mark_comprepnp(tokens, argument, preposition, lemma): | ||
429 | - if preposition == u'co' and lemma == u'do': | ||
430 | - preposition_token = get_matching_token(tokens, orth='co', base='', | ||
431 | - case='', number='', pos='subst') # !! czy pos nie powinien byc subst | ||
432 | - start_idx = tokens.index(preposition_token) | ||
433 | - lemma_token = get_matching_token(tokens[start_idx:], orth='do', base='', | ||
434 | - case='', number='', pos='prep') | ||
435 | - end_idx = tokens.index(lemma_token) | ||
436 | - else: | ||
437 | - preposition_token = get_matching_token(tokens, orth='', base=preposition, | ||
438 | - case='', number='', pos='prep') # !! case nie powinien być zgodny z lematem?? | ||
439 | - start_idx = tokens.index(preposition_token) | ||
440 | - lemma_base = complex_prep_lemma_conversion(lemma) | ||
441 | - lemma_token = get_matching_token(tokens[start_idx:], orth='', base=lemma_base, | ||
442 | - case='', number='', pos='subst') | ||
443 | - end_idx = tokens.index(lemma_token) | ||
444 | - noun_token = get_matching_token(tokens[end_idx+1:], orth='', base='', | ||
445 | - case='', number='', pos='subst') # za proste, glupoty wychodza | ||
446 | - end_idx = tokens.index(noun_token) | ||
447 | - fill_token_data(preposition_token, argument, start_idx, end_idx) | ||
448 | - fill_token_data(lemma_token, argument, start_idx, end_idx) | ||
449 | - fill_token_data(noun_token, argument, start_idx, end_idx) | ||
450 | - for token in tokens[start_idx:end_idx+1]: | ||
451 | - token['occupied'] = True | ||
452 | - | ||
453 | -def mark_prepnp(tokens, argument, preposition, case): | ||
454 | - preposition_token = get_matching_token(tokens, orth='', base=preposition, | ||
455 | - case=case, number='', pos='prep') # !! case nie powinien być zgodny z lematem?? | ||
456 | - start_idx = tokens.index(preposition_token) | ||
457 | - noun_token = get_matching_token(tokens[start_idx:], orth='', base='', | ||
458 | - case=case, number='', pos='subst') | ||
459 | - end_idx = tokens.index(noun_token) | ||
460 | - fill_token_data(preposition_token, argument, start_idx, end_idx) | ||
461 | - fill_token_data(noun_token, argument, start_idx, end_idx) | ||
462 | - for token in tokens[start_idx:end_idx+1]: | ||
463 | - token['occupied'] = True | ||
464 | - | ||
465 | -def mark_phrase(tokens, start_idx, argument, phrase_type): | ||
466 | - for phrase in phrase_type.split('|'): | ||
467 | - phrase_parts = phrase.split() | ||
468 | - if len(phrase_parts) > 1: | ||
469 | - phrase_token1 = get_matching_token(tokens[start_idx+1:], orth='', base=phrase_parts[0], | ||
470 | - case='', number='', pos='') | ||
471 | - if phrase_token1: | ||
472 | - phrase_start_idx = tokens.index(phrase_token1) | ||
473 | - phrase_token2 = get_matching_token(tokens[phrase_start_idx+1:], orth='', base=phrase_parts[1], | ||
474 | - case='', number='', pos='') | ||
475 | - if phrase_token1 and phrase_token2: | ||
476 | - phrase_end_idx = tokens.index(phrase_token2) | ||
477 | - fill_token_data(phrase_token1, argument, phrase_start_idx, phrase_end_idx) | ||
478 | - fill_token_data(phrase_token2, argument, phrase_start_idx, phrase_end_idx) | ||
479 | - break | ||
480 | - else: | ||
481 | - phrase_token = get_matching_token(tokens[start_idx+1:], base=phrase) | ||
482 | - if phrase_token: | ||
483 | - phrase_end_idx = tokens.index(phrase_token) | ||
484 | - phrase_start_idx = phrase_end_idx | ||
485 | - fill_token_data(phrase_token, argument, phrase_start_idx, phrase_end_idx) | ||
486 | - break | ||
487 | - return phrase_start_idx, phrase_end_idx | ||
488 | - | ||
489 | -def mark_prepncp(tokens, argument, preposition, case, phrase_type): | ||
490 | - preposition_token = get_matching_token(tokens, orth='', base=preposition, | ||
491 | - case=case, number='', pos='prep') # !! case nie powinien być zgodny z lematem?? | ||
492 | - start_idx = tokens.index(preposition_token) | ||
493 | - noun_token = get_matching_token(tokens[start_idx:], orth='', base='', | ||
494 | - case=case, number='', pos='subst') | ||
495 | - end_idx = tokens.index(noun_token) | ||
496 | - xx, end_idx = mark_phrase(tokens, end_idx, argument, phrase_type) | ||
497 | - fill_token_data(preposition_token, argument, start_idx, end_idx) | ||
498 | - fill_token_data(noun_token, argument, start_idx, end_idx) | ||
499 | - for token in tokens[start_idx:end_idx+1]: | ||
500 | - token['occupied'] = True | ||
501 | - | ||
502 | -def mark_prepadjp(tokens, argument, preposition, case): | ||
503 | - preposition_token = get_matching_token(tokens, orth='', base=preposition, | ||
504 | - case=case, number='', pos='prep') # !! case nie powinien być zgodny z lematem?? | ||
505 | - start_idx = tokens.index(preposition_token) | ||
506 | - adj_token = get_matching_token(tokens[start_idx:], orth='', base='', | ||
507 | - case=case, number='', pos='adj') | ||
508 | - end_idx = tokens.index(adj_token) | ||
509 | - fill_token_data(preposition_token, argument, start_idx, end_idx) | ||
510 | - fill_token_data(adj_token, argument, start_idx, end_idx) | ||
511 | - for token in tokens[start_idx:end_idx+1]: | ||
512 | - token['occupied'] = True | ||
513 | - | ||
514 | -def mark_lexnp(tokens, argument, case, number, lemma): | ||
515 | - lemma_token = get_matching_token(tokens, orth='', base=lemma, | ||
516 | - case=case, number=number, pos='subst') | ||
517 | - start_idx = tokens.index(lemma_token) | ||
518 | - end_idx = start_idx | ||
519 | - fill_token_data(lemma_token, argument, start_idx, end_idx) | ||
520 | - for token in tokens[start_idx:end_idx+1]: | ||
521 | - token['occupied'] = True | ||
522 | - | ||
523 | -def mark_np(tokens, argument, case): | ||
524 | - noun_token = get_matching_token(tokens, orth='', base='', | ||
525 | - case=case, number='', pos='subst') | ||
526 | - start_idx = tokens.index(noun_token) | ||
527 | - end_idx = start_idx | ||
528 | - fill_token_data(noun_token, argument, start_idx, end_idx) | ||
529 | - for token in tokens[start_idx:end_idx+1]: | ||
530 | - token['occupied'] = True | ||
531 | - | ||
532 | -def mark_ncp(tokens, argument, case, phrase_type): | ||
533 | - noun_token = get_matching_token(tokens, orth='', base='', | ||
534 | - case=case, number='', pos='subst') | ||
535 | - start_idx = tokens.index(noun_token) | ||
536 | - xx, end_idx = mark_phrase(tokens, start_idx, argument, phrase_type) | ||
537 | - fill_token_data(noun_token, argument, start_idx, end_idx) | ||
538 | - for token in tokens[start_idx:end_idx+1]: | ||
539 | - token['occupied'] = True | ||
540 | - | ||
541 | -def mark_cp(tokens, argument, phrase_type): | ||
542 | - start_idx, end_idx = mark_phrase(tokens, -1, argument, phrase_type) | ||
543 | - for token in tokens[start_idx:end_idx+1]: | ||
544 | - token['occupied'] = True | ||
545 | - | ||
546 | -def mark_adjp(tokens, argument, case): | ||
547 | - adj_token = get_matching_token(tokens, case=case, pos='adj') | ||
548 | - start_idx = tokens.index(adj_token) | ||
549 | - end_idx = start_idx | ||
550 | - fill_token_data(adj_token, argument, start_idx, end_idx) | ||
551 | - for token in tokens[start_idx:end_idx+1]: | ||
552 | - token['occupied'] = True | ||
553 | - | ||
554 | -def mark_infp(tokens, argument, aspect): | ||
555 | - inf_token = get_matching_token(tokens, orth='', base='', | ||
556 | - case='', number='', aspect=aspect, pos='inf') | ||
557 | - start_idx = tokens.index(inf_token) | ||
558 | - end_idx = start_idx | ||
559 | - fill_token_data(inf_token, argument, start_idx, end_idx) | ||
560 | - for token in tokens[start_idx:end_idx+1]: | ||
561 | - token['occupied'] = True | ||
562 | - | ||
563 | -def mark_lemma(tokens, argument, lemma, sie, aspect): | ||
564 | - lemma_token = get_matching_token(tokens, orth='', base=lemma, | ||
565 | - case='', number='', aspect=aspect, | ||
566 | - pos='') | ||
567 | - start_idx = tokens.index(lemma_token) | ||
568 | - if sie: | ||
569 | - sie_token = get_matching_token(tokens[start_idx:], orth='', base=u'się', | ||
570 | - case='', number='', pos='') | ||
571 | - end_idx = tokens.index(sie_token) | ||
572 | - fill_token_data(sie_token, argument, start_idx, end_idx) | ||
573 | - else: | ||
574 | - end_idx = start_idx | ||
575 | - fill_token_data(lemma_token, argument, start_idx, end_idx) | ||
576 | - | ||
577 | - for token in tokens[start_idx:end_idx+1]: | ||
578 | - token['occupied'] = True | ||
579 | - | ||
580 | -def mark_nonch(tokens, argument, nonch): | ||
581 | - for pronoun in nonch.split('|'): | ||
582 | - pronoun_parts = pronoun.split() | ||
583 | - if len(pronoun_parts) > 1: | ||
584 | - matched_tokens = [] | ||
585 | - parts_matched = True | ||
586 | - pronoun_start_idx = 0 | ||
587 | - for pronoun_part in pronoun_parts: | ||
588 | - pronoun_token = get_matching_token(tokens[pronoun_start_idx+1:], orth='', base=pronoun_part, | ||
589 | - case='', number='', pos='') | ||
590 | - if pronoun_token: | ||
591 | - pronoun_start_idx = tokens.index(pronoun_token) | ||
592 | - matched_tokens.append(pronoun_token) | ||
593 | - else: | ||
594 | - parts_matched = False | ||
595 | - break | ||
596 | - if parts_matched: | ||
597 | - start_idx = tokens.index(matched_tokens[0]) | ||
598 | - end_idx = tokens.index(matched_tokens[-1]) | ||
599 | - for token in matched_tokens: | ||
600 | - fill_token_data(token, argument, start_idx, end_idx) | ||
601 | - break | ||
602 | - else: | ||
603 | - pronoun_token = get_matching_token(tokens, orth='', base=pronoun, | ||
604 | - case='', number='', pos='') | ||
605 | - if pronoun_token: | ||
606 | - start_idx = tokens.index(pronoun_token) | ||
607 | - end_idx = start_idx | ||
608 | - fill_token_data(pronoun_token, argument, start_idx, end_idx) | ||
609 | - break | ||
610 | - for token in tokens[start_idx:end_idx+1]: | ||
611 | - token['occupied'] = True | ||
612 | - | ||
613 | -def mark_advp(tokens, argument, advp_type): | ||
614 | - if advp_type == 'pron': | ||
615 | - possible_bases = ['tak', 'jak'] | ||
616 | - for base in possible_bases: | ||
617 | - advp_token = get_matching_token(tokens, base=base, pos='adv') | ||
618 | - if advp_token: | ||
619 | - break | ||
620 | - elif advp_type == 'misc': | ||
621 | - possible_degrees = ['com', 'sup'] | ||
622 | - for degree in possible_degrees: | ||
623 | - advp_token = get_matching_token(tokens, degree=degree, pos='adv') | ||
624 | - if advp_token: | ||
625 | - break | ||
626 | - start_idx = tokens.index(advp_token) | ||
627 | - end_idx = start_idx | ||
628 | - fill_token_data(advp_token, argument, start_idx, end_idx) | ||
629 | - for token in tokens[start_idx:end_idx+1]: | ||
630 | - token['occupied'] = True | ||
631 | - | ||
632 | -def count_occupied(tokens): | ||
633 | - occupied_tokens = [token for token in tokens if token['occupied']] | ||
634 | - return len(occupied_tokens) | ||
635 | - | ||
636 | -def mark_arg_in_sentence(argument, sentence_tokens): | ||
637 | - (arg_type, attributes, category) = arg_from_text_rep(argument) | ||
638 | - if arg_type == 'fixed': | ||
639 | - mark_fixed(sentence_tokens, argument, attributes[0]) | ||
640 | - elif arg_type == 'preplexnp': | ||
641 | - preposition = attributes[0] | ||
642 | - case = case_conversion(attributes[1], category) | ||
643 | - number = number_conversion(attributes[2]) | ||
644 | - lemma = attributes[3] | ||
645 | - mark_preplexnp(sentence_tokens, argument, preposition, case, number, lemma) | ||
646 | - elif arg_type == 'comprepnp': | ||
647 | - complex_preposition_parts = attributes[0].split() | ||
648 | - preposition = complex_preposition_parts[0] | ||
649 | - lemma = complex_preposition_parts[1] | ||
650 | - mark_comprepnp(sentence_tokens, argument, preposition, lemma) | ||
651 | - elif arg_type == 'prepnp': | ||
652 | - preposition = attributes[0] | ||
653 | - case = case_conversion(attributes[1], category) | ||
654 | - mark_prepnp(sentence_tokens, argument, preposition, case) | ||
655 | - elif arg_type == 'prepncp': | ||
656 | - preposition = attributes[0] | ||
657 | - case = case_conversion(attributes[1], category) | ||
658 | - phrase_type = phrase_type_conversion(attributes[2]) | ||
659 | - mark_prepncp(sentence_tokens, argument, preposition, case, phrase_type) | ||
660 | - elif arg_type == 'prepadjp': | ||
661 | - preposition = attributes[0] | ||
662 | - case = case_conversion(attributes[1], category) | ||
663 | - mark_prepadjp(sentence_tokens, argument, preposition, case) | ||
664 | - elif arg_type == 'lexnp': | ||
665 | - case = case_conversion(attributes[0], category) | ||
666 | - number = number_conversion(attributes[1]) | ||
667 | - lemma = attributes[2] | ||
668 | - mark_lexnp(sentence_tokens, argument, case, number, lemma) | ||
669 | - elif arg_type == 'np': | ||
670 | - case = case_conversion(attributes[0], category) | ||
671 | - mark_np(sentence_tokens, argument, case) | ||
672 | - elif arg_type == 'ncp': | ||
673 | - case = case_conversion(attributes[0], category) | ||
674 | - phrase_type = phrase_type_conversion(attributes[1]) | ||
675 | - mark_ncp(sentence_tokens, argument, case, phrase_type) | ||
676 | - elif arg_type == 'cp': | ||
677 | - phrase_type = phrase_type_conversion(attributes[0]) | ||
678 | - mark_cp(sentence_tokens, argument, phrase_type) | ||
679 | - elif arg_type == 'adjp': | ||
680 | - case = case_conversion(attributes[0], category) | ||
681 | - mark_adjp(sentence_tokens, argument, case) | ||
682 | - elif arg_type == 'infp': | ||
683 | - aspect = aspect_conversion(attributes[0]) | ||
684 | - mark_infp(sentence_tokens, argument, aspect) | ||
685 | - elif arg_type == u'nonch': | ||
686 | - nonch = u'co|coś|nic|to|to samo co' | ||
687 | - mark_nonch(sentence_tokens, argument, nonch) | ||
688 | - elif arg_type == 'lemma': | ||
689 | - lemma = attributes[0] | ||
690 | - sie = attributes[1] | ||
691 | - aspect = aspect_conversion(attributes[2]) | ||
692 | - mark_lemma(sentence_tokens, argument, lemma, sie, aspect) | ||
693 | - elif arg_type == 'advp': | ||
694 | - advp_type = attributes[0] | ||
695 | - mark_advp(sentence_tokens, argument, advp_type) | ||
696 | -# elif arg_type == 'xp': | ||
697 | -# argument_obj = Argument.objects.get(text_rep=argument) | ||
698 | -# realizations = [realization.argument.text_rep for realization in argument_obj.realizations.all()] | ||
699 | -# start_occupacy = count_occupied(sentence_tokens) | ||
700 | -# for realization in sort_arguments(realizations): | ||
701 | -# mark_arg_in_sentence(realization, sentence_tokens) | ||
702 | -# if count_occupied(sentence_tokens) > start_occupacy: | ||
703 | -# break | ||
704 | - | ||
705 | - | ||
706 | -def cut_sentence_chunks(sentence_tokens): | ||
707 | - endpoint = -1 | ||
708 | - ignore = False | ||
709 | - sentence_chunks = [] | ||
710 | - for token in sentence_tokens: | ||
711 | - if token['argument'] and not ignore: | ||
712 | - orths = [tok['orth'] for tok in sentence_tokens[token['argument_start']:token['argument_end']+1] if tok['argument']] | ||
713 | - arg_realization = u'%s (%s)' % (u' '.join(orths), token['argument']) | ||
714 | - endpoint = token['argument_end'] | ||
715 | - sentence_chunks.append(arg_realization) | ||
716 | - ignore = True | ||
717 | - if token['idx'] == endpoint: | ||
718 | - ignore = False | ||
719 | - return u' '.join(sentence_chunks) | ||
720 | - | ||
721 | -def get_sentence_chunk(arguments, sentence_tokens): | ||
722 | - for arg in arguments: | ||
723 | - mark_arg_in_sentence(arg, sentence_tokens) | ||
724 | - return cut_sentence_chunks(sentence_tokens) | ||
725 | - | ||
726 | -def create_lemma_argument(lemma_entry, frame_text_rep): | ||
727 | - frame_parts = frame_text_rep.split(':') | ||
728 | - sie = frame_parts[0] | ||
729 | - aspect = frame_parts[2] | ||
730 | - frame_structure = frame_parts[3] | ||
731 | - if not sie and u'refl' in frame_structure: | ||
732 | - sie = u'się' | ||
733 | - argument = u'lemma(%s,%s,%s)' % (lemma_entry, sie, aspect) | ||
734 | - return argument | ||
735 | - | ||
736 | -def get_arguments_coverage(): | ||
737 | - try: | ||
738 | - first_line = True | 65 | +def write_examples(statuses): |
66 | + try: | ||
739 | examples_file = codecs.open(os.path.join(BASE_PATH, | 67 | examples_file = codecs.open(os.path.join(BASE_PATH, |
740 | - 'detailed_examples_v2.csv'), 'rt', 'utf-8') | ||
741 | - output_file = codecs.open(os.path.join(BASE_PATH, | ||
742 | - 'detailed_examples_cover_v2.csv'), 'wt', 'utf-8') | ||
743 | - output_file.write(u'%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' % LABELS) | ||
744 | - for line in examples_file: | ||
745 | - if first_line: | ||
746 | - first_line = False | ||
747 | - continue | ||
748 | - if 'Error!!!' in line: | ||
749 | - continue | ||
750 | - line = line.strip() | ||
751 | - example_data = line.split('\t') | ||
752 | - lemma_entry = example_data[0] | ||
753 | - lemma_status = example_data[1] | ||
754 | - frame_text_rep = example_data[2] | ||
755 | - frame_opinion = example_data[3] | ||
756 | - sentence = example_data[4] | ||
757 | - tagged_sentence = example_data[5] | ||
758 | - example_opinion = example_data[6] | ||
759 | - example_source = example_data[7] | ||
760 | - arguments_selection = example_data[8] | ||
761 | - if not tagged_sentence: | ||
762 | - sentence_chunk = u'Error!!! Błąd tagowania.' | ||
763 | - else: | ||
764 | -# print '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' | ||
765 | -# print sentence | ||
766 | - lemma_argument = create_lemma_argument(lemma_entry, frame_text_rep) | ||
767 | - arguments = [lemma_argument] | ||
768 | - arguments.extend(get_arguments(arguments_selection)) | ||
769 | - sentence_tokens = tokenize_sentence(tagged_sentence) | ||
770 | - try: | ||
771 | - sentence_chunk = get_sentence_chunk(arguments, sentence_tokens) | ||
772 | - except: | ||
773 | - sentence_chunk = u'Error!!! Nie dopasowano wszystkich argumentów.' | ||
774 | - output_file.write(u'%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' % (lemma_entry, | ||
775 | - lemma_status, | ||
776 | - frame_text_rep, | ||
777 | - frame_opinion, | ||
778 | - sentence, | ||
779 | - tagged_sentence, | ||
780 | - sentence_chunk, | ||
781 | - example_opinion, | ||
782 | - example_source, | ||
783 | - arguments_selection)) | 68 | + 'examples_gotowe_plus.txt'), 'wt', 'utf-8') |
69 | + for lemma in Lemma.objects.filter(old=False).filter(status__in=statuses).order_by('entry').all(): | ||
70 | + print lemma | ||
71 | + examples_file.write(lemma.entry+'\n') | ||
72 | + for frame in lemma.frames.order_by('text_rep').all(): | ||
73 | + if lemma.frame_opinions.get(frame=frame).value.value != u'zła': | ||
74 | + examples_file.write('\t%s\n' % frame.text_rep) | ||
75 | + for example in lemma.nkjp_examples.filter(frame=frame): | ||
76 | + examples_file.write('\t\t--> %s\n' % example.sentence) | ||
77 | + examples_file.write('\n\n') | ||
784 | finally: | 78 | finally: |
785 | - examples_file.close() | ||
786 | - output_file.close() | ||
787 | - | ||
788 | -def get_examples(): | ||
789 | - q_statuses = [] | ||
790 | - for status in STATUSES_LS: | ||
791 | - q_statuses.append(Q(status__status=status)) | ||
792 | - write_detailed_examples(q_statuses) | ||
793 | -# write_examples(q_statuses) | ||
794 | -# get_arguments_coverage() | ||
795 | - | ||
796 | \ No newline at end of file | 79 | \ No newline at end of file |
80 | + examples_file.close() |
dictionary/models.py
1 | #-*- coding:utf-8 -*- | 1 | #-*- coding:utf-8 -*- |
2 | 2 | ||
3 | -#Copyright (c) 2012, Bartłomiej Nitoń | ||
4 | -#All rights reserved. | ||
5 | - | ||
6 | -#Redistribution and use in source and binary forms, with or without modification, are permitted provided | ||
7 | -#that the following conditions are met: | ||
8 | - | ||
9 | -# Redistributions of source code must retain the above copyright notice, this list of conditions and | ||
10 | -# the following disclaimer. | ||
11 | -# Redistributions in binary form must reproduce the above copyright notice, this list of conditions | ||
12 | -# and the following disclaimer in the documentation and/or other materials provided with the distribution. | ||
13 | - | ||
14 | -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED | ||
15 | -# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | ||
16 | -# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||
17 | -# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | ||
18 | -# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
19 | -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
20 | -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
21 | -# POSSIBILITY OF SUCH DAMAGE. | ||
22 | - | ||
23 | from django.contrib.auth.models import User | 3 | from django.contrib.auth.models import User |
24 | from django.db.models import * | 4 | from django.db.models import * |
25 | 5 | ||
26 | -from wordnet.models import LexicalUnit | ||
27 | - | ||
28 | class Configuration(Model): | 6 | class Configuration(Model): |
29 | name = CharField(max_length=16, primary_key=True, unique=True, db_column='nazwa_konfiguracji') | 7 | name = CharField(max_length=16, primary_key=True, unique=True, db_column='nazwa_konfiguracji') |
30 | selected_conf = BooleanField(db_column='wybrana_konfiguracja', default=False) | 8 | selected_conf = BooleanField(db_column='wybrana_konfiguracja', default=False) |
@@ -250,6 +228,20 @@ class Lemma(Model): | @@ -250,6 +228,20 @@ class Lemma(Model): | ||
250 | except Frame_Opinion.DoesNotExist: | 228 | except Frame_Opinion.DoesNotExist: |
251 | pass | 229 | pass |
252 | return frame_opinion_name | 230 | return frame_opinion_name |
231 | + | ||
232 | + def phraseology_ready(self): | ||
233 | + actual_status = self.status | ||
234 | + ready_f_status = Lemma_Status.objects.get(type__sym_name='ready_f') | ||
235 | + if actual_status.priority >= ready_f_status.priority: | ||
236 | + return True | ||
237 | + return False | ||
238 | + | ||
239 | + def semantics_ready(self): | ||
240 | + actual_status = self.status | ||
241 | + ready_s_status = Lemma_Status.objects.get(type__sym_name='ready_s') | ||
242 | + if actual_status.priority >= ready_s_status.priority: | ||
243 | + return True | ||
244 | + return False | ||
253 | 245 | ||
254 | class Meta: | 246 | class Meta: |
255 | db_table = 'hasla' | 247 | db_table = 'hasla' |
@@ -439,15 +431,22 @@ def positions_to_frame(positions, reflex, negativity, predicativity, aspect): | @@ -439,15 +431,22 @@ def positions_to_frame(positions, reflex, negativity, predicativity, aspect): | ||
439 | if frame_obj.has_phraseologic_arguments(): | 431 | if frame_obj.has_phraseologic_arguments(): |
440 | frame_obj.phraseologic = True | 432 | frame_obj.phraseologic = True |
441 | frame_obj.save() | 433 | frame_obj.save() |
442 | - return frame_obj | 434 | + return frame_obj |
435 | + | ||
436 | +def get_schemata_by_type(sch_type, schemata_query): | ||
437 | + if sch_type == 'normal': | ||
438 | + schemata_query = get_normal_schemata_only(schemata_query) | ||
439 | + elif sch_type == 'phraseologic': | ||
440 | + schemata_query = get_phraseologic_schemata_only(schemata_query) | ||
441 | + return schemata_query | ||
443 | 442 | ||
444 | -def get_phraseologic_frames_only(frames_query): | ||
445 | - frames_query = frames_query.filter(phraseologic=True) | ||
446 | -# phraseologic_arg_models = Argument_Model.objects.filter(phraseologic=True) | ||
447 | -# phraseologic_arg_models_names = [arg_model.arg_model_name for arg_model in phraseologic_arg_models.all()] | ||
448 | -# frames_query = frames_query.filter(Q(positions__arguments__type__in=phraseologic_arg_models_names) | | ||
449 | -# Q(positions__arguments__atributes__values__argument__type__in=phraseologic_arg_models_names)) | ||
450 | - return frames_query | 443 | +def get_normal_schemata_only(schemata_query): |
444 | + schemata_query = schemata_query.filter(phraseologic=False) | ||
445 | + return schemata_query | ||
446 | + | ||
447 | +def get_phraseologic_schemata_only(schemata_query): | ||
448 | + schemata_query = schemata_query.filter(phraseologic=True) | ||
449 | + return schemata_query | ||
451 | 450 | ||
452 | 451 | ||
453 | class NKJP_Example(Model): | 452 | class NKJP_Example(Model): |
@@ -745,13 +744,6 @@ class Argument(Model): | @@ -745,13 +744,6 @@ class Argument(Model): | ||
745 | break | 744 | break |
746 | return is_fully_lexicalized | 745 | return is_fully_lexicalized |
747 | 746 | ||
748 | - class Meta: | ||
749 | - permissions = ( | ||
750 | - ('view_realization', u'Może oglądać realizacje argumentów.'), | ||
751 | - ('create_realization', u'Może kreować realizacje argumentów.'), | ||
752 | - ('view_arg_stats', u'Może oglądać statystyki argumentów.'), | ||
753 | - ) | ||
754 | - | ||
755 | def __unicode__(self): | 747 | def __unicode__(self): |
756 | return '%s' % (self.text_rep) | 748 | return '%s' % (self.text_rep) |
757 | 749 | ||
@@ -764,7 +756,21 @@ class Argument(Model): | @@ -764,7 +756,21 @@ class Argument(Model): | ||
764 | for value in attr.values.filter(type__sym_name=u'parameter'): | 756 | for value in attr.values.filter(type__sym_name=u'parameter'): |
765 | if value.parameter.type.realization_only: | 757 | if value.parameter.type.realization_only: |
766 | return True | 758 | return True |
767 | - return False | 759 | + return False |
760 | + | ||
761 | + def main_phrase_type(self): | ||
762 | + category_attrs = self.atributes.filter(type=u'KATEGORIA') | ||
763 | + if not category_attrs.exists() or category_attrs.all()[0].values.count() == 0: # xp bez podtypow | ||
764 | + return self | ||
765 | + else: | ||
766 | + return Argument.objects.get(text_rep=u'%s(%s)' % (self.type, category_attrs.all()[0].selection_mode.name)) | ||
767 | + | ||
768 | + class Meta: | ||
769 | + permissions = ( | ||
770 | + ('view_realization', u'Może oglądać realizacje argumentów.'), | ||
771 | + ('create_realization', u'Może kreować realizacje argumentów.'), | ||
772 | + ('view_arg_stats', u'Może oglądać statystyki argumentów.'), | ||
773 | + ) | ||
768 | 774 | ||
769 | def sort_arguments(arguments): | 775 | def sort_arguments(arguments): |
770 | return sortArguments(arguments) | 776 | return sortArguments(arguments) |
@@ -1382,12 +1388,9 @@ class Entry(Model): | @@ -1382,12 +1388,9 @@ class Entry(Model): | ||
1382 | ('view_semantics', u'Może oglądać semantykę.'), | 1388 | ('view_semantics', u'Może oglądać semantykę.'), |
1383 | ) | 1389 | ) |
1384 | 1390 | ||
1385 | - def lexical_units(self): | ||
1386 | - return LexicalUnit.objects.filter(Q(base = self.name)|Q(base = self.name + u' się')) | ||
1387 | - | ||
1388 | def actual_frames(self): | 1391 | def actual_frames(self): |
1389 | frame_ids = [] | 1392 | frame_ids = [] |
1390 | - lexical_units = self.lexical_units().order_by('sense') | 1393 | + lexical_units = self.meanings.order_by('sense') |
1391 | for lexical_unit in lexical_units: | 1394 | for lexical_unit in lexical_units: |
1392 | frame_ids.extend([f.id for f in lexical_unit.actual_frames()]) | 1395 | frame_ids.extend([f.id for f in lexical_unit.actual_frames()]) |
1393 | return get_model('semantics', 'SemanticFrame').objects.filter(id__in=list(set(frame_ids))) | 1396 | return get_model('semantics', 'SemanticFrame').objects.filter(id__in=list(set(frame_ids))) |
@@ -1406,6 +1409,9 @@ class Entry(Model): | @@ -1406,6 +1409,9 @@ class Entry(Model): | ||
1406 | 'realizations': realizations_ids}) | 1409 | 'realizations': realizations_ids}) |
1407 | return matching_connections | 1410 | return matching_connections |
1408 | 1411 | ||
1412 | + def actual_lemma(self): | ||
1413 | + return self.lemmas.get(old=False) | ||
1414 | + | ||
1409 | def __unicode__(self): | 1415 | def __unicode__(self): |
1410 | return self.name | 1416 | return self.name |
1411 | 1417 |
dictionary/saving.py
@@ -94,7 +94,7 @@ def update_connections(lemma_id, reconnect_operations, user): | @@ -94,7 +94,7 @@ def update_connections(lemma_id, reconnect_operations, user): | ||
94 | 94 | ||
95 | def disconnect_all_examples_operations(lemma): | 95 | def disconnect_all_examples_operations(lemma): |
96 | operations = [] | 96 | operations = [] |
97 | - lex_units = lemma.entry_obj.lexical_units().all() | 97 | + lex_units = lemma.entry_obj.meanings.all() |
98 | for lu in lex_units: | 98 | for lu in lex_units: |
99 | lu_examples = LexicalUnitExamples.objects.filter(lexical_unit=lu) | 99 | lu_examples = LexicalUnitExamples.objects.filter(lexical_unit=lu) |
100 | for lu_ex in lu_examples: | 100 | for lu_ex in lu_examples: |
@@ -112,6 +112,6 @@ def disconnect_example_operation(example_dict, example_obj): | @@ -112,6 +112,6 @@ def disconnect_example_operation(example_dict, example_obj): | ||
112 | lu = LexicalUnit.objects.get(id=example_dict['lexical_unit']) | 112 | lu = LexicalUnit.objects.get(id=example_dict['lexical_unit']) |
113 | return {'operation': 'remove_example', 'unit': lu.id, 'example': example_obj.id} | 113 | return {'operation': 'remove_example', 'unit': lu.id, 'example': example_obj.id} |
114 | 114 | ||
115 | -def reconnect_examples(operations): | ||
116 | - update_meanings(operations) | 115 | +def reconnect_examples(lemma, operations): |
116 | + update_meanings(lemma.id, operations) | ||
117 | 117 | ||
118 | \ No newline at end of file | 118 | \ No newline at end of file |
dictionary/static/css/frame_table.css
@@ -80,8 +80,7 @@ table.ActiveFrameTable td.ColumnCategory, table.InactiveFrameTable td.ColumnCate | @@ -80,8 +80,7 @@ table.ActiveFrameTable td.ColumnCategory, table.InactiveFrameTable td.ColumnCate | ||
80 | } | 80 | } |
81 | 81 | ||
82 | table.ActiveFrameTable td[selected=selected], table.InactiveFrameTable td[selected=selected] { | 82 | table.ActiveFrameTable td[selected=selected], table.InactiveFrameTable td[selected=selected] { |
83 | - position: relative; | ||
84 | - box-shadow: 0px 0px 0px 4px grey; | 83 | + border-width: 5px; |
85 | } | 84 | } |
86 | 85 | ||
87 | table.ActiveFrameTable .Opinion, table.InactiveFrameTable .Opinion { | 86 | table.ActiveFrameTable .Opinion, table.InactiveFrameTable .Opinion { |
dictionary/static/css/lemmas_filtering.css
0 → 100644
dictionary/static/js/lemma-view.js
@@ -22,25 +22,6 @@ var nkjp_source_tab = ax_nkjp_source_vals; | @@ -22,25 +22,6 @@ var nkjp_source_tab = ax_nkjp_source_vals; | ||
22 | // te wartosci maja zasieg na wszystkie hasla | 22 | // te wartosci maja zasieg na wszystkie hasla |
23 | window.schemas = new Array(); | 23 | window.schemas = new Array(); |
24 | var lemma_id = -1; | 24 | var lemma_id = -1; |
25 | - var aspect_vals = []; | ||
26 | - var reflex_vals = []; | ||
27 | - var neg_vals = []; | ||
28 | - var pred_vals = []; | ||
29 | - var opinion_vals = []; | ||
30 | - var filter_aspect_val = '*'; | ||
31 | - var filter_reflex_val = '*'; | ||
32 | - var filter_neg_val = '*'; | ||
33 | - var filter_pred_val = '*'; | ||
34 | - var filter_opinion_val = '*'; | ||
35 | - var filter_position_val = '.*'; | ||
36 | - var filter_argument_val = '.*'; | ||
37 | - var prev_filter_aspect_val = '*'; | ||
38 | - var prev_filter_reflex_val = '*'; | ||
39 | - var prev_filter_neg_val = '*'; | ||
40 | - var prev_filter_pred_val = '*'; | ||
41 | - var prev_filter_opinion_val = '*'; | ||
42 | - var prev_filter_position_val = '.*'; | ||
43 | - var prev_filter_argument_val = '.*'; | ||
44 | var prev_lemma_id = -1; | 25 | var prev_lemma_id = -1; |
45 | 26 | ||
46 | // te wartosci trzeba czyscic przy ladowaniu innego hasla | 27 | // te wartosci trzeba czyscic przy ladowaniu innego hasla |
@@ -68,7 +49,7 @@ var nkjp_source_tab = ax_nkjp_source_vals; | @@ -68,7 +49,7 @@ var nkjp_source_tab = ax_nkjp_source_vals; | ||
68 | var lemma_entry = ''; | 49 | var lemma_entry = ''; |
69 | var prev_lemma_entry = ''; | 50 | var prev_lemma_entry = ''; |
70 | var selected_notes_row_id = -1; | 51 | var selected_notes_row_id = -1; |
71 | - var can_modify = false; | 52 | + //var can_modify = false; |
72 | 53 | ||
73 | //////////////////////////////////////////////////////////////// | 54 | //////////////////////////////////////////////////////////////// |
74 | 55 | ||
@@ -84,33 +65,6 @@ function resetLemmaVersions() { | @@ -84,33 +65,6 @@ function resetLemmaVersions() { | ||
84 | window.nkjp_lemma_examples); | 65 | window.nkjp_lemma_examples); |
85 | frames_modif.push(lemma_version); | 66 | frames_modif.push(lemma_version); |
86 | } | 67 | } |
87 | - | ||
88 | -function initiateFrameFilters() | ||
89 | -{ | ||
90 | - $.ajaxJSON({ | ||
91 | - method: 'get', | ||
92 | - url: ajax_get_frame_filter_options, | ||
93 | - data: { | ||
94 | - //message_id: message_id, | ||
95 | - }, | ||
96 | - callback: function(result) { | ||
97 | - window.aspect_vals = ['*']; | ||
98 | - window.reflex_vals = ['*']; | ||
99 | - window.neg_vals = ['*']; | ||
100 | - window.pred_vals = ['*']; | ||
101 | - window.opinion_vals = ['*']; | ||
102 | - $.merge(window.aspect_vals, result['aspect_options']); | ||
103 | - $.merge(window.reflex_vals, result['reflex_options']); | ||
104 | - $.merge(window.neg_vals, result['neg_options']); | ||
105 | - $.merge(window.pred_vals, result['pred_options']); | ||
106 | - $.merge(window.opinion_vals, result['opinion_options']); | ||
107 | - }, | ||
108 | - | ||
109 | - error_callback: function(xhr, status, error) { | ||
110 | - error_alert(status + ': ' + error); | ||
111 | - }, | ||
112 | - }); | ||
113 | -} | ||
114 | 68 | ||
115 | function argsToRemove(example, elementToRemoveId) | 69 | function argsToRemove(example, elementToRemoveId) |
116 | { | 70 | { |
@@ -211,198 +165,7 @@ function addPinnedExamplesDialog() { | @@ -211,198 +165,7 @@ function addPinnedExamplesDialog() { | ||
211 | 165 | ||
212 | /////////////////////////////////////////////////////////////// | 166 | /////////////////////////////////////////////////////////////// |
213 | 167 | ||
214 | -function filter_update(id) | ||
215 | -{ | ||
216 | - if(id == 'frame_filter') | ||
217 | - { | ||
218 | - window.filter_aspect_val = $('#frame_filter #aspect_filter').val(); | ||
219 | - window.filter_reflex_val = $('#frame_filter #reflex_filter').val(); | ||
220 | - window.filter_neg_val = $('#frame_filter #neg_filter').val(); | ||
221 | - window.filter_pred_val = $('#frame_filter #pred_filter').val(); | ||
222 | - window.filter_opinion_val = $('#frame_filter #opinion_filter').val(); | ||
223 | - window.filter_position_val = $('#frame_filter #position_filter').val(); | ||
224 | - window.filter_argument_val = $('#frame_filter #argument_filter').val(); | ||
225 | - } | ||
226 | - else if(id == 'prev_frame_filter') | ||
227 | - { | ||
228 | - window.prev_filter_aspect_val = $('#prev_frame_filter #aspect_filter').val(); | ||
229 | - window.prev_filter_reflex_val = $('#prev_frame_filter #reflex_filter').val(); | ||
230 | - window.prev_filter_neg_val = $('#prev_frame_filter #neg_filter').val(); | ||
231 | - window.prev_filter_pred_val = $('#prev_frame_filter #pred_filter').val(); | ||
232 | - window.prev_filter_opinion_val = $('#prev_frame_filter #opinion_filter').val(); | ||
233 | - window.prev_filter_position_val = $('#prev_frame_filter #position_filter').val(); | ||
234 | - window.prev_filter_argument_val = $('#prev_frame_filter #argument_filter').val(); | ||
235 | - } | ||
236 | -} | ||
237 | - | ||
238 | - | ||
239 | -function draw_frames_filter(id) | ||
240 | -{ | ||
241 | - var frame_filter = document.getElementById(id); | ||
242 | - | ||
243 | - p = document.createElement('p'); | ||
244 | - text = document.createTextNode("Aspekt: "); | ||
245 | - p.appendChild(text); | ||
246 | - var select = document.createElement('select'); | ||
247 | - select.setAttribute('id', 'aspect_filter'); | ||
248 | - select.setAttribute('name', 'ASPEKT'); | ||
249 | - p.appendChild(select); | ||
250 | - for(var i=0; i<aspect_vals.length; i++) | ||
251 | - { | ||
252 | - var option = document.createElement('option'); | ||
253 | - option.setAttribute('value', aspect_vals[i]); | ||
254 | - option.appendChild(document.createTextNode(aspect_vals[i])); | ||
255 | - select.appendChild(option); | ||
256 | - } | ||
257 | - frame_filter.appendChild(p); | ||
258 | - | ||
259 | - p = document.createElement('p'); | ||
260 | - text = document.createTextNode("Zwrotność: "); | ||
261 | - p.appendChild(text); | ||
262 | - select = document.createElement('select'); | ||
263 | - select.setAttribute('id', 'reflex_filter'); | ||
264 | - select.setAttribute('name', 'ZWROTNOSC'); | ||
265 | - p.appendChild(select); | ||
266 | - for(var i=0; i<reflex_vals.length; i++) | ||
267 | - { | ||
268 | - var option = document.createElement('option'); | ||
269 | - option.setAttribute('value', reflex_vals[i]); | ||
270 | - option.appendChild(document.createTextNode(reflex_vals[i])); | ||
271 | - select.appendChild(option); | ||
272 | - } | ||
273 | - frame_filter.appendChild(p); | ||
274 | - | ||
275 | - p = document.createElement('p'); | ||
276 | - text = document.createTextNode("Negatywność: "); | ||
277 | - p.appendChild(text); | ||
278 | - select = document.createElement('select'); | ||
279 | - select.setAttribute('id', 'neg_filter'); | ||
280 | - select.setAttribute('name', 'NEGATYWNOŚĆ'); | ||
281 | - p.appendChild(select); | ||
282 | - for(var i=0; i<neg_vals.length; i++) | ||
283 | - { | ||
284 | - var option = document.createElement('option'); | ||
285 | - option.setAttribute('value', neg_vals[i]); | ||
286 | - option.appendChild(document.createTextNode(neg_vals[i])); | ||
287 | - select.appendChild(option); | ||
288 | - } | ||
289 | - frame_filter.appendChild(p); | ||
290 | - | ||
291 | - p = document.createElement('p'); | ||
292 | - text = document.createTextNode("Predykatywność: "); | ||
293 | - p.appendChild(text); | ||
294 | - select = document.createElement('select'); | ||
295 | - select.setAttribute('id', 'pred_filter'); | ||
296 | - select.setAttribute('name', 'PREDYKATYWNOŚĆ'); | ||
297 | - p.appendChild(select); | ||
298 | - for(var i=0; i<pred_vals.length; i++) | ||
299 | - { | ||
300 | - var option = document.createElement('option'); | ||
301 | - option.setAttribute('value', pred_vals[i]); | ||
302 | - option.appendChild(document.createTextNode(pred_vals[i])); | ||
303 | - select.appendChild(option); | ||
304 | - } | ||
305 | - frame_filter.appendChild(p); | ||
306 | - | ||
307 | - p = document.createElement('p'); | ||
308 | - text = document.createTextNode("Opinia: "); | ||
309 | - p.appendChild(text); | ||
310 | - select = document.createElement('select'); | ||
311 | - select.setAttribute('id', 'opinion_filter'); | ||
312 | - select.setAttribute('name', 'OPINIA'); | ||
313 | - p.appendChild(select); | ||
314 | - for(var i=0; i<opinion_vals.length; i++) | ||
315 | - { | ||
316 | - var option = document.createElement('option'); | ||
317 | - option.setAttribute('value', opinion_vals[i]); | ||
318 | - option.appendChild(document.createTextNode(opinion_vals[i])); | ||
319 | - select.appendChild(option); | ||
320 | - } | ||
321 | - frame_filter.appendChild(p); | ||
322 | - | ||
323 | - p = document.createElement('p'); | ||
324 | - text = document.createTextNode("Typ frazy: "); | ||
325 | - p.appendChild(text); | ||
326 | - select = document.createElement('input'); | ||
327 | - select.setAttribute('id', 'argument_filter'); | ||
328 | - select.setAttribute('name', 'ARGUMENT'); | ||
329 | - p.appendChild(select); | ||
330 | - frame_filter.appendChild(p); | ||
331 | - | ||
332 | - p = document.createElement('p'); | ||
333 | - text = document.createTextNode("Pozycja: "); | ||
334 | - p.appendChild(text); | ||
335 | - select = document.createElement('input'); | ||
336 | - select.setAttribute('id', 'position_filter'); | ||
337 | - select.setAttribute('name', 'POZYCJA'); | ||
338 | - p.appendChild(select); | ||
339 | - frame_filter.appendChild(p); | ||
340 | - | ||
341 | - if(id == 'frame_filter') | ||
342 | - { | ||
343 | - $('#frame_filter #aspect_filter').val(window.filter_aspect_val); | ||
344 | - $('#frame_filter #reflex_filter').val(window.filter_reflex_val); | ||
345 | - $('#frame_filter #neg_filter').val(window.filter_neg_val); | ||
346 | - $('#frame_filter #pred_filter').val(window.filter_pred_val); | ||
347 | - $('#frame_filter #opinion_filter').val(window.filter_opinion_val); | ||
348 | - $('#frame_filter #position_filter').val(window.filter_position_val); | ||
349 | - $('#frame_filter #argument_filter').val(window.filter_argument_val); | ||
350 | - } | ||
351 | - else if(id == 'prev_frame_filter') | ||
352 | - { | ||
353 | - $('#prev_frame_filter #aspect_filter').val(window.prev_filter_aspect_val); | ||
354 | - $('#prev_frame_filter #reflex_filter').val(window.prev_filter_reflex_val); | ||
355 | - $('#prev_frame_filter #neg_filter').val(window.prev_filter_neg_val); | ||
356 | - $('#prev_frame_filter #pred_filter').val(window.prev_filter_pred_val); | ||
357 | - $('#prev_frame_filter #opinion_filter').val(window.prev_filter_opinion_val); | ||
358 | - $('#prev_frame_filter #position_filter').val(window.prev_filter_position_val); | ||
359 | - $('#prev_frame_filter #argument_filter').val(window.prev_filter_argument_val); | ||
360 | - } | ||
361 | - | ||
362 | - //attach autocomplete | ||
363 | - $('#' + id + ' #argument_filter').autocomplete({ | ||
364 | - // triggers when selection performed | ||
365 | - select: function(event, ui){ | ||
366 | - filter_update(id); | ||
367 | - }, | ||
368 | - //define callback to format results | ||
369 | - source: function(req, add){ | ||
370 | - //pass request to server | ||
371 | - $.getJSON(ajax_argument_lookup, req, function(data) { | ||
372 | - //create array for response objects | ||
373 | - var suggestions = []; | ||
374 | - $.each(data['result'], function(i, val){ | ||
375 | - suggestions.push(val[0]); | ||
376 | - }); | ||
377 | - //pass array to callback | ||
378 | - add(suggestions); | ||
379 | - }); | ||
380 | - }, | ||
381 | - }); | ||
382 | - $('#' + id + ' #position_filter').autocomplete({ | ||
383 | - // triggers when selection performed | ||
384 | - select: function(event, ui){ | ||
385 | - filter_update(id); | ||
386 | - }, | ||
387 | - //define callback to format results | ||
388 | - source: function(req, add){ | ||
389 | - //pass request to server | ||
390 | - $.getJSON(ajax_position_lookup, req, function(data) { | ||
391 | - //create array for response objects | ||
392 | - var suggestions = []; | ||
393 | - $.each(data['result'], function(i, val){ | ||
394 | - suggestions.push(val[0]); | ||
395 | - }); | ||
396 | - //pass array to callback | ||
397 | - add(suggestions); | ||
398 | - }); | ||
399 | - }, | ||
400 | - }); | ||
401 | -} | ||
402 | - | ||
403 | - | ||
404 | function load_content(id) { | 168 | function load_content(id) { |
405 | - ShowProgressAnimation(); | ||
406 | $('#add-table-elem-dialog').dialog('close'); | 169 | $('#add-table-elem-dialog').dialog('close'); |
407 | if(lemma_id != id) | 170 | if(lemma_id != id) |
408 | $('#ready-note-dialog').dialog('close'); | 171 | $('#ready-note-dialog').dialog('close'); |
@@ -410,15 +173,17 @@ function load_content(id) { | @@ -410,15 +173,17 @@ function load_content(id) { | ||
410 | 173 | ||
411 | if(window.activeLemmaPanel == 'preview_lemma') | 174 | if(window.activeLemmaPanel == 'preview_lemma') |
412 | { | 175 | { |
176 | + ShowProgressAnimation(); | ||
413 | $('#preview_lemma').load(ajax_lemma_preview, 'id='+id+'&main_lemma_id='+window.lemma_id, function(){ | 177 | $('#preview_lemma').load(ajax_lemma_preview, 'id='+id+'&main_lemma_id='+window.lemma_id, function(){ |
414 | window.prev_lemma_id=id; | 178 | window.prev_lemma_id=id; |
179 | + loadPrevSchemataAndExamples(true); | ||
415 | createSplitter('prevFramesSplit', 'prev-lemma-tables', 'prev_tabs'); | 180 | createSplitter('prevFramesSplit', 'prev-lemma-tables', 'prev_tabs'); |
416 | areNewPreviewEntriesRelated(); | 181 | areNewPreviewEntriesRelated(); |
417 | - HideProgressAnimation(); | ||
418 | }); | 182 | }); |
419 | } | 183 | } |
420 | else | 184 | else |
421 | { | 185 | { |
186 | + ShowProgressAnimation(); | ||
422 | // czyszczenie wartosci | 187 | // czyszczenie wartosci |
423 | window.elem_in_bucket = ''; | 188 | window.elem_in_bucket = ''; |
424 | window.selected_notes_row_id = -1; | 189 | window.selected_notes_row_id = -1; |
@@ -446,10 +211,13 @@ function load_content(id) { | @@ -446,10 +211,13 @@ function load_content(id) { | ||
446 | window.notesNotSaved = false; | 211 | window.notesNotSaved = false; |
447 | window.lemmaExNotSaved = false; | 212 | window.lemmaExNotSaved = false; |
448 | 213 | ||
449 | - $('#new_frames').load(ajax_new_frames, 'id='+id, function(){ | 214 | + $('#new_frames').load(ajax_new_frames, 'id='+id, function(data){ |
450 | window.lemma_id = id; | 215 | window.lemma_id = id; |
216 | + | ||
217 | + loadSchemataAndExamples(); | ||
218 | + | ||
451 | createSplitter('framesSplit','new-frame-tables', 'tabs'); | 219 | createSplitter('framesSplit','new-frame-tables', 'tabs'); |
452 | - if(window.can_modify) | 220 | + /*if(window.can_modify) |
453 | { | 221 | { |
454 | addSyntacticFramesPerm = user_has_perm('dictionary.add_syntactic_frames'); | 222 | addSyntacticFramesPerm = user_has_perm('dictionary.add_syntactic_frames'); |
455 | addPhraseologicFramesPerm = user_has_perm('dictionary.add_phraseologic_frames'); | 223 | addPhraseologicFramesPerm = user_has_perm('dictionary.add_phraseologic_frames'); |
@@ -464,15 +232,7 @@ function load_content(id) { | @@ -464,15 +232,7 @@ function load_content(id) { | ||
464 | $(document).bind('keydown', 'shift+d', function(evt){duplicateElement(); return false; }); | 232 | $(document).bind('keydown', 'shift+d', function(evt){duplicateElement(); return false; }); |
465 | $(document).bind('keydown', 'shift+c', function(evt){copyElement(); return false; }); | 233 | $(document).bind('keydown', 'shift+c', function(evt){copyElement(); return false; }); |
466 | $(document).bind('keydown', 'shift+v', function(evt){pasteElement(); return false; }); | 234 | $(document).bind('keydown', 'shift+v', function(evt){pasteElement(); return false; }); |
467 | - $(document).bind('keydown', 'shift+w', function(evt){ | ||
468 | - if(window.change) | ||
469 | - { | ||
470 | - error_alert('Przed walidacją/zmianą statusu hasło musi zostać zapisane.'); | ||
471 | - return false; | ||
472 | - } | ||
473 | - validate_new_frames(false, false); | ||
474 | - return false; | ||
475 | - }); | 235 | + $(document).bind('keydown', 'shift+w', function(evt){validateSchemata(); return false; }); |
476 | if(addSyntacticFramesPerm) { | 236 | if(addSyntacticFramesPerm) { |
477 | $(document).bind('keydown', 'shift+x', function(evt){cutElement(); return false; }); | 237 | $(document).bind('keydown', 'shift+x', function(evt){cutElement(); return false; }); |
478 | $(document).bind('keydown', 'shift+m', function(evt){reserveLemma(); return false; }); | 238 | $(document).bind('keydown', 'shift+m', function(evt){reserveLemma(); return false; }); |
@@ -485,18 +245,14 @@ function load_content(id) { | @@ -485,18 +245,14 @@ function load_content(id) { | ||
485 | } | 245 | } |
486 | else | 246 | else |
487 | { | 247 | { |
488 | - $(document).unbind('keydown') | 248 | + $(document).unbind('keydown'); |
489 | $.get(ajax_user_has_perm, {perm: 'dictionary.own_lemmas'}, function(result) { | 249 | $.get(ajax_user_has_perm, {perm: 'dictionary.own_lemmas'}, function(result) { |
490 | if(result['has_perm']) { | 250 | if(result['has_perm']) { |
491 | $(document).bind('keydown', 'shift+m', function(evt){reserveLemma(); return false; }); | 251 | $(document).bind('keydown', 'shift+m', function(evt){reserveLemma(); return false; }); |
492 | } | 252 | } |
493 | }); | 253 | }); |
494 | - } | ||
495 | - | ||
496 | - window.frames_modif = new Array(); | ||
497 | - window.frames_modif_idx = 0; | ||
498 | - var lemma_version = new Lemma_Version(window.schemas, window.nkjp_examples, window.nkjp_lemma_examples); | ||
499 | - frames_modif.push(lemma_version); | 254 | + }*/ |
255 | + | ||
500 | if(document.getElementById("lemma_example_show")) | 256 | if(document.getElementById("lemma_example_show")) |
501 | { | 257 | { |
502 | draw_nkjp_table(document.getElementById("lemma_example_show"), '', window.nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_') | 258 | draw_nkjp_table(document.getElementById("lemma_example_show"), '', window.nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_') |
@@ -506,20 +262,10 @@ function load_content(id) { | @@ -506,20 +262,10 @@ function load_content(id) { | ||
506 | addPinnedExamplesDialog(); | 262 | addPinnedExamplesDialog(); |
507 | $('#lemma_desc').load(ajax_get_lemma_desc, 'id='+id); | 263 | $('#lemma_desc').load(ajax_get_lemma_desc, 'id='+id); |
508 | areNewPreviewEntriesRelated(); | 264 | areNewPreviewEntriesRelated(); |
509 | - HideProgressAnimation(); | ||
510 | refresh_example_propositions(); | 265 | refresh_example_propositions(); |
511 | }); | 266 | }); |
512 | $('#change_ctrl').load(ajax_change_ctrl, 'id='+id); | 267 | $('#change_ctrl').load(ajax_change_ctrl, 'id='+id); |
513 | $('#semantics').load(ajax_semantics, 'id='+id); | 268 | $('#semantics').load(ajax_semantics, 'id='+id); |
514 | - $('#examples').load(ajax_lemma_examples, 'id='+id, function(){ | ||
515 | - window.frames_modif = new Array(); // UWAGA, przestawic do lemma-view | ||
516 | - window.frames_modif_idx = 0; | ||
517 | - var lemma_version = new Lemma_Version(window.schemas, window.nkjp_examples, window.nkjp_lemma_examples); // TO | ||
518 | - frames_modif.push(lemma_version); | ||
519 | - draw_nkjp_table(document.getElementById("lemma_example_show"), '', window.nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_') | ||
520 | - $("tr.NkjpLemmaTableRow").click(function(){ | ||
521 | - selectLemmaNkjpTr(this.id)}); | ||
522 | - }); | ||
523 | $('#status').load(ajax_lemma_status, 'id='+id, function(){ | 269 | $('#status').load(ajax_lemma_status, 'id='+id, function(){ |
524 | $("#lemma-status-change button").click(validate_and_change_status); | 270 | $("#lemma-status-change button").click(validate_and_change_status); |
525 | $('#ready-note-dialog').dialog({ autoOpen: false, | 271 | $('#ready-note-dialog').dialog({ autoOpen: false, |
@@ -539,12 +285,74 @@ function load_content(id) { | @@ -539,12 +285,74 @@ function load_content(id) { | ||
539 | 285 | ||
540 | $('#preview_lemma').load(ajax_lemma_preview, 'id='+prevId+'&main_lemma_id='+id, function(){ | 286 | $('#preview_lemma').load(ajax_lemma_preview, 'id='+prevId+'&main_lemma_id='+id, function(){ |
541 | window.prev_lemma_id=prevId; | 287 | window.prev_lemma_id=prevId; |
288 | + loadPrevSchemataAndExamples(false); | ||
542 | createSplitter('prevFramesSplit', 'prev-lemma-tables', 'prev_tabs'); | 289 | createSplitter('prevFramesSplit', 'prev-lemma-tables', 'prev_tabs'); |
543 | areNewPreviewEntriesRelated(); | 290 | areNewPreviewEntriesRelated(); |
544 | }); | 291 | }); |
545 | } | 292 | } |
546 | } | 293 | } |
547 | 294 | ||
295 | +function validateSchemata() { | ||
296 | + if(window.change) { | ||
297 | + error_alert('Przed walidacją/zmianą statusu hasło musi zostać zapisane.'); | ||
298 | + return false; | ||
299 | + } | ||
300 | + validate_new_frames(false, false); | ||
301 | +} | ||
302 | + | ||
303 | +function loadSchemataAndExamples() { | ||
304 | + $.ajaxJSON({ | ||
305 | + method: 'get', | ||
306 | + url: ajax_get_schemata_and_examples, | ||
307 | + data: { | ||
308 | + lemma_id: window.lemma_id | ||
309 | + }, | ||
310 | + | ||
311 | + callback: function(result) { | ||
312 | + window.schemas = serializedObjToObj(result['schemata']); | ||
313 | + window.nkjp_examples = serializedNkjpToObj(result['examples']); | ||
314 | + window.nkjp_lemma_examples = serializedNkjpToObj(result['lemma_examples']); | ||
315 | + resetLemmaVersions(); | ||
316 | + var frame_class = 'InactiveFrameTable'; | ||
317 | + if(result['can_modify']) { | ||
318 | + frame_class = 'ActiveFrameTable'; | ||
319 | + } | ||
320 | + draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', | ||
321 | + 'frame_filter', window.nkjp_examples, frame_class, | ||
322 | + window.lemma_entry, window.lemma_entry); | ||
323 | + $('#examples').load(ajax_lemma_examples, 'id='+window.lemma_id, function(){ | ||
324 | + draw_nkjp_table(document.getElementById("lemma_example_show"), '', | ||
325 | + window.nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_') | ||
326 | + $("tr.NkjpLemmaTableRow").click(function(){selectLemmaNkjpTr(this.id)}); | ||
327 | + HideProgressAnimation(); | ||
328 | + }); | ||
329 | + $("span#new-frames-count").empty(); | ||
330 | + $("span#new-frames-count").append(window.schemas.length); | ||
331 | + $("span#lemma-examples-count").empty(); | ||
332 | + $("span#lemma-examples-count").append(window.nkjp_lemma_examples.length); | ||
333 | + }, | ||
334 | + }); | ||
335 | +} | ||
336 | + | ||
337 | +function loadPrevSchemataAndExamples(hideWaitDialog) { | ||
338 | + $.ajaxJSON({ | ||
339 | + method: 'get', | ||
340 | + url: ajax_get_schemata_and_examples, | ||
341 | + data: { | ||
342 | + lemma_id: window.prev_lemma_id | ||
343 | + }, | ||
344 | + callback: function(result) { | ||
345 | + window.prev_frames = serializedObjToObj(result['schemata']); | ||
346 | + window.prev_nkjp_examples = serializedNkjpToObj(result['examples']); | ||
347 | + draw_filtered_frames(window.prev_frames, 'prev-lemma-tables', 'prev-lemma-table', 'prev_frame_filter', | ||
348 | + window.prev_nkjp_examples, 'InactiveFrameTable', window.prev_lemma_entry); | ||
349 | + if(hideWaitDialog) { | ||
350 | + HideProgressAnimation(); | ||
351 | + } | ||
352 | + }, | ||
353 | + }); | ||
354 | +} | ||
355 | + | ||
548 | // klasa reprezentujaca wersje hasla, do cofania i dodawania | 356 | // klasa reprezentujaca wersje hasla, do cofania i dodawania |
549 | function Lemma_Version(schemas, nkjp_examples, nkjp_lemma_examples) | 357 | function Lemma_Version(schemas, nkjp_examples, nkjp_lemma_examples) |
550 | { | 358 | { |
@@ -877,7 +685,7 @@ function needConfirmation(nkjpInstance) { | @@ -877,7 +685,7 @@ function needConfirmation(nkjpInstance) { | ||
877 | function unpin_nkjp_example(example_tabId) | 685 | function unpin_nkjp_example(example_tabId) |
878 | { | 686 | { |
879 | if(example_tabId != -1 && | 687 | if(example_tabId != -1 && |
880 | - !checkIfSemChangedAndAlert())// && !exampleGotAssignedSemantics(example_tabId)) | 688 | + !checkIfSemChangedAndAlert()) |
881 | { | 689 | { |
882 | example_id = example_tabId.replace('nkjp_', ''); | 690 | example_id = example_tabId.replace('nkjp_', ''); |
883 | for(var i=0; i<window.nkjp_examples.length; i++) | 691 | for(var i=0; i<window.nkjp_examples.length; i++) |
@@ -1014,7 +822,7 @@ function getNkjpLemmaExampleInstance(nkjp_examples, example_id) | @@ -1014,7 +822,7 @@ function getNkjpLemmaExampleInstance(nkjp_examples, example_id) | ||
1014 | } | 822 | } |
1015 | 823 | ||
1016 | function remove_semantic_example(example_id) { | 824 | function remove_semantic_example(example_id) { |
1017 | - if(example_id != -1 && !checkIfSemChangedAndAlert())// && !exampleGotAssignedSemantics(example_id)) | 825 | + if(example_id != -1 && !checkIfSemChangedAndAlert()) |
1018 | { | 826 | { |
1019 | example_id = example_id.replace('nkjp_', ''); | 827 | example_id = example_id.replace('nkjp_', ''); |
1020 | for(var i=0; i<nkjp_examples.length; i++) | 828 | for(var i=0; i<nkjp_examples.length; i++) |
@@ -1074,9 +882,11 @@ function remove_example_from_lemma(lemma_id, example_id, examplesTabId) { | @@ -1074,9 +882,11 @@ function remove_example_from_lemma(lemma_id, example_id, examplesTabId) { | ||
1074 | function addFrameClickEvents(tableClass, tableId) { | 882 | function addFrameClickEvents(tableClass, tableId) { |
1075 | selector = 'table.'+tableClass+'#'+tableId+' td'; | 883 | selector = 'table.'+tableClass+'#'+tableId+' td'; |
1076 | if(tableId === 'new-frame-table') { | 884 | if(tableId === 'new-frame-table') { |
1077 | - $(selector).dblclick(function(e){ | ||
1078 | - e.stopPropagation(); | ||
1079 | - openEditForm(this.id)}); | 885 | + if(tableClass === 'ActiveFrameTable') { |
886 | + $(selector).dblclick(function(e){ | ||
887 | + e.stopPropagation(); | ||
888 | + openEditForm(this.id)}); | ||
889 | + } | ||
1080 | $(selector).click(function(e){ | 890 | $(selector).click(function(e){ |
1081 | e.stopPropagation(); | 891 | e.stopPropagation(); |
1082 | selectTd(this.id)}); | 892 | selectTd(this.id)}); |
@@ -1106,17 +916,17 @@ function draw_frames(schemas, parent, table_name, nkjp_examples, table_class, le | @@ -1106,17 +916,17 @@ function draw_frames(schemas, parent, table_name, nkjp_examples, table_class, le | ||
1106 | first = true; | 916 | first = true; |
1107 | for(var j=0; j<schemas.length; j++) | 917 | for(var j=0; j<schemas.length; j++) |
1108 | { | 918 | { |
1109 | - if(schemas[j].characteristics[3]==aspect_vals[k] && schemas[j].characteristics[0]==reflex_vals[i] && | ||
1110 | - schemas[j].characteristics[1]==neg_vals[l] && schemas[j].characteristics[2]==pred_vals[m]) | 919 | + if(schemas[j].characteristics[3]==aspect_vals[k].value && schemas[j].characteristics[0]==reflex_vals[i].value && |
920 | + schemas[j].characteristics[1]==neg_vals[l].value && schemas[j].characteristics[2]==pred_vals[m].value) | ||
1111 | { | 921 | { |
1112 | if(first) | 922 | if(first) |
1113 | { | 923 | { |
1114 | div = document.createElement('div'); | 924 | div = document.createElement('div'); |
1115 | strong = document.createElement('strong'); | 925 | strong = document.createElement('strong'); |
1116 | - if(reflex_vals[i]) | ||
1117 | - strong.appendChild(document.createTextNode(lemma_entry+" "+reflex_vals[i]+" "+"("+neg_vals[l]+","+pred_vals[m]+","+aspect_vals[k]+"):")); | 926 | + if(reflex_vals[i].value) |
927 | + strong.appendChild(document.createTextNode(lemma_entry+" "+reflex_vals[i].name+" "+"("+neg_vals[l].name+","+pred_vals[m].name+","+aspect_vals[k].name+"):")); | ||
1118 | else | 928 | else |
1119 | - strong.appendChild(document.createTextNode(lemma_entry+" "+"("+neg_vals[l]+","+pred_vals[m]+","+aspect_vals[k]+"):")); | 929 | + strong.appendChild(document.createTextNode(lemma_entry+" "+"("+neg_vals[l].name+","+pred_vals[m].name+","+aspect_vals[k].name+"):")); |
1120 | div.appendChild(strong); | 930 | div.appendChild(strong); |
1121 | parent.appendChild(div); | 931 | parent.appendChild(div); |
1122 | first = false; | 932 | first = false; |
@@ -1526,11 +1336,7 @@ function can_add_position_category(lemma_id) { | @@ -1526,11 +1336,7 @@ function can_add_position_category(lemma_id) { | ||
1526 | } | 1336 | } |
1527 | 1337 | ||
1528 | function openEditForm(id) { | 1338 | function openEditForm(id) { |
1529 | - if(window.can_modify && !checkIfSemChangedAndAlert()) { | ||
1530 | - /*if(schemaGotAssignedSemantics(id)) { | ||
1531 | - semanticsAssignedAlert(); | ||
1532 | - }*/ | ||
1533 | - | 1339 | + if(!checkIfSemChangedAndAlert()) { |
1534 | editedFrameInstance = getFrameInstance(id, window.schemas); | 1340 | editedFrameInstance = getFrameInstance(id, window.schemas); |
1535 | elemInstance = getElementInstance(id, window.schemas); | 1341 | elemInstance = getElementInstance(id, window.schemas); |
1536 | addSyntacticFramesPerm = user_has_perm('dictionary.add_syntactic_frames'); | 1342 | addSyntacticFramesPerm = user_has_perm('dictionary.add_syntactic_frames'); |
@@ -2000,10 +1806,10 @@ function frame_form_submit() { | @@ -2000,10 +1806,10 @@ function frame_form_submit() { | ||
2000 | else { | 1806 | else { |
2001 | edited_frame = getElementInstance(edited_id, schemas); | 1807 | edited_frame = getElementInstance(edited_id, schemas); |
2002 | var old_edited_frame_id = edited_frame['element'].id; | 1808 | var old_edited_frame_id = edited_frame['element'].id; |
2003 | - //edited_frame['element'].id = new_elem_id; tuta zmienilem | ||
2004 | - edited_frame['element'].id = result['id']; | 1809 | + edited_frame['element'].id = new_elem_id; //tutaj zmienilem |
1810 | + //edited_frame['element'].id = result['id']; | ||
2005 | edited_frame_id = edited_frame['element'].id; | 1811 | edited_frame_id = edited_frame['element'].id; |
2006 | - //new_elem_id--; | 1812 | + new_elem_id--; |
2007 | edited_frame['element'].text_rep = result['text_rep']; | 1813 | edited_frame['element'].text_rep = result['text_rep']; |
2008 | edited_frame['element'].characteristics = result['characteristics']; | 1814 | edited_frame['element'].characteristics = result['characteristics']; |
2009 | edited_frame['element'].opinion = result['opinion']; | 1815 | edited_frame['element'].opinion = result['opinion']; |
@@ -3202,125 +3008,6 @@ function escape_regex(str) | @@ -3202,125 +3008,6 @@ function escape_regex(str) | ||
3202 | split('}').join('\\}') | 3008 | split('}').join('\\}') |
3203 | } | 3009 | } |
3204 | 3010 | ||
3205 | -function has_positions(frame, pos_term) | ||
3206 | -{ | ||
3207 | - var alternatives = pos_term.split('|'); | ||
3208 | - for(var h=0; h<alternatives.length; h++) { | ||
3209 | - var allConjsMatch = true; | ||
3210 | - var conjs = alternatives[h].split('&'); | ||
3211 | - | ||
3212 | - for(var i=0; i<conjs.length; i++) { | ||
3213 | - try { | ||
3214 | - var matched_poss = []; | ||
3215 | - var conj = conjs[i].trim(); | ||
3216 | - var regEx = conj; | ||
3217 | - if (regEx.substring(0, 1) == '!') { | ||
3218 | - regEx = regEx.substring(1); | ||
3219 | - } | ||
3220 | - var posRe = new RegExp('^'+escape_regex(regEx)+'$'); | ||
3221 | - matched_poss = $.grep(frame.positions, | ||
3222 | - function(pos){ | ||
3223 | - return pos.text_rep.match(posRe); | ||
3224 | - }); | ||
3225 | - if((matched_poss.length > 0 && conj.startsWith('!')) || | ||
3226 | - (matched_poss.length == 0 && !conj.startsWith('!'))) { | ||
3227 | - allConjsMatch = false; | ||
3228 | - break; | ||
3229 | - } | ||
3230 | - } | ||
3231 | - catch(e) { | ||
3232 | - allConjsMatch = false; | ||
3233 | - break; | ||
3234 | - } | ||
3235 | - } | ||
3236 | - if(allConjsMatch) { | ||
3237 | - return true; | ||
3238 | - } | ||
3239 | - } | ||
3240 | - | ||
3241 | - return false; | ||
3242 | -} | ||
3243 | - | ||
3244 | -function has_arguments(frame, arg_term) { | ||
3245 | - var alternatives = arg_term.split('|'); | ||
3246 | - for(var h=0; h<alternatives.length; h++) { | ||
3247 | - var allConjsMatch = true; | ||
3248 | - var conjs = alternatives[h].split('&'); | ||
3249 | - for(var i=0; i<conjs.length; i++) { | ||
3250 | - try { | ||
3251 | - var matched_args = []; | ||
3252 | - var conj = conjs[i].trim(); | ||
3253 | - var regEx = conj; | ||
3254 | - if (regEx.substring(0, 1) == '!') { | ||
3255 | - regEx = regEx.substring(1); | ||
3256 | - } | ||
3257 | - var argRe = new RegExp('^'+escape_regex(regEx)+'$'); | ||
3258 | - | ||
3259 | - for(var j=0; j<frame.positions.length; j++) { | ||
3260 | - matched_args = $.grep(frame.positions[j].arguments, function(arg) { | ||
3261 | - return arg.text_rep.match(argRe); | ||
3262 | - }); | ||
3263 | - if(matched_args.length > 0) { | ||
3264 | - break; | ||
3265 | - } | ||
3266 | - } | ||
3267 | - if((matched_args.length > 0 && conj.startsWith('!')) || | ||
3268 | - (matched_args.length == 0 && !conj.startsWith('!'))) { | ||
3269 | - allConjsMatch = false; | ||
3270 | - break; | ||
3271 | - } | ||
3272 | - } | ||
3273 | - catch(e) { | ||
3274 | - allConjsMatch = false; | ||
3275 | - break; | ||
3276 | - } | ||
3277 | - } | ||
3278 | - if(allConjsMatch){ | ||
3279 | - return true; | ||
3280 | - } | ||
3281 | - } | ||
3282 | - return false; | ||
3283 | -} | ||
3284 | - | ||
3285 | -function filter_frames(schemas, filter_id) | ||
3286 | -{ | ||
3287 | - var aspect_val = $('#'+filter_id+' #aspect_filter').val(); | ||
3288 | - var reflex_val = $('#'+filter_id+' #reflex_filter').val(); | ||
3289 | - var neg_val = $('#'+filter_id+' #neg_filter').val(); | ||
3290 | - var pred_val = $('#'+filter_id+' #pred_filter').val(); | ||
3291 | - var opinion_val = $('#'+filter_id+' #opinion_filter').val(); | ||
3292 | - var position_val = $('#'+filter_id+' #position_filter').val().trim(); | ||
3293 | - var argument_val = $('#'+filter_id+' #argument_filter').val().trim(); | ||
3294 | - var filtered_frames = new Array(); | ||
3295 | - | ||
3296 | - if(position_val == '.*') | ||
3297 | - position_val = '' | ||
3298 | - if(argument_val == '.*') | ||
3299 | - argument_val = '' | ||
3300 | - | ||
3301 | - for(var i=0; i<schemas.length; i++) | ||
3302 | - { | ||
3303 | - if((schemas[i].characteristics[3] == aspect_val || aspect_val == '*') | ||
3304 | - && (schemas[i].characteristics[0] == reflex_val || reflex_val == '*') | ||
3305 | - && (schemas[i].characteristics[1] == neg_val || neg_val == '*') | ||
3306 | - && (schemas[i].characteristics[2] == pred_val || pred_val == '*') | ||
3307 | - && (schemas[i].opinion == opinion_val || opinion_val == '*')) | ||
3308 | - { | ||
3309 | - frameMatch = false; | ||
3310 | - if(position_val) | ||
3311 | - frameMatch = has_positions(schemas[i], position_val) | ||
3312 | - if(argument_val && (frameMatch || !position_val)) | ||
3313 | - { | ||
3314 | - | ||
3315 | - frameMatch = has_arguments(schemas[i], argument_val) | ||
3316 | - } | ||
3317 | - if(frameMatch || (!argument_val && !position_val)) | ||
3318 | - filtered_frames.push(schemas[i]); | ||
3319 | - } | ||
3320 | - } | ||
3321 | - return filtered_frames; | ||
3322 | -} | ||
3323 | - | ||
3324 | function draw_filtered_frames(schemas, parent_id, table_id, filter_id, nkjp_examples, table_class, lemma_entry) | 3011 | function draw_filtered_frames(schemas, parent_id, table_id, filter_id, nkjp_examples, table_class, lemma_entry) |
3325 | { | 3012 | { |
3326 | var parent = document.getElementById(parent_id); | 3013 | var parent = document.getElementById(parent_id); |
@@ -3781,11 +3468,6 @@ function restore_lemma() { | @@ -3781,11 +3468,6 @@ function restore_lemma() { | ||
3781 | var assignedExamples = []; | 3468 | var assignedExamples = []; |
3782 | if(canModifyFrame(window.selected_id, window.schemas) && | 3469 | if(canModifyFrame(window.selected_id, window.schemas) && |
3783 | !checkIfSemChangedAndAlert()) { | 3470 | !checkIfSemChangedAndAlert()) { |
3784 | - | ||
3785 | - /*if(schemaGotAssignedSemantics(window.selected_id)) { | ||
3786 | - semanticsAssignedAlert(); | ||
3787 | - }*/ | ||
3788 | - | ||
3789 | assignedExamples = gotAssignedExample(nkjp_examples, selected_id, true); | 3471 | assignedExamples = gotAssignedExample(nkjp_examples, selected_id, true); |
3790 | if(assignedExamples.length == 0) { | 3472 | if(assignedExamples.length == 0) { |
3791 | schemas = removeFrameElement(selected_id, schemas); | 3473 | schemas = removeFrameElement(selected_id, schemas); |
@@ -3801,9 +3483,6 @@ function restore_lemma() { | @@ -3801,9 +3483,6 @@ function restore_lemma() { | ||
3801 | function addElement() { | 3483 | function addElement() { |
3802 | if(!checkIfSemChangedAndAlert() && | 3484 | if(!checkIfSemChangedAndAlert() && |
3803 | (window.selected_id == -1 || canModifyFrame(window.selected_id, window.schemas))) { | 3485 | (window.selected_id == -1 || canModifyFrame(window.selected_id, window.schemas))) { |
3804 | - /*if(schemaGotAssignedSemantics(window.selected_id)) { | ||
3805 | - semanticsAssignedAlert(); | ||
3806 | - }*/ | ||
3807 | window.schemas = addFrameElementDialog(window.selected_id, window.schemas); | 3486 | window.schemas = addFrameElementDialog(window.selected_id, window.schemas); |
3808 | } | 3487 | } |
3809 | } | 3488 | } |
@@ -3941,10 +3620,6 @@ function restore_lemma() { | @@ -3941,10 +3620,6 @@ function restore_lemma() { | ||
3941 | if(window.elem_in_bucket && !checkIfSemChangedAndAlert() && | 3620 | if(window.elem_in_bucket && !checkIfSemChangedAndAlert() && |
3942 | (window.selected_id == -1 || | 3621 | (window.selected_id == -1 || |
3943 | canModifyFrame(window.selected_id, window.schemas))) { | 3622 | canModifyFrame(window.selected_id, window.schemas))) { |
3944 | - | ||
3945 | - /*if(schemaGotAssignedSemantics(window.selected_id)) { | ||
3946 | - semanticsAssignedAlert(); | ||
3947 | - }*/ | ||
3948 | pasteFrameElement(selected_id, elem_in_bucket, schemas); | 3623 | pasteFrameElement(selected_id, elem_in_bucket, schemas); |
3949 | } | 3624 | } |
3950 | } | 3625 | } |
@@ -3975,12 +3650,6 @@ function restore_lemma() { | @@ -3975,12 +3650,6 @@ function restore_lemma() { | ||
3975 | canModifyFrame(window.selected_id, window.schemas) && | 3650 | canModifyFrame(window.selected_id, window.schemas) && |
3976 | !checkIfSemChangedAndAlert()) | 3651 | !checkIfSemChangedAndAlert()) |
3977 | { | 3652 | { |
3978 | - /*if(getElementInstance(selected_id, schemas)['type'] != 'frame' && | ||
3979 | - schemaGotAssignedSemantics(selected_id)) { | ||
3980 | - semanticsAssignedAlert(); | ||
3981 | - return; | ||
3982 | - }*/ | ||
3983 | - | ||
3984 | elem_in_bucket = getElementInstance(selected_id, schemas); | 3653 | elem_in_bucket = getElementInstance(selected_id, schemas); |
3985 | 3654 | ||
3986 | var parent_elem = getParentInstance(selected_id, schemas); | 3655 | var parent_elem = getParentInstance(selected_id, schemas); |
@@ -4093,7 +3762,7 @@ function restore_lemma() { | @@ -4093,7 +3762,7 @@ function restore_lemma() { | ||
4093 | 3762 | ||
4094 | function delete_nkjp_example(example_id) | 3763 | function delete_nkjp_example(example_id) |
4095 | { | 3764 | { |
4096 | - if(example_id != -1 && !checkIfSemChangedAndAlert())// && !exampleGotAssignedSemantics(example_id)) | 3765 | + if(example_id != -1 && !checkIfSemChangedAndAlert()) |
4097 | { | 3766 | { |
4098 | example_id = selected_example_id.replace('nkjp_', ''); | 3767 | example_id = selected_example_id.replace('nkjp_', ''); |
4099 | for(var i=0; i<nkjp_examples.length; i++) | 3768 | for(var i=0; i<nkjp_examples.length; i++) |
@@ -4128,7 +3797,7 @@ function restore_lemma() { | @@ -4128,7 +3797,7 @@ function restore_lemma() { | ||
4128 | function delete_all_nkjp_examples(frame_id) | 3797 | function delete_all_nkjp_examples(frame_id) |
4129 | { | 3798 | { |
4130 | if(canModifyFrame(frame_id, window.schemas) && | 3799 | if(canModifyFrame(frame_id, window.schemas) && |
4131 | - !checkIfSemChangedAndAlert())// && !schemaGotAssignedSemantics(frame_id)) | 3800 | + !checkIfSemChangedAndAlert()) |
4132 | { | 3801 | { |
4133 | var new_example_tab = new Array(); | 3802 | var new_example_tab = new Array(); |
4134 | for(var i=0; i<nkjp_examples.length; i++) | 3803 | for(var i=0; i<nkjp_examples.length; i++) |
@@ -4187,7 +3856,7 @@ function restore_lemma() { | @@ -4187,7 +3856,7 @@ function restore_lemma() { | ||
4187 | 3856 | ||
4188 | function modify_nkjp_example(example_id) | 3857 | function modify_nkjp_example(example_id) |
4189 | { | 3858 | { |
4190 | - if(example_id != -1 && !checkIfSemChangedAndAlert())// && !exampleGotAssignedSemantics(example_id)) | 3859 | + if(example_id != -1 && !checkIfSemChangedAndAlert()) |
4191 | { | 3860 | { |
4192 | var example = ''; | 3861 | var example = ''; |
4193 | for(var i=0; i<window.nkjp_examples.length; i++) | 3862 | for(var i=0; i<window.nkjp_examples.length; i++) |
dictionary/static/js/lemma_grid.js
@@ -61,7 +61,6 @@ $(function(){ | @@ -61,7 +61,6 @@ $(function(){ | ||
61 | window['remap']? remap : undefined}, | 61 | window['remap']? remap : undefined}, |
62 | 62 | ||
63 | gridComplete: function() { | 63 | gridComplete: function() { |
64 | - //grid.jqGrid('sortGrid', grid.jqGrid('getGridParam','sortname'), false, grid.jqGrid('getGridParam','sortorder')); | ||
65 | var lemma_id = window.lemma_id; | 64 | var lemma_id = window.lemma_id; |
66 | var lastSelectedId = window.lastSelectedId; | 65 | var lastSelectedId = window.lastSelectedId; |
67 | if(window.activeLemmaPanel == 'preview_lemma') { | 66 | if(window.activeLemmaPanel == 'preview_lemma') { |
@@ -156,7 +155,7 @@ $(function(){ | @@ -156,7 +155,7 @@ $(function(){ | ||
156 | $('#search-panel-dialog').dialog( "option", "title", "Sortowanie haseł:" ).load(ajax_sort_form).dialog('open'); | 155 | $('#search-panel-dialog').dialog( "option", "title", "Sortowanie haseł:" ).load(ajax_sort_form).dialog('open'); |
157 | }); | 156 | }); |
158 | $("#filter-button").click(function(e){ | 157 | $("#filter-button").click(function(e){ |
159 | - $('#search-panel-dialog').dialog( "option", "title", "Filtrowanie haseł:" ).load(ajax_filter_form).dialog('open'); | 158 | + $('#search-panel-dialog').empty().dialog( "option", "title", "Filtrowanie haseł:" ).load(ajax_filter_form).dialog('open'); |
160 | }); | 159 | }); |
161 | 160 | ||
162 | $("#show-columns-button").click(function(){ | 161 | $("#show-columns-button").click(function(){ |
@@ -199,128 +198,6 @@ function createSearchDialog() { | @@ -199,128 +198,6 @@ function createSearchDialog() { | ||
199 | width: 'auto' }); | 198 | width: 'auto' }); |
200 | } | 199 | } |
201 | 200 | ||
202 | -function filter_form_submit() { | ||
203 | - this_form = $(this); | ||
204 | - form_data = this_form.serializeArray(); | ||
205 | - | ||
206 | - var owner = ''; | ||
207 | - var vocabulary = ''; | ||
208 | - var status = ''; | ||
209 | - var filter_frames = false; | ||
210 | - | ||
211 | - form_data = $.map(form_data, function(elem) | ||
212 | - { | ||
213 | - if (elem.name != 'owner' && elem.name != 'vocabulary' && | ||
214 | - elem.name != 'status' && | ||
215 | - elem.name != 'reflex' && elem.name != 'negativity' && elem.name != 'aspect' && | ||
216 | - elem.name != 'has_argument' && elem.name != 'has_position' && | ||
217 | - elem.name != 'approver' && elem.name != 'has_message_from' && | ||
218 | - elem.name != 'filter_frames') | ||
219 | - return elem; | ||
220 | - else { | ||
221 | - if (elem.name == 'owner') | ||
222 | - owner = elem.value; | ||
223 | - else if (elem.name == 'vocabulary') | ||
224 | - vocabulary = elem.value; | ||
225 | - else if (elem.name == 'status') | ||
226 | - status = elem.value; | ||
227 | - else if (elem.name == 'has_message_from') | ||
228 | - has_message_from = elem.value; | ||
229 | - else if (elem.name == 'reflex') | ||
230 | - reflex = elem.value; | ||
231 | - else if (elem.name == 'negativity') | ||
232 | - negativity = elem.value; | ||
233 | - else if (elem.name == 'aspect') | ||
234 | - aspect = elem.value; | ||
235 | - else if (elem.name == 'has_argument') | ||
236 | - has_argument = elem.value; | ||
237 | - else if (elem.name == 'has_position') | ||
238 | - has_position = elem.value; | ||
239 | - else if (elem.name == 'approver') | ||
240 | - approver = elem.value; | ||
241 | - else if (elem.name == 'filter_frames') | ||
242 | - filter_frames = elem.value; | ||
243 | - } | ||
244 | - }); | ||
245 | - | ||
246 | - form_data.push({name: 'owner', value: owner}); | ||
247 | - form_data.push({name: 'vocabulary', value: vocabulary}); | ||
248 | - form_data.push({name: 'status', value: status}); | ||
249 | - form_data.push({name: 'has_message_from', value: has_message_from}); | ||
250 | - form_data.push({name: 'reflex', value: reflex}); | ||
251 | - form_data.push({name: 'negativity', value: negativity}); | ||
252 | - form_data.push({name: 'aspect', value: aspect}); | ||
253 | - form_data.push({name: 'has_argument', value: has_argument}); | ||
254 | - form_data.push({name: 'has_position', value: has_position}); | ||
255 | - form_data.push({name: 'approver', value: approver}); | ||
256 | - form_data.push({name: 'filter_frames', value: filter_frames}); | ||
257 | - | ||
258 | - act_lemma_id = window.prev_lemma_id; | ||
259 | - if(window.activeLemmaPanel != 'preview_lemma') | ||
260 | - act_lemma_id = window.lemma_id; | ||
261 | - | ||
262 | - form_data.push({name: 'lemma_id', value: act_lemma_id}) | ||
263 | - | ||
264 | - $.ajaxJSON({ | ||
265 | - method: 'post', | ||
266 | - url: ajax_filter_form_submit, | ||
267 | - data: { | ||
268 | - form_data: form_data | ||
269 | - }, | ||
270 | - | ||
271 | - callback: function(result) { | ||
272 | - $('#search-panel-dialog').dialog('close'); | ||
273 | - if(result['filter_frames']) | ||
274 | - { | ||
275 | - if(window.activeLemmaPanel == 'preview_lemma') | ||
276 | - { | ||
277 | - window.prev_filter_reflex_val = result['reflex']; | ||
278 | - window.prev_filter_neg_val = result['negativity']; | ||
279 | - window.prev_filter_pred_val = result['predicativity']; | ||
280 | - window.prev_filter_opinion_val = result['opinion']; | ||
281 | - window.prev_filter_aspect_val = result['aspect']; | ||
282 | - window.prev_filter_position_val = result['position']; | ||
283 | - window.prev_filter_argument_val = result['argument']; | ||
284 | - $('#prev_frame_filter #reflex_filter').val(result['reflex']); | ||
285 | - $('#prev_frame_filter #neg_filter').val(result['negativity']); | ||
286 | - $('#prev_frame_filter #pred_filter').val(result['predicativity']); | ||
287 | - $('#prev_frame_filter #opinion_filter').val(result['opinion']); | ||
288 | - $('#prev_frame_filter #aspect_filter').val(result['aspect']); | ||
289 | - $('#prev_frame_filter #argument_filter').val(result['argument']); | ||
290 | - $('#prev_frame_filter #position_filter').val(result['position']); | ||
291 | - $('#prev_frame_filter #argument_filter').trigger('change'); | ||
292 | - } | ||
293 | - else | ||
294 | - { | ||
295 | - window.filter_reflex_val = result['reflex']; | ||
296 | - window.filter_neg_val = result['negativity']; | ||
297 | - window.filter_pred_val = result['predicativity']; | ||
298 | - window.filter_opinion_val = result['opinion']; | ||
299 | - window.filter_aspect_val = result['aspect']; | ||
300 | - window.filter_position_val = result['position']; | ||
301 | - window.filter_argument_val = result['argument']; | ||
302 | - $('#frame_filter #reflex_filter').val(result['reflex']); | ||
303 | - $('#frame_filter #neg_filter').val(result['negativity']); | ||
304 | - $('#frame_filter #pred_filter').val(result['predicativity']); | ||
305 | - $('#frame_filter #opinion_filter').val(result['opinion']); | ||
306 | - $('#frame_filter #aspect_filter').val(result['aspect']); | ||
307 | - $('#frame_filter #argument_filter').val(result['argument']); | ||
308 | - $('#frame_filter #position_filter').val(result['position']); | ||
309 | - $('#frame_filter #argument_filter').trigger('change'); | ||
310 | - } | ||
311 | - } | ||
312 | - grid.trigger("reloadGrid"); | ||
313 | - }, | ||
314 | - error_callback: function(xhr, status, error) { | ||
315 | - error_alert(status + ': ' + error); | ||
316 | - }, | ||
317 | - bad_data_callback: function(result) { | ||
318 | - return true; | ||
319 | - }, | ||
320 | - }); | ||
321 | - return false; | ||
322 | -} | ||
323 | - | ||
324 | function sort_form_submit() { | 201 | function sort_form_submit() { |
325 | this_form = $(this); | 202 | this_form = $(this); |
326 | form_data = this_form.serializeArray(); | 203 | form_data = this_form.serializeArray(); |
dictionary/static/js/lemmas_filtering.js
0 → 100644
1 | +function filter_form_submit() { | ||
2 | + this_form = $(this); | ||
3 | + form_data = this_form.serializeArray(); | ||
4 | + | ||
5 | + var filter_frames = false; | ||
6 | + var actSemArgument = {}; | ||
7 | + var relationalSemPref = {'relation': '', | ||
8 | + 'role': '', | ||
9 | + 'attribute': ''}; | ||
10 | + var semArgumentsAlternatives = []; | ||
11 | + var semArguments = []; | ||
12 | + | ||
13 | + form_data = $.map(form_data, function(elem) | ||
14 | + { | ||
15 | + if (elem.name != 'filter_frames' && !isPartOfSemArgFilter(elem)) { | ||
16 | + return elem; | ||
17 | + } | ||
18 | + else { | ||
19 | + if(elem.name == 'filter_frames') { | ||
20 | + filter_frames = elem.value; | ||
21 | + } | ||
22 | + else if(elem.name == 'negation') { | ||
23 | + if(!jQuery.isEmptyObject(actSemArgument)) { | ||
24 | + semArguments.push(actSemArgument); | ||
25 | + } | ||
26 | + actSemArgument = {'negation': elem.value, | ||
27 | + 'role': '', | ||
28 | + 'attribute': '', | ||
29 | + 'general_prefs': [], | ||
30 | + 'synset_prefs': [], | ||
31 | + 'relational_prefs': []} | ||
32 | + } | ||
33 | + else if(elem.name == 'or') { | ||
34 | + if(!jQuery.isEmptyObject(actSemArgument)) { | ||
35 | + semArguments.push(actSemArgument); | ||
36 | + actSemArgument = {}; | ||
37 | + } | ||
38 | + semArgumentsAlternatives.push(semArguments); | ||
39 | + semArguments = []; | ||
40 | + } | ||
41 | + else if(elem.name == 'role' || elem.name == 'attribute') { | ||
42 | + actSemArgument[elem.name] = elem.value; | ||
43 | + } | ||
44 | + else if(elem.name == 'general_pref' || elem.name == 'synset_pref') { | ||
45 | + actSemArgument[elem.name+'s'].push(elem.value); | ||
46 | + } | ||
47 | + else if(elem.name.startsWith('relational_pref')) { | ||
48 | + if(elem.name.endsWith('relation')) { | ||
49 | + relationalSemPref = {'relation': elem.value, | ||
50 | + 'role': '', | ||
51 | + 'attribute': ''}; | ||
52 | + } | ||
53 | + else if(elem.name.endsWith('role')) { | ||
54 | + relationalSemPref['role'] = elem.value; | ||
55 | + } | ||
56 | + else if(elem.name.endsWith('attribute')) { | ||
57 | + relationalSemPref['attribute'] = elem.value; | ||
58 | + actSemArgument['relational_prefs'].push(relationalSemPref); | ||
59 | + relationalSemPref = {}; | ||
60 | + } | ||
61 | + } | ||
62 | + } | ||
63 | + }); | ||
64 | + if(!jQuery.isEmptyObject(actSemArgument)) { | ||
65 | + semArguments.push(actSemArgument); | ||
66 | + } | ||
67 | + if(semArguments.length > 0) { | ||
68 | + semArgumentsAlternatives.push(semArguments); | ||
69 | + } | ||
70 | + | ||
71 | + | ||
72 | + form_data.push({name: 'filter_frames', value: filter_frames}); | ||
73 | + form_data.push({name: 'sem_arguments', value: semArgumentsAlternatives}); | ||
74 | + | ||
75 | + act_lemma_id = window.prev_lemma_id; | ||
76 | + if(window.activeLemmaPanel != 'preview_lemma') | ||
77 | + act_lemma_id = window.lemma_id; | ||
78 | + | ||
79 | + form_data.push({name: 'lemma_id', value: act_lemma_id}) | ||
80 | + | ||
81 | + $.ajaxJSON({ | ||
82 | + method: 'post', | ||
83 | + url: ajax_filter_form_submit, | ||
84 | + data: { | ||
85 | + form_data: form_data | ||
86 | + }, | ||
87 | + | ||
88 | + callback: function(result) { | ||
89 | + $('#search-panel-dialog').dialog('close'); | ||
90 | + if(result['filter_frames']) | ||
91 | + { | ||
92 | + if(window.activeLemmaPanel == 'preview_lemma') | ||
93 | + { | ||
94 | + window.prev_filter_schema_type_val = result['schema_type']; | ||
95 | + window.prev_filter_reflex_val = result['reflex']; | ||
96 | + window.prev_filter_neg_val = result['negativity']; | ||
97 | + window.prev_filter_pred_val = result['predicativity']; | ||
98 | + window.prev_filter_opinion_val = result['opinion']; | ||
99 | + window.prev_filter_aspect_val = result['aspect']; | ||
100 | + window.prev_filter_position_val = result['position']; | ||
101 | + window.prev_filter_argument_val = result['argument']; | ||
102 | + $('#prev_frame_filter #schema_type_filter').val(result['schema_type']); | ||
103 | + $('#prev_frame_filter #reflex_filter').val(result['reflex']); | ||
104 | + $('#prev_frame_filter #neg_filter').val(result['negativity']); | ||
105 | + $('#prev_frame_filter #pred_filter').val(result['predicativity']); | ||
106 | + $('#prev_frame_filter #opinion_filter').val(result['opinion']); | ||
107 | + $('#prev_frame_filter #aspect_filter').val(result['aspect']); | ||
108 | + $('#prev_frame_filter #argument_filter').val(result['argument']); | ||
109 | + $('#prev_frame_filter #position_filter').val(result['position']); | ||
110 | + $('#prev_frame_filter #argument_filter').trigger('change'); | ||
111 | + } | ||
112 | + else | ||
113 | + { | ||
114 | + window.filter_schema_type_val = result['schema_type']; | ||
115 | + window.filter_reflex_val = result['reflex']; | ||
116 | + window.filter_neg_val = result['negativity']; | ||
117 | + window.filter_pred_val = result['predicativity']; | ||
118 | + window.filter_opinion_val = result['opinion']; | ||
119 | + window.filter_aspect_val = result['aspect']; | ||
120 | + window.filter_position_val = result['position']; | ||
121 | + window.filter_argument_val = result['argument']; | ||
122 | + $('#frame_filter #schema_type_filter').val(result['schema_type']); | ||
123 | + $('#frame_filter #reflex_filter').val(result['reflex']); | ||
124 | + $('#frame_filter #neg_filter').val(result['negativity']); | ||
125 | + $('#frame_filter #pred_filter').val(result['predicativity']); | ||
126 | + $('#frame_filter #opinion_filter').val(result['opinion']); | ||
127 | + $('#frame_filter #aspect_filter').val(result['aspect']); | ||
128 | + $('#frame_filter #argument_filter').val(result['argument']); | ||
129 | + $('#frame_filter #position_filter').val(result['position']); | ||
130 | + $('#frame_filter #argument_filter').trigger('change'); | ||
131 | + } | ||
132 | + } | ||
133 | + grid.trigger("reloadGrid"); | ||
134 | + }, | ||
135 | + error_callback: function(xhr, status, error) { | ||
136 | + error_alert(status + ': ' + error); | ||
137 | + }, | ||
138 | + bad_data_callback: function(result) { | ||
139 | + return true; | ||
140 | + }, | ||
141 | + }); | ||
142 | + return false; | ||
143 | +} | ||
144 | + | ||
145 | +function isPartOfSemArgFilter(field) { | ||
146 | + if(field.name == 'or' || field.name == 'negation' || | ||
147 | + field.name == 'role' || field.name == 'attribute' || | ||
148 | + field.name == 'general_pref' || field.name == 'synset_pref' || | ||
149 | + field.name.startsWith('relational_pref')) { | ||
150 | + return true; | ||
151 | + } | ||
152 | + return false; | ||
153 | +} | ||
154 | + | ||
155 | +function addSemArgFilter(buttonElem) { | ||
156 | + var semArgsElem = $(buttonElem).parent().parent(); | ||
157 | + semArgsElem.append('<p id="sem-argument"></p>'); | ||
158 | + semArgsElem.children().last().load(ajax_sem_arg_form); | ||
159 | +} | ||
160 | + | ||
161 | +function addArgAlternative(buttonElem) { | ||
162 | + var semArgsElem = $(buttonElem).parent().parent(); | ||
163 | + semArgsElem.append('<div><hr class="alterSeparator"><input type="hidden" name="or" value="or"><strong>lub</strong> <button type="button" onclick="removeAlternative(this)">Usuń</button></div>'); | ||
164 | +} | ||
165 | + | ||
166 | +function removeAlternative(buttonElem) { | ||
167 | + $(buttonElem).parent().remove(); | ||
168 | +} | ||
169 | + | ||
170 | +function removeSemArgFilter(buttonElem) { | ||
171 | + $(buttonElem).parent().parent().remove(); | ||
172 | +} | ||
173 | + | ||
174 | +function addSelectivePreferenceFilter(buttonElem) { | ||
175 | + var selPrefsElem = $(buttonElem).parent().parent(); | ||
176 | + var selPrefType = selPrefsElem.find('#id_preference_type').first().val(); | ||
177 | + selPrefsElem.append('<p id="sel-preference"></p>'); | ||
178 | + if(selPrefType === 'general') { | ||
179 | + selPrefsElem.children().last().load(ajax_general_preference_form); | ||
180 | + } | ||
181 | + else if(selPrefType === 'synset') { | ||
182 | + selPrefsElem.children().last().load(ajax_synset_preference_form); | ||
183 | + } | ||
184 | + else if(selPrefType === 'relation') { | ||
185 | + selPrefsElem.children().last().load(ajax_relational_preference_form); | ||
186 | + } | ||
187 | +} | ||
188 | + | ||
189 | +function removeSelPreferenceFilter(buttonElem) { | ||
190 | + $(buttonElem).parent().remove(); | ||
191 | +} |
dictionary/static/js/schemata_filtering.js
0 → 100644
1 | +var schema_type_vals = []; | ||
2 | +var aspect_vals = []; | ||
3 | +var reflex_vals = []; | ||
4 | +var neg_vals = []; | ||
5 | +var pred_vals = []; | ||
6 | +var opinion_vals = []; | ||
7 | +var filter_schema_type_val = '*'; | ||
8 | +var filter_aspect_val = '*'; | ||
9 | +var filter_reflex_val = '*'; | ||
10 | +var filter_neg_val = '*'; | ||
11 | +var filter_pred_val = '*'; | ||
12 | +var filter_opinion_val = '*'; | ||
13 | +var filter_position_val = '.*'; | ||
14 | +var filter_argument_val = '.*'; | ||
15 | +var prev_filter_schema_type_val = '*'; | ||
16 | +var prev_filter_aspect_val = '*'; | ||
17 | +var prev_filter_reflex_val = '*'; | ||
18 | +var prev_filter_neg_val = '*'; | ||
19 | +var prev_filter_pred_val = '*'; | ||
20 | +var prev_filter_opinion_val = '*'; | ||
21 | +var prev_filter_position_val = '.*'; | ||
22 | +var prev_filter_argument_val = '.*'; | ||
23 | + | ||
24 | +function cancel_schemata_filtering() { | ||
25 | + window.filter_position_val = '.*'; | ||
26 | + window.filter_argument_val = '.*'; | ||
27 | + window.filter_schema_type_val = '*'; | ||
28 | + window.filter_aspect_val = '*'; | ||
29 | + window.filter_reflex_val = '*'; | ||
30 | + window.filter_neg_val = '*'; | ||
31 | + window.filter_pred_val = '*'; | ||
32 | + window.filter_opinion_val = '*'; | ||
33 | + $('#frame_filter #argument_filter').val(window.filter_argument_val); | ||
34 | + $('#frame_filter #position_filter').val(window.filter_position_val); | ||
35 | + $('#frame_filter #schema_type_filter').val(window.filter_schema_type_val); | ||
36 | + $('#frame_filter #aspect_filter').val(window.filter_aspect_val); | ||
37 | + $('#frame_filter #reflex_filter').val(window.filter_reflex_val); | ||
38 | + $('#frame_filter #neg_filter').val(window.filter_neg_val); | ||
39 | + $('#frame_filter #pred_filter').val(window.filter_pred_val); | ||
40 | + $('#frame_filter #opinion_filter').val(window.filter_opinion_val); | ||
41 | + $('#frame_filter #argument_filter').trigger('change'); | ||
42 | +} | ||
43 | + | ||
44 | +function cancel_prev_schemata_filtering() { | ||
45 | + window.prev_filter_position_val = '.*'; | ||
46 | + window.prev_filter_argument_val = '.*'; | ||
47 | + window.prev_filter_schema_type_val = '*'; | ||
48 | + window.prev_filter_aspect_val = '*'; | ||
49 | + window.prev_filter_reflex_val = '*'; | ||
50 | + window.prev_filter_neg_val = '*'; | ||
51 | + window.prev_filter_pred_val = '*'; | ||
52 | + window.prev_filter_opinion_val = '*'; | ||
53 | + $('#prev_frame_filter #argument_filter').val(window.prev_filter_argument_val); | ||
54 | + $('#prev_frame_filter #position_filter').val(window.prev_filter_position_val); | ||
55 | + $('#prev_frame_filter #schema_type_filter').val(window.prev_filter_schema_type_val); | ||
56 | + $('#prev_frame_filter #aspect_filter').val(window.prev_filter_aspect_val); | ||
57 | + $('#prev_frame_filter #reflex_filter').val(window.prev_filter_reflex_val); | ||
58 | + $('#prev_frame_filter #neg_filter').val(window.prev_filter_neg_val); | ||
59 | + $('#prev_frame_filter #pred_filter').val(window.prev_filter_pred_val); | ||
60 | + $('#prev_frame_filter #opinion_filter').val(window.prev_filter_opinion_val); | ||
61 | + $('#prev_frame_filter #argument_filter').trigger('change'); | ||
62 | +} | ||
63 | + | ||
64 | +function initiateFrameFilters() { | ||
65 | + $.ajaxJSON({ | ||
66 | + method: 'get', | ||
67 | + url: ajax_get_frame_filter_options, | ||
68 | + data: { | ||
69 | + //message_id: message_id, | ||
70 | + }, | ||
71 | + callback: function(result) { | ||
72 | + window.schema_type_vals = result['schema_type_options']; | ||
73 | + window.aspect_vals = result['aspect_options']; | ||
74 | + window.reflex_vals = result['reflex_options']; | ||
75 | + window.neg_vals = result['neg_options']; | ||
76 | + window.pred_vals = result['pred_options']; | ||
77 | + window.opinion_vals = result['opinion_options']; | ||
78 | + }, | ||
79 | + | ||
80 | + error_callback: function(xhr, status, error) { | ||
81 | + error_alert(status + ': ' + error); | ||
82 | + }, | ||
83 | + }); | ||
84 | +} | ||
85 | + | ||
86 | +function filter_update(id) { | ||
87 | + if(id == 'frame_filter') | ||
88 | + { | ||
89 | + window.filter_schema_type_val = $('#frame_filter #schema_type_filter').val(); | ||
90 | + window.filter_aspect_val = $('#frame_filter #aspect_filter').val(); | ||
91 | + window.filter_reflex_val = $('#frame_filter #reflex_filter').val(); | ||
92 | + window.filter_neg_val = $('#frame_filter #neg_filter').val(); | ||
93 | + window.filter_pred_val = $('#frame_filter #pred_filter').val(); | ||
94 | + window.filter_opinion_val = $('#frame_filter #opinion_filter').val(); | ||
95 | + window.filter_position_val = $('#frame_filter #position_filter').val(); | ||
96 | + window.filter_argument_val = $('#frame_filter #argument_filter').val(); | ||
97 | + } | ||
98 | + else if(id == 'prev_frame_filter') | ||
99 | + { | ||
100 | + window.prev_filter_schema_type_val = $('#prev_frame_filter #schema_type_filter').val(); | ||
101 | + window.prev_filter_aspect_val = $('#prev_frame_filter #aspect_filter').val(); | ||
102 | + window.prev_filter_reflex_val = $('#prev_frame_filter #reflex_filter').val(); | ||
103 | + window.prev_filter_neg_val = $('#prev_frame_filter #neg_filter').val(); | ||
104 | + window.prev_filter_pred_val = $('#prev_frame_filter #pred_filter').val(); | ||
105 | + window.prev_filter_opinion_val = $('#prev_frame_filter #opinion_filter').val(); | ||
106 | + window.prev_filter_position_val = $('#prev_frame_filter #position_filter').val(); | ||
107 | + window.prev_filter_argument_val = $('#prev_frame_filter #argument_filter').val(); | ||
108 | + } | ||
109 | +} | ||
110 | + | ||
111 | +function draw_frames_filter(id) { | ||
112 | + var frame_filter = document.getElementById(id); | ||
113 | + | ||
114 | + p = document.createElement('p'); | ||
115 | + text = document.createTextNode("Typ schematu: "); | ||
116 | + p.appendChild(text); | ||
117 | + var select = document.createElement('select'); | ||
118 | + select.setAttribute('id', 'schema_type_filter'); | ||
119 | + select.setAttribute('name', 'schema_type'); | ||
120 | + p.appendChild(select); | ||
121 | + for(var i=0; i<schema_type_vals.length; i++) | ||
122 | + { | ||
123 | + var option = document.createElement('option'); | ||
124 | + option.setAttribute('value', schema_type_vals[i].value); | ||
125 | + option.appendChild(document.createTextNode(schema_type_vals[i].name)); | ||
126 | + select.appendChild(option); | ||
127 | + } | ||
128 | + frame_filter.appendChild(p); | ||
129 | + | ||
130 | + p = document.createElement('p'); | ||
131 | + text = document.createTextNode("Aspekt: "); | ||
132 | + p.appendChild(text); | ||
133 | + var select = document.createElement('select'); | ||
134 | + select.setAttribute('id', 'aspect_filter'); | ||
135 | + select.setAttribute('name', 'ASPEKT'); | ||
136 | + p.appendChild(select); | ||
137 | + for(var i=0; i<aspect_vals.length; i++) | ||
138 | + { | ||
139 | + var option = document.createElement('option'); | ||
140 | + option.setAttribute('value', aspect_vals[i].value); | ||
141 | + option.appendChild(document.createTextNode(aspect_vals[i].name)); | ||
142 | + select.appendChild(option); | ||
143 | + } | ||
144 | + frame_filter.appendChild(p); | ||
145 | + | ||
146 | + p = document.createElement('p'); | ||
147 | + text = document.createTextNode("Zwrotność: "); | ||
148 | + p.appendChild(text); | ||
149 | + select = document.createElement('select'); | ||
150 | + select.setAttribute('id', 'reflex_filter'); | ||
151 | + select.setAttribute('name', 'ZWROTNOSC'); | ||
152 | + p.appendChild(select); | ||
153 | + for(var i=0; i<reflex_vals.length; i++) | ||
154 | + { | ||
155 | + var option = document.createElement('option'); | ||
156 | + option.setAttribute('value', reflex_vals[i].value); | ||
157 | + option.appendChild(document.createTextNode(reflex_vals[i].name)); | ||
158 | + select.appendChild(option); | ||
159 | + } | ||
160 | + frame_filter.appendChild(p); | ||
161 | + | ||
162 | + p = document.createElement('p'); | ||
163 | + text = document.createTextNode("Negatywność: "); | ||
164 | + p.appendChild(text); | ||
165 | + select = document.createElement('select'); | ||
166 | + select.setAttribute('id', 'neg_filter'); | ||
167 | + select.setAttribute('name', 'NEGATYWNOŚĆ'); | ||
168 | + p.appendChild(select); | ||
169 | + for(var i=0; i<neg_vals.length; i++) | ||
170 | + { | ||
171 | + var option = document.createElement('option'); | ||
172 | + option.setAttribute('value', neg_vals[i].value); | ||
173 | + option.appendChild(document.createTextNode(neg_vals[i].name)); | ||
174 | + select.appendChild(option); | ||
175 | + } | ||
176 | + frame_filter.appendChild(p); | ||
177 | + | ||
178 | + p = document.createElement('p'); | ||
179 | + text = document.createTextNode("Predykatywność: "); | ||
180 | + p.appendChild(text); | ||
181 | + select = document.createElement('select'); | ||
182 | + select.setAttribute('id', 'pred_filter'); | ||
183 | + select.setAttribute('name', 'PREDYKATYWNOŚĆ'); | ||
184 | + p.appendChild(select); | ||
185 | + for(var i=0; i<pred_vals.length; i++) | ||
186 | + { | ||
187 | + var option = document.createElement('option'); | ||
188 | + option.setAttribute('value', pred_vals[i].value); | ||
189 | + option.appendChild(document.createTextNode(pred_vals[i].name)); | ||
190 | + select.appendChild(option); | ||
191 | + } | ||
192 | + frame_filter.appendChild(p); | ||
193 | + | ||
194 | + p = document.createElement('p'); | ||
195 | + text = document.createTextNode("Opinia: "); | ||
196 | + p.appendChild(text); | ||
197 | + select = document.createElement('select'); | ||
198 | + select.setAttribute('id', 'opinion_filter'); | ||
199 | + select.setAttribute('name', 'OPINIA'); | ||
200 | + p.appendChild(select); | ||
201 | + for(var i=0; i<opinion_vals.length; i++) | ||
202 | + { | ||
203 | + var option = document.createElement('option'); | ||
204 | + option.setAttribute('value', opinion_vals[i].value); | ||
205 | + option.appendChild(document.createTextNode(opinion_vals[i].name)); | ||
206 | + select.appendChild(option); | ||
207 | + } | ||
208 | + frame_filter.appendChild(p); | ||
209 | + | ||
210 | + p = document.createElement('p'); | ||
211 | + text = document.createTextNode("Typ frazy: "); | ||
212 | + p.appendChild(text); | ||
213 | + select = document.createElement('input'); | ||
214 | + select.setAttribute('id', 'argument_filter'); | ||
215 | + select.setAttribute('name', 'ARGUMENT'); | ||
216 | + p.appendChild(select); | ||
217 | + frame_filter.appendChild(p); | ||
218 | + | ||
219 | + p = document.createElement('p'); | ||
220 | + text = document.createTextNode("Pozycja: "); | ||
221 | + p.appendChild(text); | ||
222 | + select = document.createElement('input'); | ||
223 | + select.setAttribute('id', 'position_filter'); | ||
224 | + select.setAttribute('name', 'POZYCJA'); | ||
225 | + p.appendChild(select); | ||
226 | + frame_filter.appendChild(p); | ||
227 | + | ||
228 | + if(id == 'frame_filter') | ||
229 | + { | ||
230 | + $('#frame_filter #schema_type_filter').val(window.filter_schema_type_val); | ||
231 | + $('#frame_filter #aspect_filter').val(window.filter_aspect_val); | ||
232 | + $('#frame_filter #reflex_filter').val(window.filter_reflex_val); | ||
233 | + $('#frame_filter #neg_filter').val(window.filter_neg_val); | ||
234 | + $('#frame_filter #pred_filter').val(window.filter_pred_val); | ||
235 | + $('#frame_filter #opinion_filter').val(window.filter_opinion_val); | ||
236 | + $('#frame_filter #position_filter').val(window.filter_position_val); | ||
237 | + $('#frame_filter #argument_filter').val(window.filter_argument_val); | ||
238 | + } | ||
239 | + else if(id == 'prev_frame_filter') | ||
240 | + { | ||
241 | + $('#prev_frame_filter #schema_type_filter').val(window.prev_filter_schema_type_val); | ||
242 | + $('#prev_frame_filter #aspect_filter').val(window.prev_filter_aspect_val); | ||
243 | + $('#prev_frame_filter #reflex_filter').val(window.prev_filter_reflex_val); | ||
244 | + $('#prev_frame_filter #neg_filter').val(window.prev_filter_neg_val); | ||
245 | + $('#prev_frame_filter #pred_filter').val(window.prev_filter_pred_val); | ||
246 | + $('#prev_frame_filter #opinion_filter').val(window.prev_filter_opinion_val); | ||
247 | + $('#prev_frame_filter #position_filter').val(window.prev_filter_position_val); | ||
248 | + $('#prev_frame_filter #argument_filter').val(window.prev_filter_argument_val); | ||
249 | + } | ||
250 | + | ||
251 | + //attach autocomplete | ||
252 | + $('#' + id + ' #argument_filter').autocomplete({ | ||
253 | + // triggers when selection performed | ||
254 | + select: function(event, ui){ | ||
255 | + filter_update(id); | ||
256 | + }, | ||
257 | + //define callback to format results | ||
258 | + source: function(req, add){ | ||
259 | + //pass request to server | ||
260 | + $.getJSON(ajax_argument_lookup, req, function(data) { | ||
261 | + //create array for response objects | ||
262 | + var suggestions = []; | ||
263 | + $.each(data['result'], function(i, val){ | ||
264 | + suggestions.push(val[0]); | ||
265 | + }); | ||
266 | + //pass array to callback | ||
267 | + add(suggestions); | ||
268 | + }); | ||
269 | + }, | ||
270 | + }); | ||
271 | + $('#' + id + ' #position_filter').autocomplete({ | ||
272 | + // triggers when selection performed | ||
273 | + select: function(event, ui){ | ||
274 | + filter_update(id); | ||
275 | + }, | ||
276 | + //define callback to format results | ||
277 | + source: function(req, add){ | ||
278 | + //pass request to server | ||
279 | + $.getJSON(ajax_position_lookup, req, function(data) { | ||
280 | + //create array for response objects | ||
281 | + var suggestions = []; | ||
282 | + $.each(data['result'], function(i, val){ | ||
283 | + suggestions.push(val[0]); | ||
284 | + }); | ||
285 | + //pass array to callback | ||
286 | + add(suggestions); | ||
287 | + }); | ||
288 | + }, | ||
289 | + }); | ||
290 | +} | ||
291 | + | ||
292 | +function filter_frames(schemas, filter_id) { | ||
293 | + var schema_type_val = $('#'+filter_id+' #schema_type_filter').val(); | ||
294 | + var aspect_val = $('#'+filter_id+' #aspect_filter').val(); | ||
295 | + var reflex_val = $('#'+filter_id+' #reflex_filter').val(); | ||
296 | + var neg_val = $('#'+filter_id+' #neg_filter').val(); | ||
297 | + var pred_val = $('#'+filter_id+' #pred_filter').val(); | ||
298 | + var opinion_val = $('#'+filter_id+' #opinion_filter').val(); | ||
299 | + var position_val = $('#'+filter_id+' #position_filter').val().trim(); | ||
300 | + var argument_val = $('#'+filter_id+' #argument_filter').val().trim(); | ||
301 | + var filtered_frames = new Array(); | ||
302 | + | ||
303 | + if(position_val == '.*') | ||
304 | + position_val = '' | ||
305 | + if(argument_val == '.*') | ||
306 | + argument_val = '' | ||
307 | + | ||
308 | + for(var i=0; i<schemas.length; i++) | ||
309 | + { | ||
310 | + if((schemas[i].characteristics[3] == aspect_val || aspect_val == '*') | ||
311 | + && (schemas[i].characteristics[0] == reflex_val || reflex_val == '*') | ||
312 | + && (schemas[i].characteristics[1] == neg_val || neg_val == '*') | ||
313 | + && (schemas[i].characteristics[2] == pred_val || pred_val == '*') | ||
314 | + && (schemas[i].opinion == opinion_val || opinion_val == '*') | ||
315 | + && schema_type_valid(schemas[i], schema_type_val)) | ||
316 | + { | ||
317 | + frameMatch = false; | ||
318 | + if(position_val) | ||
319 | + frameMatch = has_positions(schemas[i], position_val) | ||
320 | + if(argument_val && (frameMatch || !position_val)) | ||
321 | + { | ||
322 | + | ||
323 | + frameMatch = has_arguments(schemas[i], argument_val) | ||
324 | + } | ||
325 | + if(frameMatch || (!argument_val && !position_val)) | ||
326 | + filtered_frames.push(schemas[i]); | ||
327 | + } | ||
328 | + } | ||
329 | + return filtered_frames; | ||
330 | +} | ||
331 | + | ||
332 | +function has_positions(frame, pos_term) { | ||
333 | + var alternatives = pos_term.split('|'); | ||
334 | + for(var h=0; h<alternatives.length; h++) { | ||
335 | + var allConjsMatch = true; | ||
336 | + var conjs = alternatives[h].split('&'); | ||
337 | + | ||
338 | + for(var i=0; i<conjs.length; i++) { | ||
339 | + try { | ||
340 | + var matched_poss = []; | ||
341 | + var conj = conjs[i].trim(); | ||
342 | + var regEx = conj; | ||
343 | + if (regEx.substring(0, 1) == '!') { | ||
344 | + regEx = regEx.substring(1); | ||
345 | + } | ||
346 | + var posRe = new RegExp('^'+escape_regex(regEx)+'$'); | ||
347 | + matched_poss = $.grep(frame.positions, | ||
348 | + function(pos){ | ||
349 | + return pos.text_rep.match(posRe); | ||
350 | + }); | ||
351 | + if((matched_poss.length > 0 && conj.startsWith('!')) || | ||
352 | + (matched_poss.length == 0 && !conj.startsWith('!'))) { | ||
353 | + allConjsMatch = false; | ||
354 | + break; | ||
355 | + } | ||
356 | + } | ||
357 | + catch(e) { | ||
358 | + allConjsMatch = false; | ||
359 | + break; | ||
360 | + } | ||
361 | + } | ||
362 | + if(allConjsMatch) { | ||
363 | + return true; | ||
364 | + } | ||
365 | + } | ||
366 | + | ||
367 | + return false; | ||
368 | +} | ||
369 | + | ||
370 | +function has_arguments(frame, arg_term) { | ||
371 | + var alternatives = arg_term.split('|'); | ||
372 | + for(var h=0; h<alternatives.length; h++) { | ||
373 | + var allConjsMatch = true; | ||
374 | + var conjs = alternatives[h].split('&'); | ||
375 | + for(var i=0; i<conjs.length; i++) { | ||
376 | + try { | ||
377 | + var matched_args = []; | ||
378 | + var conj = conjs[i].trim(); | ||
379 | + var regEx = conj; | ||
380 | + if (regEx.substring(0, 1) == '!') { | ||
381 | + regEx = regEx.substring(1); | ||
382 | + } | ||
383 | + var argRe = new RegExp('^'+escape_regex(regEx)+'$'); | ||
384 | + | ||
385 | + for(var j=0; j<frame.positions.length; j++) { | ||
386 | + matched_args = $.grep(frame.positions[j].arguments, function(arg) { | ||
387 | + return arg.text_rep.match(argRe); | ||
388 | + }); | ||
389 | + if(matched_args.length > 0) { | ||
390 | + break; | ||
391 | + } | ||
392 | + } | ||
393 | + if((matched_args.length > 0 && conj.startsWith('!')) || | ||
394 | + (matched_args.length == 0 && !conj.startsWith('!'))) { | ||
395 | + allConjsMatch = false; | ||
396 | + break; | ||
397 | + } | ||
398 | + } | ||
399 | + catch(e) { | ||
400 | + allConjsMatch = false; | ||
401 | + break; | ||
402 | + } | ||
403 | + } | ||
404 | + if(allConjsMatch){ | ||
405 | + return true; | ||
406 | + } | ||
407 | + } | ||
408 | + return false; | ||
409 | +} | ||
410 | + | ||
411 | +function schema_type_valid(schema, filter_option) { | ||
412 | + if(filter_option == '*') return true; | ||
413 | + else if(filter_option == 'normal' && !schema.is_phraseologic) return true; | ||
414 | + else if(filter_option == 'phraseologic' && schema.is_phraseologic) return true; | ||
415 | + else return false; | ||
416 | +} |
dictionary/static/js/semantics_coupling.js
1 | -function schemaGotAssignedSemantics(element_id) { | ||
2 | - var semanticsAssigned = true; | ||
3 | - var id_map = parseId(element_id); | ||
4 | - var schema_id = id_map['frame_id']; | ||
5 | - if(schema_id < 0) { | ||
6 | - semanticsAssigned = false; | ||
7 | - } | ||
8 | - else { | ||
9 | - jQuery.ajax({ | ||
10 | - type: 'get', | ||
11 | - url: ajax_schema_got_assigned_semantics, | ||
12 | - data: {lemma_id: window.lemma_id, | ||
13 | - schema_id: schema_id}, | ||
14 | - success: function(result) { | ||
15 | - semanticsAssigned = result['got_assigned_semantics']; | ||
16 | - }, | ||
17 | - async: false | ||
18 | - }); | ||
19 | - } | ||
20 | - return semanticsAssigned; | ||
21 | -} | ||
22 | - | ||
23 | function semanticsAssignedAlert() { | 1 | function semanticsAssignedAlert() { |
24 | error_alert('Działaj rozważnie, element jest wykorzystywany w ramach semantycznych.'); | 2 | error_alert('Działaj rozważnie, element jest wykorzystywany w ramach semantycznych.'); |
25 | } | 3 | } |
26 | 4 | ||
27 | -function exampleGotAssignedSemantics(example_tab_id) | ||
28 | -{ | ||
29 | - var semanticsAssigned = true; | ||
30 | - var example_id = example_tab_id.replace('nkjp_', ''); | ||
31 | - if (example_id < 0) { | ||
32 | - semanticsAssigned = false; | ||
33 | - } | ||
34 | - else { | ||
35 | - jQuery.ajax({ | ||
36 | - type: 'get', | ||
37 | - url: ajax_example_got_assigned_semantics, | ||
38 | - data: {lemma_id: window.lemma_id, | ||
39 | - example_id: example_id}, | ||
40 | - success: function(result) { | ||
41 | - semanticsAssigned = result['got_assigned_semantics']; | ||
42 | - }, | ||
43 | - async: false | ||
44 | - }); | ||
45 | - } | ||
46 | - return semanticsAssigned; | ||
47 | -} | ||
48 | - | ||
49 | function semanticsAssignedExampleAlert() { | 5 | function semanticsAssignedExampleAlert() { |
50 | error_alert('Działaj rozważnie, przykład jest wykorzystywany w ramach semantycznych.'); | 6 | error_alert('Działaj rozważnie, przykład jest wykorzystywany w ramach semantycznych.'); |
51 | } | 7 | } |
dictionary/teixml.py
1 | #-*- coding:utf-8 -*- | 1 | #-*- coding:utf-8 -*- |
2 | from semantics.models import LexicalUnitExamples | 2 | from semantics.models import LexicalUnitExamples |
3 | 3 | ||
4 | -#Copyright (c) 2015, Bartłomiej Nitoń | ||
5 | -#All rights reserved. | ||
6 | - | ||
7 | -#Redistribution and use in source and binary forms, with or without modification, are permitted provided | ||
8 | -#that the following conditions are met: | ||
9 | - | ||
10 | -# Redistributions of source code must retain the above copyright notice, this list of conditions and | ||
11 | -# the following disclaimer. | ||
12 | -# Redistributions in binary form must reproduce the above copyright notice, this list of conditions | ||
13 | -# and the following disclaimer in the documentation and/or other materials provided with the distribution. | ||
14 | - | ||
15 | -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED | ||
16 | -# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | ||
17 | -# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | ||
18 | -# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | ||
19 | -# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
20 | -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
21 | -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
22 | -# POSSIBILITY OF SUCH DAMAGE. | ||
23 | - | ||
24 | -''' | ||
25 | -File with functions responsible for creating TEI xml. | ||
26 | -''' | ||
27 | - | ||
28 | import datetime | 4 | import datetime |
29 | -import operator | ||
30 | 5 | ||
31 | from lxml import etree | 6 | from lxml import etree |
32 | from xml.sax.saxutils import escape | 7 | from xml.sax.saxutils import escape |
33 | 8 | ||
34 | -from dictionary.models import Atribute_Model, Frame_Opinion_Value, Frame_Char_Model, \ | ||
35 | - PositionCategory, Argument_Model, \ | 9 | +from dictionary.models import Atribute_Model, \ |
36 | sortArguments, sortatributes, sortPositions, sort_positions | 10 | sortArguments, sortatributes, sortPositions, sort_positions |
37 | 11 | ||
38 | XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace' | 12 | XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace' |
@@ -41,7 +15,6 @@ XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace' | @@ -41,7 +15,6 @@ XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace' | ||
41 | def createteixml(outpath, lemmas, frame_opinion_values): | 15 | def createteixml(outpath, lemmas, frame_opinion_values): |
42 | root = write_root() | 16 | root = write_root() |
43 | write_header(root) | 17 | write_header(root) |
44 | - #lemmas = lemmas.filter(entry=u'brnąć') | ||
45 | write_entries(root, lemmas, frame_opinion_values) | 18 | write_entries(root, lemmas, frame_opinion_values) |
46 | with open(outpath, 'w') as output_file: | 19 | with open(outpath, 'w') as output_file: |
47 | output_file.write(etree.tostring(root, pretty_print=True, | 20 | output_file.write(etree.tostring(root, pretty_print=True, |
@@ -92,9 +65,10 @@ def write_entry(body_elem, lemma, frame_opinions, frame_opinion_values): | @@ -92,9 +65,10 @@ def write_entry(body_elem, lemma, frame_opinions, frame_opinion_values): | ||
92 | 65 | ||
93 | write_syntactic_layer(entry_elem, lemma, frame_opinions, frame_opinion_values) | 66 | write_syntactic_layer(entry_elem, lemma, frame_opinions, frame_opinion_values) |
94 | write_examples_layer(entry_elem, lemma) | 67 | write_examples_layer(entry_elem, lemma) |
95 | - write_semantic_layer(entry_elem, lemma) | ||
96 | - write_meanings_layer(entry_elem, lemma) | ||
97 | - write_connections_layer(entry_elem, lemma) | 68 | + if lemma.semantics_ready(): |
69 | + write_semantic_layer(entry_elem, lemma) | ||
70 | + write_meanings_layer(entry_elem, lemma) | ||
71 | + write_connections_layer(entry_elem, lemma) | ||
98 | 72 | ||
99 | def write_syntactic_layer(entry_elem, lemma, frame_opinions, frame_opinion_values): | 73 | def write_syntactic_layer(entry_elem, lemma, frame_opinions, frame_opinion_values): |
100 | synt_layer_fs_elem = etree.SubElement(entry_elem, 'fs') | 74 | synt_layer_fs_elem = etree.SubElement(entry_elem, 'fs') |
@@ -113,18 +87,18 @@ def write_syntactic_layer(entry_elem, lemma, frame_opinions, frame_opinion_value | @@ -113,18 +87,18 @@ def write_syntactic_layer(entry_elem, lemma, frame_opinions, frame_opinion_value | ||
113 | pred_val=pred_val, | 87 | pred_val=pred_val, |
114 | aspect_val=aspect_val).order_by('text_rep') | 88 | aspect_val=aspect_val).order_by('text_rep') |
115 | for frame in matchingframes: | 89 | for frame in matchingframes: |
116 | - if (not frame_opinion_values.exists() or | ||
117 | - frame_opinions.filter(frame=frame).exists()): | 90 | + if not lemma.phraseology_ready() and frame.phraseologic: |
91 | + continue | ||
92 | + if (not frame_opinion_values.exists() or frame_opinions.filter(frame=frame).exists()): | ||
118 | write_schema(vColl_elem, frame, lemma) | 93 | write_schema(vColl_elem, frame, lemma) |
119 | 94 | ||
120 | def write_schema(parent_elem, schema, lemma): | 95 | def write_schema(parent_elem, schema, lemma): |
121 | - | ||
122 | schema_xml_id = 'wal_%s.%s-sch' % (str(lemma.entry_obj.id), str(schema.id)) | 96 | schema_xml_id = 'wal_%s.%s-sch' % (str(lemma.entry_obj.id), str(schema.id)) |
123 | 97 | ||
124 | schema_fs_elem = etree.SubElement(parent_elem, 'fs') | 98 | schema_fs_elem = etree.SubElement(parent_elem, 'fs') |
125 | schema_fs_elem.attrib[etree.QName(XML_NAMESPACE, 'id')] = schema_xml_id | 99 | schema_fs_elem.attrib[etree.QName(XML_NAMESPACE, 'id')] = schema_xml_id |
126 | schema_fs_elem.attrib['type'] = 'schema' | 100 | schema_fs_elem.attrib['type'] = 'schema' |
127 | - # opinia o ramce | 101 | + # opinia o schemacie |
128 | try: | 102 | try: |
129 | schema_opinion = lemma.frame_opinions.filter(frame=schema).all()[0].value.short | 103 | schema_opinion = lemma.frame_opinions.filter(frame=schema).all()[0].value.short |
130 | except IndexError: | 104 | except IndexError: |
@@ -420,20 +394,24 @@ def write_examples_layer(parent_elem, lemma): | @@ -420,20 +394,24 @@ def write_examples_layer(parent_elem, lemma): | ||
420 | write_examples_feature(vColl_elem, lemma) | 394 | write_examples_feature(vColl_elem, lemma) |
421 | 395 | ||
422 | def write_examples_feature(parent_elem, lemma): | 396 | def write_examples_feature(parent_elem, lemma): |
423 | - entry = lemma.entry_obj | ||
424 | for example in lemma.nkjp_examples.order_by('opinion__priority').all(): | 397 | for example in lemma.nkjp_examples.order_by('opinion__priority').all(): |
425 | - write_example(parent_elem, entry, example) | 398 | + if not lemma.phraseology_ready() and example.frame.phraseologic: |
399 | + pass | ||
400 | + else: | ||
401 | + write_example(parent_elem, lemma, example) | ||
426 | for example in lemma.lemma_nkjp_examples.order_by('opinion__priority').all(): | 402 | for example in lemma.lemma_nkjp_examples.order_by('opinion__priority').all(): |
427 | - write_example(parent_elem, entry, example) | 403 | + write_example(parent_elem, lemma, example) |
428 | 404 | ||
429 | -def write_example(parent_elem, entry, example): | 405 | +def write_example(parent_elem, lemma, example): |
406 | + entry = lemma.entry_obj | ||
430 | example_xml_id = u'wal_%s.%s-exm' % (str(entry.id), str(example.id)) | 407 | example_xml_id = u'wal_%s.%s-exm' % (str(entry.id), str(example.id)) |
431 | 408 | ||
432 | example_fs_elem = etree.SubElement(parent_elem, 'fs') | 409 | example_fs_elem = etree.SubElement(parent_elem, 'fs') |
433 | example_fs_elem.attrib[etree.QName(XML_NAMESPACE, 'id')] = example_xml_id | 410 | example_fs_elem.attrib[etree.QName(XML_NAMESPACE, 'id')] = example_xml_id |
434 | example_fs_elem.attrib['type'] = 'example' | 411 | example_fs_elem.attrib['type'] = 'example' |
435 | 412 | ||
436 | - get_and_write_meaning_link(example_fs_elem, entry, example) | 413 | + if lemma.semantics_ready(): |
414 | + get_and_write_meaning_link(example_fs_elem, entry, example) | ||
437 | write_phrases_links(example_fs_elem, entry, example) | 415 | write_phrases_links(example_fs_elem, entry, example) |
438 | 416 | ||
439 | sentence_f_elem = etree.SubElement(example_fs_elem, 'f') | 417 | sentence_f_elem = etree.SubElement(example_fs_elem, 'f') |
@@ -441,7 +419,6 @@ def write_example(parent_elem, entry, example): | @@ -441,7 +419,6 @@ def write_example(parent_elem, entry, example): | ||
441 | sentence_content_elem = etree.SubElement(sentence_f_elem, 'string') | 419 | sentence_content_elem = etree.SubElement(sentence_f_elem, 'string') |
442 | sentence_content_elem.text = escape(example.sentence) | 420 | sentence_content_elem.text = escape(example.sentence) |
443 | 421 | ||
444 | - # trzeba do zrodel dodac nazwy symboliczne | ||
445 | source_f_elem = etree.SubElement(example_fs_elem, 'f') | 422 | source_f_elem = etree.SubElement(example_fs_elem, 'f') |
446 | source_f_elem.attrib['name'] = 'source' | 423 | source_f_elem.attrib['name'] = 'source' |
447 | source_symbol_elem = etree.SubElement(source_f_elem, 'symbol') | 424 | source_symbol_elem = etree.SubElement(source_f_elem, 'symbol') |
@@ -460,8 +437,9 @@ def write_example(parent_elem, entry, example): | @@ -460,8 +437,9 @@ def write_example(parent_elem, entry, example): | ||
460 | 437 | ||
461 | def get_and_write_meaning_link(parent_elem, entry, example): | 438 | def get_and_write_meaning_link(parent_elem, entry, example): |
462 | try: | 439 | try: |
440 | + entry_lex_units = entry.meanings.all() | ||
463 | lex_unit_example = LexicalUnitExamples.objects.get(example=example, | 441 | lex_unit_example = LexicalUnitExamples.objects.get(example=example, |
464 | - lexical_unit__base=entry.name) | 442 | + lexical_unit__in=entry_lex_units) |
465 | meaning = lex_unit_example.lexical_unit | 443 | meaning = lex_unit_example.lexical_unit |
466 | meaning_xml_id = u'#wal_%s.%s-mng' % (str(entry.id), str(meaning.id)) | 444 | meaning_xml_id = u'#wal_%s.%s-mng' % (str(entry.id), str(meaning.id)) |
467 | 445 | ||
@@ -518,9 +496,19 @@ def write_frame_fs(parent_elem, entry, frame): | @@ -518,9 +496,19 @@ def write_frame_fs(parent_elem, entry, frame): | ||
518 | frame_fs_elem.attrib[etree.QName(XML_NAMESPACE, 'id')] = frame_xml_id | 496 | frame_fs_elem.attrib[etree.QName(XML_NAMESPACE, 'id')] = frame_xml_id |
519 | frame_fs_elem.attrib['type'] = 'frame' | 497 | frame_fs_elem.attrib['type'] = 'frame' |
520 | 498 | ||
499 | + write_frame_opinion(frame_fs_elem, frame) | ||
521 | write_frame_meanings(frame_fs_elem, entry, frame) | 500 | write_frame_meanings(frame_fs_elem, entry, frame) |
522 | write_frame_arguments(frame_fs_elem, entry, frame) | 501 | write_frame_arguments(frame_fs_elem, entry, frame) |
523 | 502 | ||
503 | +def write_frame_opinion(parent_elem, frame): | ||
504 | + frame_opinion = 'unk' | ||
505 | + if frame.opinion_selected(): | ||
506 | + frame_opinion = frame.opinion.short | ||
507 | + opinion_f_elem = etree.SubElement(parent_elem, 'f') | ||
508 | + opinion_f_elem.attrib['name'] = 'opinion' | ||
509 | + opinion_symbol = etree.SubElement(opinion_f_elem, 'symbol') | ||
510 | + opinion_symbol.attrib['value'] = frame_opinion | ||
511 | + | ||
524 | def write_frame_meanings(parent_elem, entry, frame): | 512 | def write_frame_meanings(parent_elem, entry, frame): |
525 | meanings_f_elem = etree.SubElement(parent_elem, 'f') | 513 | meanings_f_elem = etree.SubElement(parent_elem, 'f') |
526 | meanings_f_elem.attrib['name'] = 'meanings' | 514 | meanings_f_elem.attrib['name'] = 'meanings' |
@@ -686,8 +674,7 @@ def write_meanings_layer(parent_elem, lemma): | @@ -686,8 +674,7 @@ def write_meanings_layer(parent_elem, lemma): | ||
686 | 674 | ||
687 | def write_meanings(parent_elem, lemma): | 675 | def write_meanings(parent_elem, lemma): |
688 | entry = lemma.entry_obj | 676 | entry = lemma.entry_obj |
689 | - lex_units = entry.lexical_units() | ||
690 | - for lex_unit in lex_units.all(): | 677 | + for lex_unit in entry.meanings.all(): |
691 | write_meaning(parent_elem, entry, lex_unit) | 678 | write_meaning(parent_elem, entry, lex_unit) |
692 | 679 | ||
693 | def write_meaning(parent_elem, entry, lex_unit): | 680 | def write_meaning(parent_elem, entry, lex_unit): |
@@ -733,39 +720,30 @@ def write_connections_layer(parent_elem, lemma): | @@ -733,39 +720,30 @@ def write_connections_layer(parent_elem, lemma): | ||
733 | def write_alternations(parent_elem, lemma): | 720 | def write_alternations(parent_elem, lemma): |
734 | entry = lemma.entry_obj | 721 | entry = lemma.entry_obj |
735 | frames = entry.actual_frames() | 722 | frames = entry.actual_frames() |
736 | - | ||
737 | for schema in lemma.frames.all(): | 723 | for schema in lemma.frames.all(): |
738 | for frame in frames: | 724 | for frame in frames: |
739 | matching_complements = frame.complements.filter(realizations__frame=schema).distinct() | 725 | matching_complements = frame.complements.filter(realizations__frame=schema).distinct() |
740 | - if matching_complements.filter(realizations__alternation=1).exists(): | ||
741 | - alternation_fs_elem = etree.SubElement(parent_elem, 'fs') | ||
742 | - alternation_fs_elem.attrib['type'] = 'alternation' | ||
743 | - | ||
744 | - connections_f_elem = etree.SubElement(alternation_fs_elem, 'f') | ||
745 | - connections_f_elem.attrib['name'] = 'connections' | ||
746 | - | ||
747 | - vColl_elem = etree.SubElement(connections_f_elem, 'vColl') | ||
748 | - vColl_elem.attrib['org'] = 'set' | ||
749 | - | ||
750 | - for arg in frame.complements.all(): | ||
751 | - alt_realizations = arg.realizations.filter(frame=schema, alternation=1) | ||
752 | - if alt_realizations.exists(): | ||
753 | - write_connection(vColl_elem, entry, frame, arg, alt_realizations) | ||
754 | - | ||
755 | - if matching_complements.filter(realizations__alternation=2).exists(): | ||
756 | - alternation_fs_elem = etree.SubElement(parent_elem, 'fs') | ||
757 | - alternation_fs_elem.attrib['type'] = 'alternation' | ||
758 | - | ||
759 | - connections_f_elem = etree.SubElement(alternation_fs_elem, 'f') | ||
760 | - connections_f_elem.attrib['name'] = 'connections' | ||
761 | - | ||
762 | - vColl_elem = etree.SubElement(connections_f_elem, 'vColl') | ||
763 | - vColl_elem.attrib['org'] = 'set' | ||
764 | - | ||
765 | - for arg in frame.complements.all(): | ||
766 | - alt_realizations = arg.realizations.filter(frame=schema, alternation=2) | ||
767 | - if alt_realizations.exists(): | ||
768 | - write_connection(vColl_elem, entry, frame, arg, alt_realizations) | 726 | + write_alternation(parent_elem, entry, schema, frame, matching_complements, 1) |
727 | + write_alternation(parent_elem, entry, schema, frame, matching_complements, 2) | ||
728 | + | ||
729 | +def write_alternation(parent_elem, entry, schema, frame, complements, alternation): | ||
730 | + alternation_compls = complements.filter(realizations__alternation=alternation) | ||
731 | + if alternation_compls.exists(): | ||
732 | + first_connection = True | ||
733 | + for arg in alternation_compls.all(): | ||
734 | + alt_realizations = arg.realizations.filter(frame=schema, alternation=alternation) | ||
735 | + if alt_realizations.exists(): | ||
736 | + if first_connection: | ||
737 | + alternation_fs_elem = etree.SubElement(parent_elem, 'fs') | ||
738 | + alternation_fs_elem.attrib['type'] = 'alternation' | ||
739 | + | ||
740 | + connections_f_elem = etree.SubElement(alternation_fs_elem, 'f') | ||
741 | + connections_f_elem.attrib['name'] = 'connections' | ||
742 | + | ||
743 | + vColl_elem = etree.SubElement(connections_f_elem, 'vColl') | ||
744 | + vColl_elem.attrib['org'] = 'set' | ||
745 | + first_connection = False | ||
746 | + write_connection(vColl_elem, entry, frame, arg, alt_realizations) | ||
769 | 747 | ||
770 | def write_connection(parent_elem, entry, frame, arg, realizations): | 748 | def write_connection(parent_elem, entry, frame, arg, realizations): |
771 | connection_fs_elem = etree.SubElement(parent_elem, 'fs') | 749 | connection_fs_elem = etree.SubElement(parent_elem, 'fs') |
@@ -794,158 +772,5 @@ def write_phrases(parent_elem, entry, realizations): | @@ -794,158 +772,5 @@ def write_phrases(parent_elem, entry, realizations): | ||
794 | realization.position.id, realization.argument.id) | 772 | realization.position.id, realization.argument.id) |
795 | phrase_link_elem = etree.SubElement(vColl_elem, 'fs') | 773 | phrase_link_elem = etree.SubElement(vColl_elem, 'fs') |
796 | phrase_link_elem.attrib['sameAs'] = phrase_xml_link | 774 | phrase_link_elem.attrib['sameAs'] = phrase_xml_link |
797 | - phrase_link_elem.attrib['type'] = 'phrase' | ||
798 | - | ||
799 | - | ||
800 | - | ||
801 | -def writefsdecl(outfile): | ||
802 | - ''' | ||
803 | - Write feature structures declarations | ||
804 | - ''' | ||
805 | - outfile.write(u' <encodingDesc>\n') | ||
806 | - outfile.write(u' <fsdDecl>\n') | ||
807 | - | ||
808 | -# syntacticBahaviour fs declaration | ||
809 | - outfile.write(u' <fsDecl type="syntacticBehaviour">\n') | ||
810 | - outfile.write(u' <fsDescr>Describes syntactic behaviour of entry</fsDescr>\n') | ||
811 | - outfile.write(u' <fDecl name="frames">\n') | ||
812 | - outfile.write(u' <fDescr>syntactic frames</fDescr>\n') | ||
813 | - outfile.write(u' <vRange>\n') | ||
814 | - outfile.write(u' <vColl org="list">\n') | ||
815 | - outfile.write(u' <fs type="frame"/>\n') | ||
816 | - outfile.write(u' </vColl>\n') | ||
817 | - outfile.write(u' </vRange>\n') | ||
818 | - outfile.write(u' </fDecl>\n') | ||
819 | - outfile.write(u' </fsDecl>\n') | ||
820 | - | ||
821 | -# frame fs declaration | ||
822 | - outfile.write(u' <fsDecl type="frame">\n') | ||
823 | - outfile.write(u' <fsDescr>Describes syntactic frame</fsDescr>\n') | ||
824 | - # frame opinion | ||
825 | - outfile.write(u' <fDecl name="opinion">\n') | ||
826 | - outfile.write(u' <fDescr>frame opinion</fDescr>\n') | ||
827 | - outfile.write(u' <vRange>\n') | ||
828 | - outfile.write(u' <vAlt>\n') | ||
829 | - for alt in Frame_Opinion_Value.objects.order_by('priority'): | ||
830 | - outfile.write(u' <symbol value="%s"/>\n' % alt.short) | ||
831 | - outfile.write(u' </vAlt>\n') | ||
832 | - outfile.write(u' </vRange>\n') | ||
833 | - outfile.write(u' </fDecl>\n') | ||
834 | - # reflex | ||
835 | - outfile.write(u' <fDecl name="reflex">\n') | ||
836 | - outfile.write(u' <fDescr>frame reflexivity</fDescr>\n') | ||
837 | - outfile.write(u' <vRange>\n') | ||
838 | - outfile.write(u' <vAlt>\n') | ||
839 | - outfile.write(u' <binary value="true"/>\n') | ||
840 | - outfile.write(u' <binary value="false"/>\n') | ||
841 | - outfile.write(u' </vAlt>\n') | ||
842 | - outfile.write(u' </vRange>\n') | ||
843 | - outfile.write(u' </fDecl>\n') | ||
844 | - # aspect | ||
845 | - outfile.write(u' <fDecl name="aspect">\n') | ||
846 | - outfile.write(u' <fDescr>frame aspect</fDescr>\n') | ||
847 | - outfile.write(u' <vRange>\n') | ||
848 | - outfile.write(u' <vAlt>\n') | ||
849 | - aspect_obj = Frame_Char_Model.objects.get(model_name=u'ASPEKT') | ||
850 | - for alt in aspect_obj.frame_char_values.order_by('priority'): | ||
851 | - outfile.write(u' <symbol value="%s"/>\n' % | ||
852 | - alt.value) | ||
853 | - outfile.write(u' </vAlt>\n') | ||
854 | - outfile.write(u' </vRange>\n') | ||
855 | - outfile.write(u' </fDecl>\n') | ||
856 | - # negatywnosc | ||
857 | - outfile.write(u' <fDecl name="negativity">\n') | ||
858 | - outfile.write(u' <fDescr>frame negativity</fDescr>\n') | ||
859 | - outfile.write(u' <vRange>\n') | ||
860 | - outfile.write(u' <vAlt>\n') | ||
861 | - aspect_obj = Frame_Char_Model.objects.get(model_name=u'NEGATYWNOŚĆ') | ||
862 | - for alt in aspect_obj.frame_char_values.order_by('priority'): | ||
863 | - outfile.write(u' <symbol value="%s"/>\n' % | ||
864 | - alt.value) | ||
865 | - outfile.write(u' </vAlt>\n') | ||
866 | - outfile.write(u' </vRange>\n') | ||
867 | - outfile.write(u' </fDecl>\n') | ||
868 | - # predykatywnosc | ||
869 | - outfile.write(u' <fDecl name="predicativity">\n') | ||
870 | - outfile.write(u' <fDescr>frame predicativity</fDescr>\n') | ||
871 | - outfile.write(u' <vRange>\n') | ||
872 | - outfile.write(u' <vAlt>\n') | ||
873 | - aspect_obj = Frame_Char_Model.objects.get(model_name=u'PREDYKATYWNOŚĆ') | ||
874 | - for alt in aspect_obj.frame_char_values.order_by('priority'): | ||
875 | - outfile.write(u' <symbol value="%s"/>\n' % | ||
876 | - alt.value) | ||
877 | - outfile.write(u' </vAlt>\n') | ||
878 | - outfile.write(u' </vRange>\n') | ||
879 | - outfile.write(u' </fDecl>\n') | ||
880 | - # positions | ||
881 | - outfile.write(u' <fDecl name="positions">\n') | ||
882 | - outfile.write(u' <fDescr>syntactic positions</fDescr>\n') | ||
883 | - outfile.write(u' <vRange>\n') | ||
884 | - outfile.write(u' <vColl org="list">\n') | ||
885 | - outfile.write(u' <fs type="position"/>\n') | ||
886 | - outfile.write(u' </vColl>\n') | ||
887 | - outfile.write(u' </vRange>\n') | ||
888 | - outfile.write(u' </fDecl>\n') | ||
889 | - outfile.write(u' </fsDecl>\n') | ||
890 | - | ||
891 | -# position fs declaration | ||
892 | - outfile.write(u' <fsDecl type="position">\n') | ||
893 | - outfile.write(u' <fsDescr>Describes syntactic position</fsDescr>\n') | ||
894 | - # position category | ||
895 | - outfile.write(u' <fDecl name="category">\n') | ||
896 | - outfile.write(u' <fDescr>position category</fDescr>\n') | ||
897 | - outfile.write(u' <vRange>\n') | ||
898 | - outfile.write(u' <vAlt>\n') | ||
899 | - for alt in PositionCategory.objects.filter(control=False).order_by('priority'): | ||
900 | - outfile.write(u' <symbol value="%s"/>\n' % alt.category) | ||
901 | - outfile.write(u' </vAlt>\n') | ||
902 | - outfile.write(u' </vRange>\n') | ||
903 | - outfile.write(u' </fDecl>\n') | ||
904 | - # position control | ||
905 | - outfile.write(u' <fDecl name="control">\n') | ||
906 | - outfile.write(u' <fDescr>position category</fDescr>\n') | ||
907 | - outfile.write(u' <vRange>\n') | ||
908 | - outfile.write(u' <vAlt>\n') | ||
909 | - for alt in PositionCategory.objects.filter(control=True).order_by('priority'): | ||
910 | - outfile.write(u' <symbol value="%s"/>\n' % alt.category) | ||
911 | - outfile.write(u' </vAlt>\n') | ||
912 | - outfile.write(u' </vRange>\n') | ||
913 | - outfile.write(u' </fDecl>\n') | ||
914 | - # arguments | ||
915 | - outfile.write(u' <fDecl name="arguments">\n') | ||
916 | - outfile.write(u' <fDescr>syntactic arguments</fDescr>\n') | ||
917 | - outfile.write(u' <vRange>\n') | ||
918 | - outfile.write(u' <vColl org="list">\n') | ||
919 | - outfile.write(u' <fs type="argument"/>\n') | ||
920 | - outfile.write(u' </vColl>\n') | ||
921 | - outfile.write(u' </vRange>\n') | ||
922 | - outfile.write(u' </fDecl>\n') | ||
923 | - outfile.write(u' </fsDecl>\n') | ||
924 | - | ||
925 | -# argument fs declaration | ||
926 | - outfile.write(u' <fsDecl type="argument">\n') | ||
927 | - outfile.write(u' <fsDescr>Describes syntactic argument</fsDescr>\n') | ||
928 | - # position category | ||
929 | - outfile.write(u' <fDecl name="type">\n') | ||
930 | - outfile.write(u' <fDescr>type of argument</fDescr>\n') | ||
931 | - outfile.write(u' <vRange>\n') | ||
932 | - outfile.write(u' <vAlt>\n') | ||
933 | - for alt in Argument_Model.objects.order_by('priority'): | ||
934 | - outfile.write(u' <symbol value="%s"/>\n' % alt.arg_model_name) | ||
935 | - outfile.write(u' </vAlt>\n') | ||
936 | - outfile.write(u' </vRange>\n') | ||
937 | - outfile.write(u' </fDecl>\n') | ||
938 | - # attributes | ||
939 | - outfile.write(u' <fDecl name="attributes">\n') | ||
940 | - outfile.write(u' <fDescr>argument attributes</fDescr>\n') | ||
941 | - outfile.write(u' <vRange>\n') | ||
942 | - outfile.write(u' <vColl org="list">\n') | ||
943 | - outfile.write(u' <fs type="attribut"/>\n') | ||
944 | - outfile.write(u' </vColl>\n') | ||
945 | - outfile.write(u' </vRange>\n') | ||
946 | - outfile.write(u' </fDecl>\n') | ||
947 | - outfile.write(u' </fsDecl>\n') | ||
948 | - | ||
949 | - outfile.write(u' </fsdDecl>\n') | ||
950 | - outfile.write(u' </encodingDesc>\n') | 775 | + phrase_link_elem.attrib['type'] = 'phrase' |
951 | 776 | ||
952 | \ No newline at end of file | 777 | \ No newline at end of file |