From c2cbd719f2cfdcc3da575e56a8b87aeb6978d65a Mon Sep 17 00:00:00 2001
From: Bartłomiej Nitoń <bartomiej@raven.(none)>
Date: Tue, 13 Oct 2015 12:22:42 +0200
Subject: [PATCH] Added schema opinion to schemata filter.

---
 dictionary/ajax_lemma_view.py                    | 41 ++++++++++++++++++++++++-----------------
 dictionary/management/commands/create_walenty.py | 19 ++++++++++---------
 dictionary/static/js/lemma-view.js               | 29 ++++++++++++++++++++++++++++-
 dictionary/static/js/lemma_grid.js               |  8 ++++++++
 dictionary/templates/lemma_preview.html          |  6 +++++-
 dictionary/templates/new_frames.html             |  4 ++++
 6 files changed, 79 insertions(+), 28 deletions(-)

diff --git a/dictionary/ajax_lemma_view.py b/dictionary/ajax_lemma_view.py
index 0a91099..37f9a6e 100644
--- a/dictionary/ajax_lemma_view.py
+++ b/dictionary/ajax_lemma_view.py
@@ -316,35 +316,31 @@ def get_frame_filter_options(request):
   # pobieranie wartosci aspektu
   aspect_model = Frame_Char_Model.objects.get(model_name=u'ASPEKT')
   aspect_vals_objs = aspect_model.frame_char_values.order_by('-priority')
-  aspect_str_list = []
-  for aspect_val in aspect_vals_objs:
-    aspect_str_list.append(aspect_val.value)
+  aspect_str_list = [val.value for val in aspect_vals_objs]
   
   # pobieranie wartosci zwrotnosci
   reflex_model = Frame_Char_Model.objects.get(model_name=u'ZWROTNOŚĆ')
   reflex_vals_objs = reflex_model.frame_char_values.order_by('-priority')
-  reflex_str_list = []
-  for reflex_val in reflex_vals_objs:
-    reflex_str_list.append(reflex_val.value)
+  reflex_str_list = [val.value for val in reflex_vals_objs]
     
   # pobieranie wartosci negatywnosci
   neg_model = Frame_Char_Model.objects.get(model_name=u'NEGATYWNOŚĆ')
   neg_vals_objs = neg_model.frame_char_values.order_by('-priority')
-  neg_str_list = []
-  for neg_val in neg_vals_objs:
-    neg_str_list.append(neg_val.value)
+  neg_str_list = [val.value for val in neg_vals_objs]
     
   # pobieranie wartosci predykatywnosci
   pred_model = Frame_Char_Model.objects.get(model_name=u'PREDYKATYWNOŚĆ')
   pred_vals_objs = pred_model.frame_char_values.order_by('-priority')
-  pred_str_list = []
-  for pred_val in pred_vals_objs:
-    pred_str_list.append(pred_val.value)
+  pred_str_list = [val.value for val in pred_vals_objs]
+    
+  # pobieranie opinii o schemacie
+  opinion_str_list = [val.value for val in Frame_Opinion_Value.objects.order_by('priority')]
   
   return {'reflex_options': reflex_str_list,
           'aspect_options': aspect_str_list,
-          'neg_options'   : neg_str_list,
-          'pred_options'  : pred_str_list}
+          'neg_options': neg_str_list,
+          'pred_options': pred_str_list,
+          'opinion_options': opinion_str_list}
     
 
 @render('lemma_desc.html')
@@ -938,8 +934,10 @@ def filter_form_submit(request, form_data):
   
   if filter_dict['frame_opinion']:
     frame_opinion_obj = Frame_Opinion_Value.objects.get(id=filter_dict['frame_opinion'])
+    opinion_val = frame_opinion_obj.value
   else:
     frame_opinion_obj = None
+    opinion_val = '*'
   
   if 'frame_phraseologic' in filter_dict:
       frame_phraseologic = filter_dict['frame_phraseologic']
@@ -987,6 +985,7 @@ def filter_form_submit(request, form_data):
           'reflex'       : reflex_val,
           'negativity'   : negativity_val,
           'predicativity': pred_val,
+          'opinion'      : opinion_val,
           'aspect'       : aspect_val,
           'position'     : filter_dict['has_position'],
           'argument'     : filter_dict['has_argument']}
@@ -2793,6 +2792,8 @@ def pos_regex_frames(frames, string):
                         possible_frames = possible_frames.exclude(positions__in=model_results)
                     else:
                         possible_frames = possible_frames.filter(positions__in=model_results)
+                elif not model_results.exists() and not negation:
+                    possible_frames = Frame.objects.none()
             alternative_queries.append(Q(id__in=possible_frames))
         frames = frames.filter(reduce(operator.or_, alternative_queries)).distinct()
     except:
@@ -2819,6 +2820,8 @@ def arg_regex_frames(frames, string):
                         possible_frames = possible_frames.exclude(positions__arguments__in=model_results)
                     else:
                         possible_frames = possible_frames.filter(positions__arguments__in=model_results)
+                elif not model_results.exists() and not negation:
+                    possible_frames = Frame.objects.none()
             alternative_queries.append(Q(id__in=possible_frames))
         frames = frames.filter(reduce(operator.or_, alternative_queries)).distinct()
     except:
@@ -2860,7 +2863,7 @@ def get_lemma_query(prepared_sort_rules, filter_rules, lemma_query, user):
   if filter_rules['frame_opinion']:
     lemmas = lemmas.filter(frame_opinions__value=filter_rules['frame_opinion']) 
  
-  frames = Frame.objects
+  frames = Frame.objects.all()
   if filter_rules['reflex']:
     frames = frames.filter(characteristics=filter_rules['reflex'])
   if filter_rules['negativity']:
@@ -2878,10 +2881,14 @@ def get_lemma_query(prepared_sort_rules, filter_rules, lemma_query, user):
      
   if (filter_rules['reflex'] or filter_rules['negativity'] or 
       filter_rules['aspect'] or filter_rules['predicativity'] or
-      filter_rules['frame_phraseologic'] or
+      filter_rules['frame_phraseologic'] or filter_rules['frame_opinion'] or
       (filter_rules['argument'] and filter_rules['argument'] != '.*') or
       (filter_rules['position'] and filter_rules['position'] != '.*')):
-    lemmas = lemmas.filter(frames__in=frames).distinct()
+    if filter_rules['frame_opinion']:
+        lemmas = lemmas.filter(frame_opinions__frame__in=frames,
+                               frame_opinions__value=filter_rules['frame_opinion']).distinct()
+    else:
+        lemmas = lemmas.filter(frames__in=frames).distinct()
     
   if filter_rules['sender']:
     lemmas = lemmas.filter(messages__sender=filter_rules['sender'])
diff --git a/dictionary/management/commands/create_walenty.py b/dictionary/management/commands/create_walenty.py
index b55a9c6..2b94495 100644
--- a/dictionary/management/commands/create_walenty.py
+++ b/dictionary/management/commands/create_walenty.py
@@ -43,23 +43,24 @@ class Command(BaseCommand):
         now = datetime.datetime.now().strftime('%Y%m%d')
         filename_base = '%s_%s' % ('walenty', now)
         realizations_path = os.path.join(WALENTY_PATH, 
-                                     '   %s_%s.txt' % ('phrase_types_expand', now))
+                                         '%s_%s.txt' % ('phrase_types_expand', now))
         checked_stats_path = os.path.join(WALENTY_PATH, u'%s_%s.txt' % (filename_base.replace('walenty', 'stats'), 
                                                                         'verified'))
         ready_stats_path = os.path.join(WALENTY_PATH, u'%s_%s.txt' % (filename_base.replace('walenty', 'stats'), 
                                                                       'all'))
-        create_realizations_file(realizations_path)
         try:
             all_stats = Counter({})
             verified_stats = Counter({})
             base_path = os.path.join(WALENTY_PATH, filename_base)
             archive = tarfile.open(base_path + '.tar.gz', 'w:gz')
             os.chdir(WALENTY_PATH)
-            archive.add(os.path.basename(realizations_path))
             for pos in POS.objects.exclude(tag=u'unk').order_by('priority'):
                 pos_stats = create_pos_archive_and_get_stats(archive, pos, filename_base)
                 all_stats = all_stats + Counter(pos_stats['all'])
                 verified_stats = verified_stats + Counter(pos_stats['verified'])
+            
+            create_realizations_file(realizations_path)
+            archive.add(os.path.basename(realizations_path))
             write_stats(checked_stats_path, verified_stats)
             archive.add(os.path.basename(checked_stats_path))
             write_stats(ready_stats_path, all_stats)
@@ -107,21 +108,21 @@ def create_pos_archive_and_get_stats(archive, pos, filename_base):
         archive.add(name=checked_filename, arcname=os.path.join(u'%ss' % pos.tag, checked_filename))
         
         all_stats = get_stats(ready_statuses, pos.tag)
-        all_stats_path = os.path.join(WALENTY_PATH, u'%s_%ss_%s' % (filename_base.replace('walenty', 'stats'), 
-                                                                    pos.tag, 'all'))
+        all_stats_path = os.path.join(WALENTY_PATH, u'%s_%ss_%s.txt' % (filename_base.replace('walenty', 'stats'), 
+                                                                        pos.tag, 'all'))
         write_stats(all_stats_path, all_stats)
         all_stats_filename = os.path.basename(all_stats_path)
         archive.add(name=all_stats_filename, arcname=os.path.join(u'%ss' % pos.tag, all_stats_filename))
         
         checked_stats = get_stats(checked_statuses, pos.tag)
-        checked_stats_path = os.path.join(WALENTY_PATH, u'%s_%ss_%s' % (filename_base.replace('walenty', 'stats'), 
-                                                                        pos.tag, 'verified'))
+        checked_stats_path = os.path.join(WALENTY_PATH, u'%s_%ss_%s.txt' % (filename_base.replace('walenty', 'stats'), 
+                                                                            pos.tag, 'verified'))
         write_stats(checked_stats_path, checked_stats)
         checked_stats_filename = os.path.basename(checked_stats_path)
         archive.add(name=checked_stats_filename, arcname=os.path.join(u'%ss' % pos.tag, checked_stats_filename))
     finally:
-        os.remove(walenty_path_ready)
-        os.remove(walenty_path_checked)
+#        os.remove(walenty_path_ready)
+#        os.remove(walenty_path_checked)
         os.remove(all_stats_path)
         os.remove(checked_stats_path)
         return {'all': all_stats,
diff --git a/dictionary/static/js/lemma-view.js b/dictionary/static/js/lemma-view.js
index 5636c54..558740b 100644
--- a/dictionary/static/js/lemma-view.js
+++ b/dictionary/static/js/lemma-view.js
@@ -26,16 +26,19 @@ var nkjp_source_tab = ax_nkjp_source_vals;
  var reflex_vals = [];
  var neg_vals = [];
  var pred_vals = [];
+ var opinion_vals = [];
  var filter_aspect_val = '*';
  var filter_reflex_val = '*';
  var filter_neg_val = '*';
  var filter_pred_val = '*';
+ var filter_opinion_val = '*';
  var filter_position_val = '.*';
  var filter_argument_val = '.*';
  var prev_filter_aspect_val = '*';
  var prev_filter_reflex_val = '*';
  var prev_filter_neg_val = '*';
  var prev_filter_pred_val = '*';
+ var prev_filter_opinion_val = '*';
  var prev_filter_position_val = '.*';
  var prev_filter_argument_val = '.*';
  var prev_lemma_id = -1;
@@ -86,10 +89,12 @@ function initiateFrameFilters()
            window.reflex_vals = ['*'];
            window.neg_vals = ['*'];
            window.pred_vals = ['*'];
+           window.opinion_vals = ['*'];
            $.merge(window.aspect_vals, result['aspect_options']);
            $.merge(window.reflex_vals, result['reflex_options']);
            $.merge(window.neg_vals, result['neg_options']);
            $.merge(window.pred_vals, result['pred_options']);
+           $.merge(window.opinion_vals, result['opinion_options']);
          },
      
          error_callback: function(xhr, status, error) {
@@ -205,6 +210,7 @@ function filter_update(id)
 	    window.filter_reflex_val = $('#frame_filter #reflex_filter').val();
 	    window.filter_neg_val = $('#frame_filter #neg_filter').val();
 	    window.filter_pred_val = $('#frame_filter #pred_filter').val();
+	    window.filter_opinion_val = $('#frame_filter #opinion_filter').val();
 	    window.filter_position_val = $('#frame_filter #position_filter').val();
 	    window.filter_argument_val = $('#frame_filter #argument_filter').val();
 	}
@@ -214,6 +220,7 @@ function filter_update(id)
 	    window.prev_filter_reflex_val = $('#prev_frame_filter #reflex_filter').val();
 	    window.prev_filter_neg_val = $('#prev_frame_filter #neg_filter').val();
 	    window.prev_filter_pred_val = $('#prev_frame_filter #pred_filter').val();
+	    window.prev_filter_opinion_val = $('#prev_frame_filter #opinion_filter').val();
 	    window.prev_filter_position_val = $('#prev_frame_filter #position_filter').val();
 	    window.prev_filter_argument_val = $('#prev_frame_filter #argument_filter').val();
 	}
@@ -289,6 +296,22 @@ function draw_frames_filter(id)
     frame_filter.appendChild(p);
     
     p = document.createElement('p');
+    text = document.createTextNode("Opinia: ");
+    p.appendChild(text);
+    select = document.createElement('select');
+    select.setAttribute('id', 'opinion_filter');
+    select.setAttribute('name', 'OPINIA');
+    p.appendChild(select);
+    for(var i=0; i<opinion_vals.length; i++)
+    {
+      var option = document.createElement('option');
+      option.setAttribute('value', opinion_vals[i]);
+      option.appendChild(document.createTextNode(opinion_vals[i]));
+      select.appendChild(option);
+    }
+    frame_filter.appendChild(p);
+    
+    p = document.createElement('p');
     text = document.createTextNode("Typ frazy: ");
     p.appendChild(text);
     select = document.createElement('input');
@@ -312,6 +335,7 @@ function draw_frames_filter(id)
       $('#frame_filter #reflex_filter').val(window.filter_reflex_val);
       $('#frame_filter #neg_filter').val(window.filter_neg_val);
       $('#frame_filter #pred_filter').val(window.filter_pred_val);
+      $('#frame_filter #opinion_filter').val(window.filter_opinion_val);
       $('#frame_filter #position_filter').val(window.filter_position_val);
       $('#frame_filter #argument_filter').val(window.filter_argument_val);
 	}
@@ -321,6 +345,7 @@ function draw_frames_filter(id)
       $('#prev_frame_filter #reflex_filter').val(window.prev_filter_reflex_val);
       $('#prev_frame_filter #neg_filter').val(window.prev_filter_neg_val);
       $('#prev_frame_filter #pred_filter').val(window.prev_filter_pred_val);
+      $('#prev_frame_filter #opinion_filter').val(window.prev_filter_opinion_val);
       $('#prev_frame_filter #position_filter').val(window.prev_filter_position_val);
       $('#prev_frame_filter #argument_filter').val(window.prev_filter_argument_val);
 	}
@@ -3287,6 +3312,7 @@ function filter_frames(schemas, filter_id)
   var reflex_val = $('#'+filter_id+' #reflex_filter').val();
   var neg_val = $('#'+filter_id+' #neg_filter').val();
   var pred_val = $('#'+filter_id+' #pred_filter').val();
+  var opinion_val = $('#'+filter_id+' #opinion_filter').val();
   var position_val = $('#'+filter_id+' #position_filter').val().trim();
   var argument_val = $('#'+filter_id+' #argument_filter').val().trim();
   var filtered_frames = new Array();
@@ -3301,7 +3327,8 @@ function filter_frames(schemas, filter_id)
     if((schemas[i].characteristics[3] == aspect_val || aspect_val == '*') 
       && (schemas[i].characteristics[0] == reflex_val || reflex_val == '*')
       && (schemas[i].characteristics[1] == neg_val || neg_val == '*')
-      && (schemas[i].characteristics[2] == pred_val || pred_val == '*'))
+      && (schemas[i].characteristics[2] == pred_val || pred_val == '*')
+      && (schemas[i].opinion == opinion_val || opinion_val == '*'))
     {
       frameMatch = false;
       if(position_val)
diff --git a/dictionary/static/js/lemma_grid.js b/dictionary/static/js/lemma_grid.js
index 5691d32..ad19f55 100644
--- a/dictionary/static/js/lemma_grid.js
+++ b/dictionary/static/js/lemma_grid.js
@@ -276,11 +276,15 @@ function filter_form_submit() {
 		  {
 			  window.prev_filter_reflex_val = result['reflex'];
 			  window.prev_filter_neg_val = result['negativity'];
+			  window.prev_filter_pred_val = result['predicativity'];
+			  window.prev_filter_opinion_val = result['opinion'];
 			  window.prev_filter_aspect_val = result['aspect'];
 			  window.prev_filter_position_val = result['position'];
 			  window.prev_filter_argument_val = result['argument'];
 			  $('#prev_frame_filter #reflex_filter').val(result['reflex']);
 			  $('#prev_frame_filter #neg_filter').val(result['negativity']);
+			  $('#prev_frame_filter #pred_filter').val(result['predicativity']);
+			  $('#prev_frame_filter #opinion_filter').val(result['opinion']);
 			  $('#prev_frame_filter #aspect_filter').val(result['aspect']);
 			  $('#prev_frame_filter #argument_filter').val(result['argument']);
 			  $('#prev_frame_filter #position_filter').val(result['position']);
@@ -290,11 +294,15 @@ function filter_form_submit() {
 		  {
 			  window.filter_reflex_val = result['reflex'];
 			  window.filter_neg_val = result['negativity'];
+			  window.filter_pred_val = result['predicativity'];
+			  window.filter_opinion_val = result['opinion'];
 			  window.filter_aspect_val = result['aspect'];
 			  window.filter_position_val = result['position'];
 			  window.filter_argument_val = result['argument'];  
 			  $('#frame_filter #reflex_filter').val(result['reflex']);
 			  $('#frame_filter #neg_filter').val(result['negativity']);
+			  $('#frame_filter #pred_filter').val(result['predicativity']);
+			  $('#frame_filter #opinion_filter').val(result['opinion']);
 			  $('#frame_filter #aspect_filter').val(result['aspect']);
 			  $('#frame_filter #argument_filter').val(result['argument']);
 			  $('#frame_filter #position_filter').val(result['position']);
diff --git a/dictionary/templates/lemma_preview.html b/dictionary/templates/lemma_preview.html
index 6e2afab..963f9a7 100644
--- a/dictionary/templates/lemma_preview.html
+++ b/dictionary/templates/lemma_preview.html
@@ -137,6 +137,7 @@ function unselectPrevTd(id)
     window.prev_filter_reflex_val = $('#prev_frame_filter #reflex_filter').val();
     window.prev_filter_neg_val = $('#prev_frame_filter #neg_filter').val();
     window.prev_filter_pred_val = $('#prev_frame_filter #pred_filter').val();
+    window.prev_filter_opinion_val = $('#prev_frame_filter #opinion_filter').val();
     window.prev_filter_position_val = $('#prev_frame_filter #position_filter').val();
     window.prev_filter_argument_val = $('#prev_frame_filter #argument_filter').val();
     
@@ -242,6 +243,7 @@ $(document).ready(function() {
     $('#prev_frame_filter #reflex_filter').change(draw_filtered_prev_frames);
     $('#prev_frame_filter #neg_filter').change(draw_filtered_prev_frames);
     $('#prev_frame_filter #pred_filter').change(draw_filtered_prev_frames);
+    $('#prev_frame_filter #opinion_filter').change(draw_filtered_prev_frames);
     $('#prev_frame_filter #argument_filter').change(draw_filtered_prev_frames);
     $('#prev_frame_filter #position_filter').change(draw_filtered_prev_frames);
     $('#prev_filter_frames_options #options').click(function(event) {
@@ -253,13 +255,15 @@ $(document).ready(function() {
 	    window.prev_filter_aspect_val = '*';
 	    window.prev_filter_reflex_val = '*';
 	    window.prev_filter_neg_val = '*';
-	    window.prev_filter_pred_val = '*';
+	    window.prev_filter_pred_val = '*'; 
+	    window.prev_filter_opinion_val = '*';
 	    $('#prev_frame_filter #argument_filter').val(window.prev_filter_argument_val);
 	    $('#prev_frame_filter #position_filter').val(window.prev_filter_position_val);
 	    $('#prev_frame_filter #aspect_filter').val(window.prev_filter_aspect_val);
 	    $('#prev_frame_filter #reflex_filter').val(window.prev_filter_reflex_val);
 	    $('#prev_frame_filter #neg_filter').val(window.prev_filter_neg_val);
 	    $('#prev_frame_filter #pred_filter').val(window.prev_filter_pred_val);
+	    $('#prev_frame_filter #opinion_filter').val(window.prev_filter_opinion_val);
 	    $('#prev_frame_filter #argument_filter').trigger('change');
     }); 
     draw_filtered_prev_frames();
diff --git a/dictionary/templates/new_frames.html b/dictionary/templates/new_frames.html
index 5233a14..5b2753a 100644
--- a/dictionary/templates/new_frames.html
+++ b/dictionary/templates/new_frames.html
@@ -38,6 +38,7 @@
     window.filter_reflex_val = $('#frame_filter #reflex_filter').val();
     window.filter_neg_val = $('#frame_filter #neg_filter').val();
     window.filter_pred_val = $('#frame_filter #pred_filter').val();
+    window.filter_opinion_val = $('#frame_filter #opinion_filter').val();
     window.filter_position_val = $('#frame_filter #position_filter').val();
     window.filter_argument_val = $('#frame_filter #argument_filter').val();
     
@@ -289,6 +290,7 @@ $(document).ready(function() {
     $('#frame_filter #reflex_filter').change(draw_filtered_new_frames);
     $('#frame_filter #neg_filter').change(draw_filtered_new_frames);
     $('#frame_filter #pred_filter').change(draw_filtered_new_frames);
+    $('#frame_filter #opinion_filter').change(draw_filtered_new_frames);
     $('#frame_filter #argument_filter').change(draw_filtered_new_frames);
     $('#frame_filter #position_filter').change(draw_filtered_new_frames);
     $('#filter_frames_options #options').click(function(event) {
@@ -301,12 +303,14 @@ $(document).ready(function() {
 	    window.filter_reflex_val = '*';
 	    window.filter_neg_val = '*';
 	    window.filter_pred_val = '*';
+	    window.filter_opinion_val = '*';
 	    $('#frame_filter #argument_filter').val(window.filter_argument_val);
 	    $('#frame_filter #position_filter').val(window.filter_position_val);
 	    $('#frame_filter #aspect_filter').val(window.filter_aspect_val);
 	    $('#frame_filter #reflex_filter').val(window.filter_reflex_val);
 	    $('#frame_filter #neg_filter').val(window.filter_neg_val);
 	    $('#frame_filter #pred_filter').val(window.filter_pred_val);
+	    $('#frame_filter #opinion_filter').val(window.filter_opinion_val);
 	    $('#frame_filter #argument_filter').trigger('change');
     }); 
   
--
libgit2 0.22.2