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 | 61 | Zainstaluj moduł psycopg2: |
62 | 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 | 66 | Zgraj pliki statyczne do dedykowanego katalogu poleceniem: |
65 | 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 | 76 | -------------------------------------------- |
75 | 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 | 81 | os.environ['DJANGO_SETTINGS_MODULE'] = 'Slowal.settings' |
80 | 82 | |
81 | 83 | import django.core.handlers.wsgi |
... | ... | @@ -83,7 +85,7 @@ import django.core.handlers.wsgi |
83 | 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 | 90 | <VirtualHost *:80> |
89 | 91 | ServerAdmin bartek.niton@gmail.com |
... | ... | @@ -116,8 +118,6 @@ Uruchom stronę poleceniem: |
116 | 118 | Zrestartuj apacha: |
117 | 119 | >> sudo service apache2 restart |
118 | 120 | |
119 | -Zainstaluj Morfeusza2 zgodnie z instrukcjami na stronie http://sgjp.pl/morfeusz/dopobrania.html. | |
120 | - | |
121 | 121 | Ustaw w crontabie cykliczne uruchamianie komend create_walenty i count_positions_occurrences: |
122 | 122 | 1 0 * * 5 python /home/zil/Slowal/manage.py create_walenty |
123 | 123 | 0 1 * * * python /home/zil/Slowal/manage.py count_positions_occurrences |
... | ... |
accounts/models.py
... | ... | @@ -43,7 +43,7 @@ class UserStats(Model): |
43 | 43 | # oplaty za prace leksykograficzne |
44 | 44 | bind_phraseology_frames_history = ManyToManyField('RealizedPhraseologyBinding', db_table='powiazania_frazeologiczne', |
45 | 45 | blank=True, null=True, related_name='user_stats') |
46 | - # !NOWE! oplaty za prace semantyczne | |
46 | + # oplaty za prace semantyczne | |
47 | 47 | semantics_real_history = ManyToManyField('RealizedSemantics', db_table='prace_semantyczne', |
48 | 48 | blank=True, null=True, related_name='user_stats') |
49 | 49 | # kwota uiszczona |
... | ... | @@ -272,7 +272,6 @@ def get_anon_profile(): |
272 | 272 | def filtering_mode(user): |
273 | 273 | return user.usersettings.filter_search |
274 | 274 | |
275 | -# !NOWE! | |
276 | 275 | class RealizedSemantics(Model): |
277 | 276 | """Model representing realized semantic work.""" |
278 | 277 | # wykonane haslo |
... | ... | @@ -288,15 +287,24 @@ class RealizedSemantics(Model): |
288 | 287 | # wlasciwie wykonane ramki (wypelniane dla semantyka) |
289 | 288 | prop_frames = PositiveIntegerField(db_column='poprawne_ramki', |
290 | 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 | 293 | # niewlasciwie wykonane ramki (wypelniane dla semantyka) |
292 | 294 | wrong_frames = PositiveIntegerField(db_column='niepoprawne_ramki', |
293 | 295 | default=0) |
296 | + # dodane powiazania miedzy ramami i schematami !NOWE | |
297 | + added_connections = PositiveIntegerField(db_column='dodane_powiazania', | |
298 | + default=0) | |
294 | 299 | # wykonane ramki (wypelniane dla semantyka) |
295 | 300 | made_frames = PositiveIntegerField(db_column='wykonane_ramki', |
296 | 301 | default=0) |
297 | 302 | # poprawione ramki (wypelniane dla supersemantyka) |
298 | 303 | corr_frames = PositiveIntegerField(db_column='poprawione_ramki', |
299 | 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 | 308 | # ramki niepoprawiane (wypelniane dla supersemantyka) |
301 | 309 | ncorr_frames = PositiveIntegerField(db_column='niepoprawione_ramki', |
302 | 310 | default=0) |
... | ... |
dictionary/ajax_jqgrid.py
... | ... | @@ -11,26 +11,7 @@ def default_sort_rules(): |
11 | 11 | 'semanticist': { 'priority': None, 'sort_order': 'desc'}, |
12 | 12 | 'vocabulary': { 'priority': None, 'sort_order': 'desc'}, |
13 | 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 | 15 | class JqGridAjax(object): |
35 | 16 | model = None |
36 | 17 | search_field = None |
... | ... |
dictionary/ajax_lemma_status.py
1 | 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 | import operator |
24 | 4 | |
25 | 5 | from django.db.models import Q |
... | ... | @@ -36,9 +16,7 @@ from semantics.utils import get_frames_differences |
36 | 16 | |
37 | 17 | @render('lemma_status.html') |
38 | 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 | 20 | selected_lemma = Lemma.objects.get(id=id) |
43 | 21 | abort_status = None |
44 | 22 | next_statuses = [] |
... | ... | @@ -254,10 +232,20 @@ def lemma_status_change(request, status_id, lemma_id): |
254 | 232 | checked_frame_value = 0.0 |
255 | 233 | corrected_frame_value = 0.0 |
256 | 234 | bonus = 4.0 |
235 | + part_bonus = 2.0 | |
236 | + connection_bonus = 0.1 | |
257 | 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 | 249 | add_new_frames_to_phraseologic_propositions(lemma_obj) |
262 | 250 | changed = True |
263 | 251 | # zmiana statusu na w obrobce semantycznej |
... | ... | @@ -496,7 +484,8 @@ def update_sem_stats_ready_s(entry, semantic_frames, semanticist, status, frame_ |
496 | 484 | semanticist.user_stats.semantics_real_history.add(realized_semantics) |
497 | 485 | |
498 | 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 | 489 | ready_statuses = Lemma_Status.objects.filter(type__sym_name='ready_s') |
501 | 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 | 494 | checked_sem_frames = semantic_frames |
506 | 495 | ready_to_checked_diffs = get_frames_differences(ready_sem_frames.all(), checked_sem_frames.all()) |
507 | 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 | 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 | 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 | 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 | 515 | supersem_real_semantics = RealizedSemantics(entry=entry, |
517 | 516 | cash=supersem_dict['cash'], |
518 | 517 | corr_frames=supersem_dict['redo_frames'], |
518 | + part_corr_frames=supersem_dict['part_same_frames'], | |
519 | 519 | ncorr_frames=supersem_dict['same_frames'], |
520 | 520 | status=status, |
521 | 521 | bonus=False) |
... | ... | @@ -526,12 +526,22 @@ def update_sem_stats_conf_s(entry, semantic_frames, semanticist, supersemanticis |
526 | 526 | sem_real_semantics = RealizedSemantics(entry=entry, |
527 | 527 | cash=sem_dict['cash'], |
528 | 528 | prop_frames=sem_dict['same_frames'], |
529 | + part_prop_frames=sem_dict['part_same_frames'], | |
529 | 530 | wrong_frames=sem_dict['wrong_frames'], |
531 | + added_connections=sem_dict['added_connections'], | |
530 | 532 | status=status, |
531 | 533 | bonus=True) |
532 | 534 | sem_real_semantics.save() |
533 | 535 | sem_real_semantics.frames.add(*semantic_frames.all()) |
534 | 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 | 546 | def remove_semantic_payments(entry): |
537 | 547 | RealizedSemantics.objects.filter(entry=entry).delete() |
... | ... |
dictionary/ajax_lemma_view.py
1 | 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 | import math |
24 | 4 | import copy |
25 | 5 | import re |
... | ... | @@ -32,7 +12,11 @@ from django.contrib.auth.models import User, Group |
32 | 12 | from django.core import serializers |
33 | 13 | |
34 | 14 | from common.js_to_obj import frameObjToSerializableDict, jsArgToObj, jsFrameToObj, jsPosToObj |
15 | +from dictionary.common_func import escape_regex | |
35 | 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 | 20 | from dictionary.models import Vocabulary, Lemma, Lemma_Status, Frame_Opinion, \ |
37 | 21 | Frame_Opinion_Value, Frame, NKJP_Example, NKJP_ArgSelection, \ |
38 | 22 | NKJP_Source, NKJP_Opinion, Position, \ |
... | ... | @@ -44,9 +28,9 @@ from dictionary.models import Vocabulary, Lemma, Lemma_Status, Frame_Opinion, \ |
44 | 28 | sorted_default_frame_char_vals, XcpExample, \ |
45 | 29 | POS, get_frame_char_and_its_value, get_frame_char_by_type_and_value_pk, \ |
46 | 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 | 32 | from dictionary.forms import AddPositionForm, FrameForm, Pos_Cat_Form, \ |
49 | - AddNkjpExampleForm, MessageForm, SortForm, FilterForm, \ | |
33 | + AddNkjpExampleForm, MessageForm, SortForm, \ | |
50 | 34 | SimilarLemmasNewForm, ChangeUserFunctionForm, \ |
51 | 35 | ExampleOpinionForm, \ |
52 | 36 | FrameConversionForm, CreatePositionForm, AssignPhraseologicFrameForm |
... | ... | @@ -56,13 +40,15 @@ from dictionary.saving import connect_example_operation, disconnect_all_examples |
56 | 40 | |
57 | 41 | from common.decorators import render, ajax, AjaxError |
58 | 42 | from common.util import triple_arg_poss |
43 | +from dictionary.filtering import filter_lemmas | |
59 | 44 | from dictionary.validation import find_similar_frames, get_all_test_missing_frames, get_aspect_rel_lemmas, \ |
60 | 45 | get_wrong_aspect_frames, validate_B_frames, get_deriv_miss_frames_message, \ |
61 | 46 | validate_phraseology_binded_frames, validate_rule_5, \ |
62 | 47 | validate_examples_and_mark_errors, validate_schemas_and_mark_errors, \ |
48 | + validate_schemata_for_semantics_and_mark_errors, \ | |
63 | 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 | 53 | from wordnet.models import LexicalUnit |
68 | 54 | |
... | ... | @@ -77,13 +63,11 @@ from django.core.validators import email_re |
77 | 63 | from accounts.models import UserSettings, UserStats, RealizedPhraseologyBinding, \ |
78 | 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 | 68 | import locale |
83 | 69 | locale.setlocale(locale.LC_ALL, 'pl_PL.UTF-8') |
84 | 70 | |
85 | -import HTMLParser | |
86 | - | |
87 | 71 | DEFAULT_SAVE_PATH = os.path.join(PROJECT_PATH, 'tmp') |
88 | 72 | |
89 | 73 | def reverse(string): |
... | ... | @@ -165,7 +149,7 @@ def prepareFrameTable(frame): |
165 | 149 | |
166 | 150 | def nkjpExamplesObjToJs(nkjp_examples, user, lemma): |
167 | 151 | example_dict_list = [] |
168 | - lexical_units = lemma.entry_obj.lexical_units() | |
152 | + lexical_units = lemma.entry_obj.meanings.all() | |
169 | 153 | for example in nkjp_examples: |
170 | 154 | frame = example.frame; |
171 | 155 | frame_table_id = 'frame_'+str(frame.id)+'_' |
... | ... | @@ -178,18 +162,14 @@ def nkjpExamplesObjToJs(nkjp_examples, user, lemma): |
178 | 162 | |
179 | 163 | confirmed = True |
180 | 164 | approvers_count = lemma.entry_obj.pos.example_approvers_num |
181 | - #Configuration.objects.get(selected_conf=True).example_approvers_num | |
182 | 165 | if example.source.confirmation_required and example.approvers.count() < approvers_count: |
183 | 166 | try: |
184 | 167 | example.approvers.get(username=user.username) |
185 | 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 | 174 | example_dict = { 'example_id' : example.id, |
195 | 175 | 'frame_id' : frame_table_id, |
... | ... | @@ -219,18 +199,19 @@ def nkjpLemmaExamplesObjToJs(nkjp_examples, user, lemma): |
219 | 199 | for example in nkjp_examples: |
220 | 200 | confirmed = True |
221 | 201 | approvers_count = lemma.entry_obj.pos.example_approvers_num |
222 | - #Configuration.objects.get(selected_conf=True).example_approvers_num | |
223 | 202 | if example.source.confirmation_required and example.approvers.count() < approvers_count: |
224 | 203 | try: |
225 | 204 | example.approvers.get(username=user.username) |
226 | 205 | except: |
227 | 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 | 216 | example_dict = { 'example_id' : example.id, |
236 | 217 | 'frame_id' : '', |
... | ... | @@ -249,8 +230,6 @@ def nkjpLemmaExamplesObjToJs(nkjp_examples, user, lemma): |
249 | 230 | @render('old_frames.html') |
250 | 231 | @ajax(method='get', encode_result=False) |
251 | 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 | 233 | selected_lemma = Lemma.objects.get(id=id) |
255 | 234 | old_frames = selected_lemma.old_frames |
256 | 235 | reflexed_frames = [] |
... | ... | @@ -299,13 +278,7 @@ def get_arg_id(request, text_rep): |
299 | 278 | @ajax(method='get', encode_result=False) |
300 | 279 | def get_lemma_preview(request, id, main_lemma_id): |
301 | 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 | 282 | frame_char_models = Frame_Char_Model.objects.order_by('priority') |
310 | 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 | 288 | |
316 | 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 | 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 | 294 | 'selected_lemma': selected_lemma, |
330 | 295 | 'similarLemmasNewForm': similarLemmasNewForm} |
331 | 296 | |
332 | 297 | @ajax(method='get') |
333 | 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 | 301 | @render('lemma_desc.html') |
365 | 302 | @ajax(method='get', encode_result=False) |
... | ... | @@ -376,44 +313,14 @@ def get_lemma_desc(request, id): |
376 | 313 | @render('new_frames.html') |
377 | 314 | @ajax(method='get', encode_result=False) |
378 | 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 | 326 | @ajax(method='get', encode_result=True) |
... | ... | @@ -427,72 +334,26 @@ def get_ctrl_preview(request, id): |
427 | 334 | |
428 | 335 | @render('lemma_examples.html') |
429 | 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 | 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 | 343 | # sprawdz czy uzytkownik jest wlascicielem wybranego hasla |
439 | 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 | 346 | add_nkjp_form = AddNkjpExampleForm() |
442 | 347 | |
443 | 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 | 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 | 352 | ############################ lemma notes ################################# |
489 | 353 | |
490 | 354 | @render('lemma_notes.html') |
491 | 355 | @ajax(method='get', encode_result=False) |
492 | 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 | 357 | selected_lemma = Lemma.objects.get(id=id) |
497 | 358 | add_note_form = MessageForm() |
498 | 359 | messages = selected_lemma.messages.filter(private=False).order_by('-time') |
... | ... | @@ -672,9 +533,7 @@ def restore_lemma(request, change_id, lemma_id): |
672 | 533 | |
673 | 534 | @render('change_ctrl.html') |
674 | 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 | 537 | selected_lemma = Lemma.objects.get(id=id) |
679 | 538 | old_versions = selected_lemma.old_versions.order_by('-time') |
680 | 539 | can_modify = (user_can_modify(selected_lemma, request.user) and |
... | ... | @@ -844,176 +703,14 @@ def get_sort_order(request): |
844 | 703 | |
845 | 704 | @render('filter_form.html') |
846 | 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 | 709 | @ajax(method='post') |
901 | 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 | 715 | @ajax(method='post') |
1019 | 716 | def save_columns(request, col_model, col_names, remap): |
... | ... | @@ -1572,10 +1269,7 @@ def get_default_char_value(possibilities): |
1572 | 1269 | value = possibilities.get(default=True) |
1573 | 1270 | except Frame_Char_Value.DoesNotExist: |
1574 | 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 | 1274 | def regex_query(string): |
1581 | 1275 | q_query = [] |
... | ... | @@ -2180,7 +1874,7 @@ def get_frame_chars(request, frame_id): |
2180 | 1874 | @ajax(method='get', encode_result=False) |
2181 | 1875 | def xcp_example_propositions(request, frame, argument_ids, lemma_id): |
2182 | 1876 | propositions = [] |
2183 | - lemma_obj = Lemma.objects.get(old=False, id=lemma_id) | |
1877 | + lemma_obj = Lemma.objects.get(id=lemma_id) | |
2184 | 1878 | entry = lemma_obj.entry_obj |
2185 | 1879 | # TODO: zlikwidowac zaslepke na przyslowki |
2186 | 1880 | if entry.pos.tag != 'adv': |
... | ... | @@ -2553,7 +2247,7 @@ def save_new_frames(request, data, id, examples, lemma_examples): |
2553 | 2247 | reconnect_examples_operations.remove(disconnect_example_operation(example, nkjp_example_obj)) |
2554 | 2248 | except ValueError: |
2555 | 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 | 2252 | # dodawanie przykladow nkjp do czasownika |
2559 | 2253 | for example in decoded_lemma_examples: |
... | ... | @@ -2605,10 +2299,12 @@ def validate_new_frames(request, data, id, examples, lemma_examples, |
2605 | 2299 | |
2606 | 2300 | status_need_validation = False |
2607 | 2301 | status_need_examples_check = False |
2302 | + status_need_semantic_check = False | |
2608 | 2303 | try: |
2609 | 2304 | status_obj = Lemma_Status.objects.get(id=status_id) |
2610 | 2305 | status_need_validation = status_obj.validate |
2611 | 2306 | status_need_examples_check = status_obj.check_examples |
2307 | + status_need_semantic_check = status_obj.check_semantics | |
2612 | 2308 | except Lemma_Status.DoesNotExist: |
2613 | 2309 | status_obj = None |
2614 | 2310 | |
... | ... | @@ -2620,6 +2316,8 @@ def validate_new_frames(request, data, id, examples, lemma_examples, |
2620 | 2316 | serialized_frames, error = validate_examples_and_mark_errors(old_object, status_obj, selected_frame_id) |
2621 | 2317 | elif status_need_validation or not status_obj: |
2622 | 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 | 2322 | if error: |
2625 | 2323 | return {'id' : '', |
... | ... | @@ -2820,63 +2518,6 @@ def prepare_sort_rules(sort_rules): |
2820 | 2518 | prepared_sort_rules.append(rule['name']) |
2821 | 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 | 2521 | def get_lemma_query(prepared_sort_rules, filter_rules, lemma_query, user): |
2881 | 2522 | lemmas = Lemma.objects.none() |
2882 | 2523 | if user.is_authenticated(): |
... | ... | @@ -2897,66 +2538,8 @@ def get_lemma_query(prepared_sort_rules, filter_rules, lemma_query, user): |
2897 | 2538 | lemmas = lemmas.filter(reduce(operator.or_, q_vocab_list)) |
2898 | 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 | 2544 | ## sortowanie |
2962 | 2545 | entrySortDefined = False |
... | ... | @@ -3211,3 +2794,28 @@ def get_examples(request, lemma_id): |
3211 | 2794 | json_examples = json_encode(examples_js) |
3212 | 2795 | return {'examples': json_examples, |
3213 | 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 | 22 | |
23 | 23 | """Module covering functions used in user statistics views""" |
24 | 24 | |
25 | +import operator | |
26 | + | |
25 | 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 | 30 | from common.decorators import render, ajax |
29 | 31 | from dictionary.models import Lemma, Lemma_Status |
... | ... | @@ -86,8 +88,8 @@ def get_user_stats(request, user_name): |
86 | 88 | 'all_semantic_owned_lemmas_count': all_semantic_owned_lemmas.count(), |
87 | 89 | 'all_semantic_owned_frames_count': all_semantic_owned_frames_count, |
88 | 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 | 93 | 'lex_work_stats': lex_work_stats, |
92 | 94 | 'phraseology_work_stats': phraseology_work_stats, |
93 | 95 | 'semantics_work_stats': semantics_work_stats} |
... | ... | @@ -212,22 +214,23 @@ def get_phraseology_stats(user): |
212 | 214 | return phraseology_work_stats |
213 | 215 | |
214 | 216 | def get_used_bindings(added_bindings): |
215 | - used_bindings = added_bindings | |
217 | + unused_bindings = [] | |
216 | 218 | for added_binding in added_bindings.all(): |
217 | 219 | binded_entry = added_binding.binded_entry |
218 | 220 | act_binded_lemma = binded_entry.lemmas.get(old=False) |
219 | 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 | 223 | else: |
222 | 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 | 228 | for pos in added_frame.positions.all(): |
227 | 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 | 235 | def get_semantics_stats(user): |
233 | 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 | 244 | prop_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('prop_frames'))['prop_frames__sum'] |
242 | 245 | if prop_frames == None: |
243 | 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 | 250 | wrong_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('wrong_frames'))['wrong_frames__sum'] |
245 | 251 | if wrong_frames == None: |
246 | 252 | wrong_frames = 0 |
247 | 253 | corr_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('corr_frames'))['corr_frames__sum'] |
248 | 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 | 259 | ncorr_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('ncorr_frames'))['ncorr_frames__sum'] |
251 | 260 | if ncorr_frames == None: |
252 | 261 | ncorr_frames = 0 |
253 | 262 | made_frames = RealizedSemantics.objects.filter(user_stats__user=user).aggregate(Sum('made_frames'))['made_frames__sum'] |
254 | 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 | 268 | efficacy = 0.0 |
257 | 269 | if prop_frames+wrong_frames > 0: |
258 | 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 | 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 | 155 | pred_val=pred_val, |
156 | 156 | aspect_val=aspect_val).order_by('text_rep') |
157 | 157 | for frame in matching_frames: |
158 | + if not lemma.phraseology_ready() and frame.phraseologic: | |
159 | + continue | |
158 | 160 | if not frame_opinions or founded_frame_opinions.filter(frame=frame).exists(): |
159 | 161 | text_rep = frame.get_position_spaced_text_rep() |
160 | 162 | if add_frame_opinions: |
... | ... |
dictionary/common_func.py
1 | 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 | 4 | Common functions used in Slowal application. |
25 | 5 | ''' |
... | ... | @@ -131,4 +111,6 @@ def have_same_positions_structure(pos1, pos2): |
131 | 111 | if(pos1_args == pos2_args and pos1_cats==pos2_cats): |
132 | 112 | same_structure = True |
133 | 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 | 557 | \ No newline at end of file |
... | ... |
dictionary/forms.py
1 | 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 | import datetime |
24 | 4 | |
25 | 5 | from django.contrib.auth.forms import UserCreationForm |
... | ... | @@ -28,6 +8,7 @@ from django.db.models import Q |
28 | 8 | from django.forms import * |
29 | 9 | |
30 | 10 | from dictionary.models import * |
11 | +from semantics.models import FrameOpinion | |
31 | 12 | #Frame, Argument_Model, AttrValueSelectionMode, \ |
32 | 13 | # AttrValuesSeparator, Atribute_Value, PositionCategory, \ |
33 | 14 | # Argument, Atribute_Model, ArgRealOpinion, Frame_Characteristic, \ |
... | ... | @@ -529,9 +510,14 @@ class MessageForm(ModelForm): |
529 | 510 | exclude = ('sender', 'lemma', 'new', 'recipient') |
530 | 511 | |
531 | 512 | |
532 | -############################ sorting, filtering | |
513 | +############################ sorting, filtering | |
514 | + | |
533 | 515 | class FilterForm(Form): |
516 | + # Lemma filters | |
517 | + lemma = forms.CharField(label=u'Lemat', required=False) | |
534 | 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 | 521 | owner = ModelChoiceField(label=u'Właściciel', queryset=User.objects.none(), required=False) |
536 | 522 | phraseologist = ModelChoiceField(label=u'Frazeolog', queryset=User.objects.none(), required=False) |
537 | 523 | semanticist = ModelChoiceField(label=u'Semantyk', queryset=User.objects.none(), required=False) |
... | ... | @@ -544,7 +530,10 @@ class FilterForm(Form): |
544 | 530 | approver = ModelChoiceField(label=u'Zatwierdzający przykład', queryset=User.objects.filter(Q(groups__permissions__codename='confirm_example') | |
545 | 531 | Q(is_superuser=True)).distinct().order_by('username'), |
546 | 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 | 537 | queryset=Frame_Characteristic.objects.filter(type=u'ZWROTNOŚĆ').order_by('value__priority'), |
549 | 538 | required=False) |
550 | 539 | negativity = ModelChoiceField(label=u'Negatywność', |
... | ... | @@ -558,28 +547,34 @@ class FilterForm(Form): |
558 | 547 | required=False) |
559 | 548 | has_argument = forms.CharField(label=u'Zawiera typ frazy', required=False) |
560 | 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 | 552 | filter_frames = forms.BooleanField(label=u'Odfiltruj niepasujące schematy', initial=False, |
566 | 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 | 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 | 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 | 567 | super(FilterForm, self).__init__(*args, **kwargs) |
568 | + | |
576 | 569 | self.fields['pos'].queryset = POS.objects.exclude(tag='unk') |
577 | 570 | self.fields['owner'].queryset = users |
578 | 571 | self.fields['phraseologist'].queryset = phraseologists |
579 | 572 | self.fields['semanticist'].queryset = semanticists |
580 | 573 | self.fields['vocabulary'].queryset = vocabularies |
581 | 574 | self.fields['status'].queryset = statuses |
575 | + self.fields['lemma'].initial = lemma | |
582 | 576 | self.fields['pos'].initial = sel_pos |
577 | + self.fields['contains_phraseology'].initial = contains_phraseology | |
583 | 578 | self.fields['owner'].initial = sel_user |
584 | 579 | self.fields['phraseologist'].initial = sel_phraseologist |
585 | 580 | self.fields['semanticist'].initial = sel_semanticist |
... | ... | @@ -593,23 +588,20 @@ class FilterForm(Form): |
593 | 588 | self.fields['example_source'].initial = None |
594 | 589 | self.fields['approver'].widget = self.fields['approver'].hidden_widget() |
595 | 590 | self.fields['approver'].initial = None |
596 | -# self.fields['has_old_frames_property'].initial = sel_old_property | |
597 | 591 | self.fields['reflex'].initial = sel_reflex |
598 | 592 | self.fields['negativity'].initial = sel_negativity |
599 | 593 | self.fields['predicativity'].initial = sel_predicativity |
600 | 594 | self.fields['aspect'].initial = sel_aspect |
601 | 595 | self.fields['has_argument'].initial = sel_has_argument |
602 | 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 | 598 | self.fields['has_message_from'].initial = sel_sender |
606 | 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 | 604 | self.hide_unused_fields() |
611 | - | |
612 | - #self.fields['has_frame'].widget = self.fields['has_frame'].hidden_widget() | |
613 | 605 | |
614 | 606 | def hide_unused_fields(self): |
615 | 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 | 21 | \ No newline at end of file |
... | ... |
dictionary/management/commands/create_TEI_walenty.py
1 | 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 | 3 | import datetime |
24 | 4 | import os |
25 | 5 | |
... | ... |
dictionary/management/commands/get_examples.py
1 | 1 | #-*- coding:utf-8 -*- |
2 | 2 | |
3 | 3 | import codecs |
4 | -import operator | |
4 | +import datetime | |
5 | 5 | import os |
6 | -import re | |
7 | -from subprocess import call | |
8 | -from tempfile import mkdtemp, mkstemp | |
9 | 6 | |
10 | 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 | 10 | from settings import PROJECT_PATH |
19 | 11 | |
20 | 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 | 24 | class Command(BaseCommand): |
82 | 25 | help = 'Get pinned examples from Slowal.' |
83 | 26 | |
84 | 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 | 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 | 43 | print lemma |
189 | - lemma_entry = lemma.entry | |
44 | + lemma_entry = lemma.entry_obj.name | |
190 | 45 | lemma_status = lemma.status.status |
191 | 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 | 49 | frame_opinion = lemma.frame_opinions.filter(frame=frame).all()[0].value |
194 | 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 | 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 | 62 | finally: |
212 | 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 | 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 | 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 | 79 | \ No newline at end of file |
80 | + examples_file.close() | |
... | ... |
dictionary/models.py
1 | 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 | from django.contrib.auth.models import User |
24 | 4 | from django.db.models import * |
25 | 5 | |
26 | -from wordnet.models import LexicalUnit | |
27 | - | |
28 | 6 | class Configuration(Model): |
29 | 7 | name = CharField(max_length=16, primary_key=True, unique=True, db_column='nazwa_konfiguracji') |
30 | 8 | selected_conf = BooleanField(db_column='wybrana_konfiguracja', default=False) |
... | ... | @@ -250,6 +228,20 @@ class Lemma(Model): |
250 | 228 | except Frame_Opinion.DoesNotExist: |
251 | 229 | pass |
252 | 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 | 246 | class Meta: |
255 | 247 | db_table = 'hasla' |
... | ... | @@ -439,15 +431,22 @@ def positions_to_frame(positions, reflex, negativity, predicativity, aspect): |
439 | 431 | if frame_obj.has_phraseologic_arguments(): |
440 | 432 | frame_obj.phraseologic = True |
441 | 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 | 452 | class NKJP_Example(Model): |
... | ... | @@ -745,13 +744,6 @@ class Argument(Model): |
745 | 744 | break |
746 | 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 | 747 | def __unicode__(self): |
756 | 748 | return '%s' % (self.text_rep) |
757 | 749 | |
... | ... | @@ -764,7 +756,21 @@ class Argument(Model): |
764 | 756 | for value in attr.values.filter(type__sym_name=u'parameter'): |
765 | 757 | if value.parameter.type.realization_only: |
766 | 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 | 775 | def sort_arguments(arguments): |
770 | 776 | return sortArguments(arguments) |
... | ... | @@ -1382,12 +1388,9 @@ class Entry(Model): |
1382 | 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 | 1391 | def actual_frames(self): |
1389 | 1392 | frame_ids = [] |
1390 | - lexical_units = self.lexical_units().order_by('sense') | |
1393 | + lexical_units = self.meanings.order_by('sense') | |
1391 | 1394 | for lexical_unit in lexical_units: |
1392 | 1395 | frame_ids.extend([f.id for f in lexical_unit.actual_frames()]) |
1393 | 1396 | return get_model('semantics', 'SemanticFrame').objects.filter(id__in=list(set(frame_ids))) |
... | ... | @@ -1406,6 +1409,9 @@ class Entry(Model): |
1406 | 1409 | 'realizations': realizations_ids}) |
1407 | 1410 | return matching_connections |
1408 | 1411 | |
1412 | + def actual_lemma(self): | |
1413 | + return self.lemmas.get(old=False) | |
1414 | + | |
1409 | 1415 | def __unicode__(self): |
1410 | 1416 | return self.name |
1411 | 1417 | |
... | ... |
dictionary/saving.py
... | ... | @@ -94,7 +94,7 @@ def update_connections(lemma_id, reconnect_operations, user): |
94 | 94 | |
95 | 95 | def disconnect_all_examples_operations(lemma): |
96 | 96 | operations = [] |
97 | - lex_units = lemma.entry_obj.lexical_units().all() | |
97 | + lex_units = lemma.entry_obj.meanings.all() | |
98 | 98 | for lu in lex_units: |
99 | 99 | lu_examples = LexicalUnitExamples.objects.filter(lexical_unit=lu) |
100 | 100 | for lu_ex in lu_examples: |
... | ... | @@ -112,6 +112,6 @@ def disconnect_example_operation(example_dict, example_obj): |
112 | 112 | lu = LexicalUnit.objects.get(id=example_dict['lexical_unit']) |
113 | 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 | 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 | 80 | } |
81 | 81 | |
82 | 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 | 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 | 22 | // te wartosci maja zasieg na wszystkie hasla |
23 | 23 | window.schemas = new Array(); |
24 | 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 | 25 | var prev_lemma_id = -1; |
45 | 26 | |
46 | 27 | // te wartosci trzeba czyscic przy ladowaniu innego hasla |
... | ... | @@ -68,7 +49,7 @@ var nkjp_source_tab = ax_nkjp_source_vals; |
68 | 49 | var lemma_entry = ''; |
69 | 50 | var prev_lemma_entry = ''; |
70 | 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 | 65 | window.nkjp_lemma_examples); |
85 | 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 | 69 | function argsToRemove(example, elementToRemoveId) |
116 | 70 | { |
... | ... | @@ -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 | 168 | function load_content(id) { |
405 | - ShowProgressAnimation(); | |
406 | 169 | $('#add-table-elem-dialog').dialog('close'); |
407 | 170 | if(lemma_id != id) |
408 | 171 | $('#ready-note-dialog').dialog('close'); |
... | ... | @@ -410,15 +173,17 @@ function load_content(id) { |
410 | 173 | |
411 | 174 | if(window.activeLemmaPanel == 'preview_lemma') |
412 | 175 | { |
176 | + ShowProgressAnimation(); | |
413 | 177 | $('#preview_lemma').load(ajax_lemma_preview, 'id='+id+'&main_lemma_id='+window.lemma_id, function(){ |
414 | 178 | window.prev_lemma_id=id; |
179 | + loadPrevSchemataAndExamples(true); | |
415 | 180 | createSplitter('prevFramesSplit', 'prev-lemma-tables', 'prev_tabs'); |
416 | 181 | areNewPreviewEntriesRelated(); |
417 | - HideProgressAnimation(); | |
418 | 182 | }); |
419 | 183 | } |
420 | 184 | else |
421 | 185 | { |
186 | + ShowProgressAnimation(); | |
422 | 187 | // czyszczenie wartosci |
423 | 188 | window.elem_in_bucket = ''; |
424 | 189 | window.selected_notes_row_id = -1; |
... | ... | @@ -446,10 +211,13 @@ function load_content(id) { |
446 | 211 | window.notesNotSaved = false; |
447 | 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 | 215 | window.lemma_id = id; |
216 | + | |
217 | + loadSchemataAndExamples(); | |
218 | + | |
451 | 219 | createSplitter('framesSplit','new-frame-tables', 'tabs'); |
452 | - if(window.can_modify) | |
220 | + /*if(window.can_modify) | |
453 | 221 | { |
454 | 222 | addSyntacticFramesPerm = user_has_perm('dictionary.add_syntactic_frames'); |
455 | 223 | addPhraseologicFramesPerm = user_has_perm('dictionary.add_phraseologic_frames'); |
... | ... | @@ -464,15 +232,7 @@ function load_content(id) { |
464 | 232 | $(document).bind('keydown', 'shift+d', function(evt){duplicateElement(); return false; }); |
465 | 233 | $(document).bind('keydown', 'shift+c', function(evt){copyElement(); return false; }); |
466 | 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 | 236 | if(addSyntacticFramesPerm) { |
477 | 237 | $(document).bind('keydown', 'shift+x', function(evt){cutElement(); return false; }); |
478 | 238 | $(document).bind('keydown', 'shift+m', function(evt){reserveLemma(); return false; }); |
... | ... | @@ -485,18 +245,14 @@ function load_content(id) { |
485 | 245 | } |
486 | 246 | else |
487 | 247 | { |
488 | - $(document).unbind('keydown') | |
248 | + $(document).unbind('keydown'); | |
489 | 249 | $.get(ajax_user_has_perm, {perm: 'dictionary.own_lemmas'}, function(result) { |
490 | 250 | if(result['has_perm']) { |
491 | 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 | 256 | if(document.getElementById("lemma_example_show")) |
501 | 257 | { |
502 | 258 | draw_nkjp_table(document.getElementById("lemma_example_show"), '', window.nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_') |
... | ... | @@ -506,20 +262,10 @@ function load_content(id) { |
506 | 262 | addPinnedExamplesDialog(); |
507 | 263 | $('#lemma_desc').load(ajax_get_lemma_desc, 'id='+id); |
508 | 264 | areNewPreviewEntriesRelated(); |
509 | - HideProgressAnimation(); | |
510 | 265 | refresh_example_propositions(); |
511 | 266 | }); |
512 | 267 | $('#change_ctrl').load(ajax_change_ctrl, 'id='+id); |
513 | 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 | 269 | $('#status').load(ajax_lemma_status, 'id='+id, function(){ |
524 | 270 | $("#lemma-status-change button").click(validate_and_change_status); |
525 | 271 | $('#ready-note-dialog').dialog({ autoOpen: false, |
... | ... | @@ -539,12 +285,74 @@ function load_content(id) { |
539 | 285 | |
540 | 286 | $('#preview_lemma').load(ajax_lemma_preview, 'id='+prevId+'&main_lemma_id='+id, function(){ |
541 | 287 | window.prev_lemma_id=prevId; |
288 | + loadPrevSchemataAndExamples(false); | |
542 | 289 | createSplitter('prevFramesSplit', 'prev-lemma-tables', 'prev_tabs'); |
543 | 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 | 356 | // klasa reprezentujaca wersje hasla, do cofania i dodawania |
549 | 357 | function Lemma_Version(schemas, nkjp_examples, nkjp_lemma_examples) |
550 | 358 | { |
... | ... | @@ -877,7 +685,7 @@ function needConfirmation(nkjpInstance) { |
877 | 685 | function unpin_nkjp_example(example_tabId) |
878 | 686 | { |
879 | 687 | if(example_tabId != -1 && |
880 | - !checkIfSemChangedAndAlert())// && !exampleGotAssignedSemantics(example_tabId)) | |
688 | + !checkIfSemChangedAndAlert()) | |
881 | 689 | { |
882 | 690 | example_id = example_tabId.replace('nkjp_', ''); |
883 | 691 | for(var i=0; i<window.nkjp_examples.length; i++) |
... | ... | @@ -1014,7 +822,7 @@ function getNkjpLemmaExampleInstance(nkjp_examples, example_id) |
1014 | 822 | } |
1015 | 823 | |
1016 | 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 | 827 | example_id = example_id.replace('nkjp_', ''); |
1020 | 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 | 882 | function addFrameClickEvents(tableClass, tableId) { |
1075 | 883 | selector = 'table.'+tableClass+'#'+tableId+' td'; |
1076 | 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 | 890 | $(selector).click(function(e){ |
1081 | 891 | e.stopPropagation(); |
1082 | 892 | selectTd(this.id)}); |
... | ... | @@ -1106,17 +916,17 @@ function draw_frames(schemas, parent, table_name, nkjp_examples, table_class, le |
1106 | 916 | first = true; |
1107 | 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 | 922 | if(first) |
1113 | 923 | { |
1114 | 924 | div = document.createElement('div'); |
1115 | 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 | 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 | 930 | div.appendChild(strong); |
1121 | 931 | parent.appendChild(div); |
1122 | 932 | first = false; |
... | ... | @@ -1526,11 +1336,7 @@ function can_add_position_category(lemma_id) { |
1526 | 1336 | } |
1527 | 1337 | |
1528 | 1338 | function openEditForm(id) { |
1529 | - if(window.can_modify && !checkIfSemChangedAndAlert()) { | |
1530 | - /*if(schemaGotAssignedSemantics(id)) { | |
1531 | - semanticsAssignedAlert(); | |
1532 | - }*/ | |
1533 | - | |
1339 | + if(!checkIfSemChangedAndAlert()) { | |
1534 | 1340 | editedFrameInstance = getFrameInstance(id, window.schemas); |
1535 | 1341 | elemInstance = getElementInstance(id, window.schemas); |
1536 | 1342 | addSyntacticFramesPerm = user_has_perm('dictionary.add_syntactic_frames'); |
... | ... | @@ -2000,10 +1806,10 @@ function frame_form_submit() { |
2000 | 1806 | else { |
2001 | 1807 | edited_frame = getElementInstance(edited_id, schemas); |
2002 | 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 | 1811 | edited_frame_id = edited_frame['element'].id; |
2006 | - //new_elem_id--; | |
1812 | + new_elem_id--; | |
2007 | 1813 | edited_frame['element'].text_rep = result['text_rep']; |
2008 | 1814 | edited_frame['element'].characteristics = result['characteristics']; |
2009 | 1815 | edited_frame['element'].opinion = result['opinion']; |
... | ... | @@ -3202,125 +3008,6 @@ function escape_regex(str) |
3202 | 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 | 3011 | function draw_filtered_frames(schemas, parent_id, table_id, filter_id, nkjp_examples, table_class, lemma_entry) |
3325 | 3012 | { |
3326 | 3013 | var parent = document.getElementById(parent_id); |
... | ... | @@ -3781,11 +3468,6 @@ function restore_lemma() { |
3781 | 3468 | var assignedExamples = []; |
3782 | 3469 | if(canModifyFrame(window.selected_id, window.schemas) && |
3783 | 3470 | !checkIfSemChangedAndAlert()) { |
3784 | - | |
3785 | - /*if(schemaGotAssignedSemantics(window.selected_id)) { | |
3786 | - semanticsAssignedAlert(); | |
3787 | - }*/ | |
3788 | - | |
3789 | 3471 | assignedExamples = gotAssignedExample(nkjp_examples, selected_id, true); |
3790 | 3472 | if(assignedExamples.length == 0) { |
3791 | 3473 | schemas = removeFrameElement(selected_id, schemas); |
... | ... | @@ -3801,9 +3483,6 @@ function restore_lemma() { |
3801 | 3483 | function addElement() { |
3802 | 3484 | if(!checkIfSemChangedAndAlert() && |
3803 | 3485 | (window.selected_id == -1 || canModifyFrame(window.selected_id, window.schemas))) { |
3804 | - /*if(schemaGotAssignedSemantics(window.selected_id)) { | |
3805 | - semanticsAssignedAlert(); | |
3806 | - }*/ | |
3807 | 3486 | window.schemas = addFrameElementDialog(window.selected_id, window.schemas); |
3808 | 3487 | } |
3809 | 3488 | } |
... | ... | @@ -3941,10 +3620,6 @@ function restore_lemma() { |
3941 | 3620 | if(window.elem_in_bucket && !checkIfSemChangedAndAlert() && |
3942 | 3621 | (window.selected_id == -1 || |
3943 | 3622 | canModifyFrame(window.selected_id, window.schemas))) { |
3944 | - | |
3945 | - /*if(schemaGotAssignedSemantics(window.selected_id)) { | |
3946 | - semanticsAssignedAlert(); | |
3947 | - }*/ | |
3948 | 3623 | pasteFrameElement(selected_id, elem_in_bucket, schemas); |
3949 | 3624 | } |
3950 | 3625 | } |
... | ... | @@ -3975,12 +3650,6 @@ function restore_lemma() { |
3975 | 3650 | canModifyFrame(window.selected_id, window.schemas) && |
3976 | 3651 | !checkIfSemChangedAndAlert()) |
3977 | 3652 | { |
3978 | - /*if(getElementInstance(selected_id, schemas)['type'] != 'frame' && | |
3979 | - schemaGotAssignedSemantics(selected_id)) { | |
3980 | - semanticsAssignedAlert(); | |
3981 | - return; | |
3982 | - }*/ | |
3983 | - | |
3984 | 3653 | elem_in_bucket = getElementInstance(selected_id, schemas); |
3985 | 3654 | |
3986 | 3655 | var parent_elem = getParentInstance(selected_id, schemas); |
... | ... | @@ -4093,7 +3762,7 @@ function restore_lemma() { |
4093 | 3762 | |
4094 | 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 | 3767 | example_id = selected_example_id.replace('nkjp_', ''); |
4099 | 3768 | for(var i=0; i<nkjp_examples.length; i++) |
... | ... | @@ -4128,7 +3797,7 @@ function restore_lemma() { |
4128 | 3797 | function delete_all_nkjp_examples(frame_id) |
4129 | 3798 | { |
4130 | 3799 | if(canModifyFrame(frame_id, window.schemas) && |
4131 | - !checkIfSemChangedAndAlert())// && !schemaGotAssignedSemantics(frame_id)) | |
3800 | + !checkIfSemChangedAndAlert()) | |
4132 | 3801 | { |
4133 | 3802 | var new_example_tab = new Array(); |
4134 | 3803 | for(var i=0; i<nkjp_examples.length; i++) |
... | ... | @@ -4187,7 +3856,7 @@ function restore_lemma() { |
4187 | 3856 | |
4188 | 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 | 3861 | var example = ''; |
4193 | 3862 | for(var i=0; i<window.nkjp_examples.length; i++) |
... | ... |
dictionary/static/js/lemma_grid.js
... | ... | @@ -61,7 +61,6 @@ $(function(){ |
61 | 61 | window['remap']? remap : undefined}, |
62 | 62 | |
63 | 63 | gridComplete: function() { |
64 | - //grid.jqGrid('sortGrid', grid.jqGrid('getGridParam','sortname'), false, grid.jqGrid('getGridParam','sortorder')); | |
65 | 64 | var lemma_id = window.lemma_id; |
66 | 65 | var lastSelectedId = window.lastSelectedId; |
67 | 66 | if(window.activeLemmaPanel == 'preview_lemma') { |
... | ... | @@ -156,7 +155,7 @@ $(function(){ |
156 | 155 | $('#search-panel-dialog').dialog( "option", "title", "Sortowanie haseł:" ).load(ajax_sort_form).dialog('open'); |
157 | 156 | }); |
158 | 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 | 161 | $("#show-columns-button").click(function(){ |
... | ... | @@ -199,128 +198,6 @@ function createSearchDialog() { |
199 | 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 | 201 | function sort_form_submit() { |
325 | 202 | this_form = $(this); |
326 | 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 | 1 | function semanticsAssignedAlert() { |
24 | 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 | 5 | function semanticsAssignedExampleAlert() { |
50 | 6 | error_alert('Działaj rozważnie, przykład jest wykorzystywany w ramach semantycznych.'); |
51 | 7 | } |
... | ... |
dictionary/teixml.py
1 | 1 | #-*- coding:utf-8 -*- |
2 | 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 | 4 | import datetime |
29 | -import operator | |
30 | 5 | |
31 | 6 | from lxml import etree |
32 | 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 | 10 | sortArguments, sortatributes, sortPositions, sort_positions |
37 | 11 | |
38 | 12 | XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace' |
... | ... | @@ -41,7 +15,6 @@ XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace' |
41 | 15 | def createteixml(outpath, lemmas, frame_opinion_values): |
42 | 16 | root = write_root() |
43 | 17 | write_header(root) |
44 | - #lemmas = lemmas.filter(entry=u'brnąć') | |
45 | 18 | write_entries(root, lemmas, frame_opinion_values) |
46 | 19 | with open(outpath, 'w') as output_file: |
47 | 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 | 65 | |
93 | 66 | write_syntactic_layer(entry_elem, lemma, frame_opinions, frame_opinion_values) |
94 | 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 | 73 | def write_syntactic_layer(entry_elem, lemma, frame_opinions, frame_opinion_values): |
100 | 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 | 87 | pred_val=pred_val, |
114 | 88 | aspect_val=aspect_val).order_by('text_rep') |
115 | 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 | 93 | write_schema(vColl_elem, frame, lemma) |
119 | 94 | |
120 | 95 | def write_schema(parent_elem, schema, lemma): |
121 | - | |
122 | 96 | schema_xml_id = 'wal_%s.%s-sch' % (str(lemma.entry_obj.id), str(schema.id)) |
123 | 97 | |
124 | 98 | schema_fs_elem = etree.SubElement(parent_elem, 'fs') |
125 | 99 | schema_fs_elem.attrib[etree.QName(XML_NAMESPACE, 'id')] = schema_xml_id |
126 | 100 | schema_fs_elem.attrib['type'] = 'schema' |
127 | - # opinia o ramce | |
101 | + # opinia o schemacie | |
128 | 102 | try: |
129 | 103 | schema_opinion = lemma.frame_opinions.filter(frame=schema).all()[0].value.short |
130 | 104 | except IndexError: |
... | ... | @@ -420,20 +394,24 @@ def write_examples_layer(parent_elem, lemma): |
420 | 394 | write_examples_feature(vColl_elem, lemma) |
421 | 395 | |
422 | 396 | def write_examples_feature(parent_elem, lemma): |
423 | - entry = lemma.entry_obj | |
424 | 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 | 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 | 407 | example_xml_id = u'wal_%s.%s-exm' % (str(entry.id), str(example.id)) |
431 | 408 | |
432 | 409 | example_fs_elem = etree.SubElement(parent_elem, 'fs') |
433 | 410 | example_fs_elem.attrib[etree.QName(XML_NAMESPACE, 'id')] = example_xml_id |
434 | 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 | 415 | write_phrases_links(example_fs_elem, entry, example) |
438 | 416 | |
439 | 417 | sentence_f_elem = etree.SubElement(example_fs_elem, 'f') |
... | ... | @@ -441,7 +419,6 @@ def write_example(parent_elem, entry, example): |
441 | 419 | sentence_content_elem = etree.SubElement(sentence_f_elem, 'string') |
442 | 420 | sentence_content_elem.text = escape(example.sentence) |
443 | 421 | |
444 | - # trzeba do zrodel dodac nazwy symboliczne | |
445 | 422 | source_f_elem = etree.SubElement(example_fs_elem, 'f') |
446 | 423 | source_f_elem.attrib['name'] = 'source' |
447 | 424 | source_symbol_elem = etree.SubElement(source_f_elem, 'symbol') |
... | ... | @@ -460,8 +437,9 @@ def write_example(parent_elem, entry, example): |
460 | 437 | |
461 | 438 | def get_and_write_meaning_link(parent_elem, entry, example): |
462 | 439 | try: |
440 | + entry_lex_units = entry.meanings.all() | |
463 | 441 | lex_unit_example = LexicalUnitExamples.objects.get(example=example, |
464 | - lexical_unit__base=entry.name) | |
442 | + lexical_unit__in=entry_lex_units) | |
465 | 443 | meaning = lex_unit_example.lexical_unit |
466 | 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 | 496 | frame_fs_elem.attrib[etree.QName(XML_NAMESPACE, 'id')] = frame_xml_id |
519 | 497 | frame_fs_elem.attrib['type'] = 'frame' |
520 | 498 | |
499 | + write_frame_opinion(frame_fs_elem, frame) | |
521 | 500 | write_frame_meanings(frame_fs_elem, entry, frame) |
522 | 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 | 512 | def write_frame_meanings(parent_elem, entry, frame): |
525 | 513 | meanings_f_elem = etree.SubElement(parent_elem, 'f') |
526 | 514 | meanings_f_elem.attrib['name'] = 'meanings' |
... | ... | @@ -686,8 +674,7 @@ def write_meanings_layer(parent_elem, lemma): |
686 | 674 | |
687 | 675 | def write_meanings(parent_elem, lemma): |
688 | 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 | 678 | write_meaning(parent_elem, entry, lex_unit) |
692 | 679 | |
693 | 680 | def write_meaning(parent_elem, entry, lex_unit): |
... | ... | @@ -733,39 +720,30 @@ def write_connections_layer(parent_elem, lemma): |
733 | 720 | def write_alternations(parent_elem, lemma): |
734 | 721 | entry = lemma.entry_obj |
735 | 722 | frames = entry.actual_frames() |
736 | - | |
737 | 723 | for schema in lemma.frames.all(): |
738 | 724 | for frame in frames: |
739 | 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 | 748 | def write_connection(parent_elem, entry, frame, arg, realizations): |
771 | 749 | connection_fs_elem = etree.SubElement(parent_elem, 'fs') |
... | ... | @@ -794,158 +772,5 @@ def write_phrases(parent_elem, entry, realizations): |
794 | 772 | realization.position.id, realization.argument.id) |
795 | 773 | phrase_link_elem = etree.SubElement(vColl_elem, 'fs') |
796 | 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 | 777 | \ No newline at end of file |
... | ... |