#-*- coding:utf-8 -*-
# author: B.Niton

import codecs
import operator
from collections import Counter

from django.core.management.base import BaseCommand

from dictionary.models import *

#PHRASEOLOGIC_TYPES = ['comprepnp', 'preplexnp', 'lexnp', 'lex',
#                      'fixed']

class Command(BaseCommand):
    help = 'Get slowal statistics.'

    def handle(self, **options):
        all_statuses = [Q(status__status=u'gotowe'),
                        Q(status__status=u'zalążkowe'),
                        Q(status__status=u'sprawdzone'),
                        Q(status__status=u'(F) w obróbce'), 
                        Q(status__status=u'(F) gotowe'),
                        Q(status__status=u'(F) sprawdzone'),
                        Q(status__status=u'(S) w obróbce'), 
                        Q(status__status=u'(S) gotowe'),
                        Q(status__status=u'(S) sprawdzone')]
        verified_statuses = [Q(status__status=u'zalążkowe'),
                             Q(status__status=u'sprawdzone'),
                             Q(status__status=u'(F) w obróbce'), 
                             Q(status__status=u'(F) gotowe'),
                             Q(status__status=u'(F) sprawdzone'),
                             Q(status__status=u'(S) w obróbce'), 
                             Q(status__status=u'(S) gotowe'),
                             Q(status__status=u'(S) sprawdzone')]
        
        nouns_stats_dict_all = Counter(get_nouns_stats('data/statystyki_2015_06_30_nouns_all.txt', all_statuses)) 
        nouns_stats_dict_verified = Counter(get_nouns_stats('data/statystyki_2015_06_30_nouns_verified.txt', verified_statuses)) 

        adjs_stats_dict_all = Counter(get_adjs_stats('data/statystyki_2015_06_30_adjs_all.txt', all_statuses))
        adjs_stats_dict_verified = Counter(get_adjs_stats('data/statystyki_2015_06_30_adjs_verified.txt', verified_statuses))
        
        verbs_stats_dict_all = Counter(get_verb_stats('data/statystyki_2015_06_30_verbs_all.txt', all_statuses))
        verbs_stats_dict_verified = Counter(get_verb_stats('data/statystyki_2015_06_30_verbs_verified.txt', verified_statuses))
        
        advs_stats_dict_all = Counter(get_advs_stats('data/statystyki_2015_06_30_advs_all.txt', all_statuses))
        advs_stats_dict_verified = Counter(get_advs_stats('data/statystyki_2015_06_30_advs_verified.txt', verified_statuses))
        
        all_stats_dict_all = nouns_stats_dict_all + adjs_stats_dict_all + verbs_stats_dict_all + advs_stats_dict_all
        all_stats_dict_verified = nouns_stats_dict_verified + adjs_stats_dict_verified + verbs_stats_dict_verified + advs_stats_dict_verified
        
        write_all_stats('data/statystyki_2015_06_30_all.txt', all_stats_dict_all)
        write_all_stats('data/statystyki_2015_06_30_verified.txt', all_stats_dict_verified)
        
def write_all_stats(stats_path, stats_dict):
    outfile = codecs.open(stats_path, 'wt', 'utf-8')
     
    outfile.write(u'Liczba argumentów:                        ' + str(stats_dict['arg_count']) + '\n')
    outfile.write(u'Liczba pozycji:                           ' + str(stats_dict['pos_count']) + '\n')
    outfile.write(u'Liczba haseł:                             ' + str(stats_dict['lemma_count']) + '\n')
    outfile.write('\n')
    outfile.write(u'Liczba podhaseł:                          ' + str(stats_dict['sub_lemma_count']) + '\n')
    
    outfile.write(u'Liczba podhaseł postaci (ZWROTNOŚĆ, NEGATYWNOŚĆ, PREDYKATYWNOŚĆ, ASPEKT)\n')
    
    outfile.write(u'Liczba podhaseł postaci (się, _, , imperf):      ' + str(stats_dict['sub_sie_imperf_oboj']) + '\n')
    outfile.write(u'Liczba podhaseł postaci (się, _, , perf):        ' + str(stats_dict['sub_sie_perf_oboj']) + '\n')
    outfile.write(u'Liczba podhaseł postaci (się, _, , _):           ' + str(stats_dict['sub_sie_oboj_oboj']) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , _, , imperf):        ' + str(stats_dict['sub_imperf_oboj']) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , _, , perf):          ' + str(stats_dict['sub_perf_oboj']) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , _, , _):             ' + str(stats_dict['sub_oboj_oboj']) + '\n')
    
    outfile.write(u'Liczba podhaseł postaci (się, neg, , imperf):    ' + str(stats_dict['sub_sie_imperf_neg']) + '\n')
    outfile.write(u'Liczba podhaseł postaci (się, neg, , perf):      ' + str(stats_dict['sub_sie_perf_neg']) + '\n')
    outfile.write(u'Liczba podhaseł postaci (się, neg, , _):         ' + str(stats_dict['sub_sie_oboj_neg']) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , neg, , imperf):      ' + str(stats_dict['sub_imperf_neg']) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , neg, , perf):        ' + str(stats_dict['sub_perf_neg']) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , neg, , _):           ' + str(stats_dict['sub_oboj_neg']) + '\n')
    
    outfile.write(u'Liczba podhaseł postaci (się, aff, , imperf):    ' + str(stats_dict['sub_sie_imperf_aff']) + '\n')
    outfile.write(u'Liczba podhaseł postaci (się, aff, , perf):      ' + str(stats_dict['sub_sie_perf_aff']) + '\n')
    outfile.write(u'Liczba podhaseł postaci (się, aff, , _):         ' + str(stats_dict['sub_sie_oboj_aff']) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , aff, , imperf):      ' + str(stats_dict['sub_imperf_aff']) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , aff, , perf):        ' + str(stats_dict['sub_perf_aff']) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , aff, , _):           ' + str(stats_dict['sub_oboj_aff']) + '\n')
    
    outfile.write(u'Liczba podhaseł postaci ( , , pred, ):           ' + str(stats_dict['pred_lemma']) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , , , ):               ' + str(stats_dict['npred_lemma']) + '\n')
    
    outfile.write('\n')
    outfile.write(u'Liczba ramek:                             ' + str(stats_dict['all_frames']) + '\n')
    outfile.write(u'Liczba ramek pewnych:                     ' + str(stats_dict['pewna_frames']) + '\n')
    outfile.write(u'Liczba ramek wątpliwych:                  ' + str(stats_dict['watpliwa_frames']) + '\n')
    outfile.write(u'Liczba ramek złych:                       ' + str(stats_dict['zla_frames']) + '\n')
    outfile.write(u'Liczba ramek archaicznych:                ' + str(stats_dict['arch_frames']) + '\n')
    outfile.write(u'Liczba ramek potocznych:                  ' + str(stats_dict['potoczna_frames']) + '\n')
    outfile.write(u'Liczba ramek wulgarnych:                  ' + str(stats_dict['wulgarna_frames']) + '\n')
    outfile.write('\n')
    outfile.write(u'Liczba pozycji z większą niż jeden liczbą argumentów: ' + str(stats_dict['spec_pos']) + '\n')
    outfile.write(u'Liczba argumentów występujących w pozycjach o większej niż jeden liczbie argumentów: ' + str(stats_dict['spec_args']) + '\n')
    outfile.write(u'Liczba ramek z pozycjami wieloargumentowymi: ' + str(stats_dict['spec_frames']) + '\n')
    outfile.write('\n')
    outfile.write(u'Liczba pozycji z większą niż jeden liczbą specyfikacji: ' + str(stats_dict['spec_pos_up']) + '\n')
    outfile.write(u'Liczba argumentów występujących w pozycjach o większej niż jeden liczbie specyfikacji: ' + str(stats_dict['spec_args_up']) + '\n')
    outfile.write(u'Liczba ramek z pozycjami o większej niż jeden liczbie specyfikacji: ' + str(stats_dict['spec_frames_up']) + '\n')
    outfile.write(u'Liczba ramek frazeologicznych: ' + str(stats_dict['frames_with_phraseology']) + '\n')
    outfile.write('\n')
    outfile.write(u'Hasła zawierające schematy frazeologiczne: ' + str(stats_dict['lemmas_with_phraseology']) + '\n')
    outfile.write(u'Hasła zawierające pozycje z koordynacją: ' + str(stats_dict['lemmas_with_coordination']) + '\n')
    
    outfile.close()

def get_adjs_stats(stats_path, q_statuses):
    print 'Be patient, it can take a while.'
    outfile = codecs.open(stats_path, 'wt', 'utf-8')
    arg_count = 0
    pos_count = 0
    lemma_count = 0
########################
    sub_lemma_count = 0

    pred_lemma = 0
    npred_lemma = 0
##################
    pewna_frames = 0
    watpliwa_frames = 0
    zla_frames = 0
    arch_frames = 0
    potoczna_frames = 0
    wulgarna_frames = 0
    all_frames = 0
    
    spec_frames = 0
    spec_pos = 0
    spec_args = 0
    
    spec_frames_up = 0
    spec_pos_up = 0
    spec_args_up = 0
    
    lemmas_with_phraseology = 0
    lemmas_with_coordination = 0
    
    frames_with_phraseology = 0
    
    lemmas = Lemma.objects.filter(old=False, 
                                  entry_obj__pos__tag='adj').filter(reduce(operator.or_, q_statuses)).distinct().order_by('entry').all()
    for lemma in lemmas:
        print lemma
        lemma_count += 1
        
        pewna_frames += lemma.frame_opinions.filter(value__value=u'pewny').count()
        watpliwa_frames += lemma.frame_opinions.filter(value__value=u'wątpliwy').count()
        zla_frames += lemma.frame_opinions.filter(value__value=u'zły').count()
        arch_frames += lemma.frame_opinions.filter(value__value=u'archaiczny').count()
        potoczna_frames += lemma.frame_opinions.filter(value__value=u'potoczny').count()
        wulgarna_frames += lemma.frame_opinions.filter(value__value=u'wulgarny').count()
        all_frames += lemma.frames.count()
#        if (lemma.frames.count() != lemma.frame_opinions.filter(value__value=u'pewna').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'wątpliwa').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'zła').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'archaiczna').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'potoczna').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'wulgarna').count()):
#            print lemma
#            print lemma.frame_opinions.filter(value__value=u'pewna').count() 
#            print lemma.frame_opinions.filter(value__value=u'wątpliwa').count() 
#            print lemma.frame_opinions.filter(value__value=u'zła').count() 
#            print lemma.frame_opinions.filter(value__value=u'archaiczna').count() 
#            print lemma.frame_opinions.filter(value__value=u'potoczna').count()
#            print lemma.frame_opinions.filter(value__value=u'wulgarna').count()
##            break

################################################################################ 

        sub_frame = lemma.frames.filter(characteristics__value__value=u'pred',
                                        characteristics__type=u'PREDYKATYWNOŚĆ')
        if sub_frame.count() > 0:
            pred_lemma += 1
            sub_lemma_count += 1
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'',
                                        characteristics__type=u'PREDYKATYWNOŚĆ')
        if sub_frame.count() > 0:
            npred_lemma += 1
            sub_lemma_count += 1
                  
#################################################################################

        if lemma.frames.count() != lemma.frame_opinions.count():
            print lemma.entry  
        
        has_phraseology = False
        has_coordination = False
        for frame in lemma.frames.all():
            phraseologic_frame = False
            
            pos_count += frame.positions.count()
            flat_frames = frame.positions.annotate(num_args=Count('arguments')).aggregate(Max('num_args'))['num_args__max']
            
            if flat_frames > 1:
                spec_frames += 1
                has_coordination = True  
            if frame.has_phraseologic_arguments():
                has_phraseology = True
                phraseologic_frame = True
            
            for pos in frame.positions.all():
                args = pos.arguments.count()
                arg_count += args 
#                for arg in pos.arguments.all():
#                    if arg.type in PHRASEOLOGIC_TYPES:
#                        has_phraseology = True
#                        phraseologic_frame = True
#                        break
            if phraseologic_frame:
                frames_with_phraseology += 1
                        
        if has_phraseology:
            lemmas_with_phraseology += 1
        if has_coordination:
            lemmas_with_coordination += 1
#                if args > 1:
#                    spec_pos += 1
#                    spec_args += args
#                    
#                prep_args = pos.arguments.filter(Q(type=u'prepnp') | 
#                                                 Q(type=u'prepncp'))
#                np_args = pos.arguments.filter(Q(type=u'np') | 
#                                               Q(type=u'ncp'))
#                similar_args = True
#                if prep_args.count() == args:
#                    first_arg_case = prep_args.all()[0].atributes.get(type=u'PRZYPADEK').atribute_value.value
#                    first_arg_prep = prep_args.all()[0].atributes.get(type=u'PRZYIMEK').atribute_value.value
#                    for arg in prep_args:
#                        if (first_arg_case != arg.atributes.get(type=u'PRZYPADEK').atribute_value.value or
#                            first_arg_prep != arg.atributes.get(type=u'PRZYIMEK').atribute_value.value):
#                            similar_args = False
#                            break
#                elif np_args.count() == args:
#                    first_arg_case = np_args.all()[0].atributes.get(type=u'PRZYPADEK').atribute_value.value
#                    for arg in np_args:
#                        if (first_arg_case != arg.atributes.get(type=u'PRZYPADEK').atribute_value.value):
#                            similar_args = False
#                            break
#                else:
#                    similar_args = False
#                if not similar_args and args > 1:
#                    spec_pos_up += 1
#                    spec_args_up += args 
#                    add_spec_frame_up = True
#            if add_spec_frame_up:
#                spec_frames_up += 1     
    
    outfile.write(u'Liczba argumentów:                        ' + str(arg_count) + '\n')
    outfile.write(u'Liczba pozycji:                           ' + str(pos_count) + '\n')
    outfile.write(u'Liczba haseł:                             ' + str(lemma_count) + '\n')
    outfile.write('\n')
    outfile.write(u'Liczba podhaseł:                          ' + str(sub_lemma_count) + '\n')
    outfile.write(u'Liczba podhaseł postaci (ZWROTNOŚĆ, NEGATYWNOŚĆ, PREDYKATYWNOŚĆ, ASPEKT)\n')
    outfile.write(u'Liczba podhaseł postaci ( , , pred, ):      ' + str(pred_lemma) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , , , ):        ' + str(npred_lemma) + '\n')
    outfile.write('\n')
    outfile.write(u'Liczba ramek:                             ' + str(all_frames) + '\n')
    outfile.write(u'Liczba ramek pewnych:                     ' + str(pewna_frames) + '\n')
    outfile.write(u'Liczba ramek wątpliwych:                  ' + str(watpliwa_frames) + '\n')
    outfile.write(u'Liczba ramek złych:                       ' + str(zla_frames) + '\n')
    outfile.write(u'Liczba ramek archaicznych:                ' + str(arch_frames) + '\n')
    outfile.write(u'Liczba ramek potocznych:                  ' + str(potoczna_frames) + '\n')
    outfile.write(u'Liczba ramek wulgarnych:                  ' + str(wulgarna_frames) + '\n')
    outfile.write('\n')
    outfile.write(u'Liczba pozycji z większą niż jeden liczbą argumentów: ' + str(spec_pos) + '\n')
    outfile.write(u'Liczba argumentów występujących w pozycjach o większej niż jeden liczbie argumentów: ' + str(spec_args) + '\n')
    outfile.write(u'Liczba ramek z pozycjami wieloargumentowymi: ' + str(spec_frames) + '\n')
    outfile.write('\n')
    outfile.write(u'Liczba pozycji z większą niż jeden liczbą specyfikacji: ' + str(spec_pos_up) + '\n')
    outfile.write(u'Liczba argumentów występujących w pozycjach o większej niż jeden liczbie specyfikacji: ' + str(spec_args_up) + '\n')
    outfile.write(u'Liczba ramek z pozycjami o większej niż jeden liczbie specyfikacji: ' + str(spec_frames_up) + '\n')
    outfile.write(u'Liczba ramek frazeologicznych: ' + str(frames_with_phraseology) + '\n')
    outfile.write('\n')
    outfile.write(u'Hasła zawierające schematy frazeologiczne: ' + str(lemmas_with_phraseology) + '\n')
    outfile.write(u'Hasła zawierające pozycje z koordynacją: ' + str(lemmas_with_coordination) + '\n')
    
    
    
    adjs_stats_dict = {'arg_count': arg_count,
                       'pos_count': pos_count,
                       'lemma_count': lemma_count,
                       
                       'sub_lemma_count': sub_lemma_count,
                       
                       'pred_lemma': pred_lemma,
                       'npred_lemma': npred_lemma,
                       
                       'all_frames': all_frames,
                       'pewna_frames': pewna_frames,
                       'watpliwa_frames': watpliwa_frames,
                       'zla_frames': zla_frames,
                       'arch_frames': arch_frames,
                       'potoczna_frames': potoczna_frames,
                       'wulgarna_frames': wulgarna_frames,
                       
                       'spec_pos': spec_pos,
                       'spec_args': spec_args,
                       'spec_frames': spec_frames,
                       
                       'spec_pos_up': spec_pos_up,
                       'spec_args_up': spec_args_up,
                       'spec_frames_up': spec_frames_up,
                       'frames_with_phraseology': frames_with_phraseology,
                       
                       'lemmas_with_phraseology': lemmas_with_phraseology,
                       'lemmas_with_coordination': lemmas_with_coordination
                       }
    
    outfile.close()
    return adjs_stats_dict

def get_nouns_stats(stats_path, q_statuses):
    print 'Be patient, it can take a while.'
    outfile = codecs.open(stats_path, 'wt', 'utf-8')
    arg_count = 0
    pos_count = 0
    lemma_count = 0

##################
    pewna_frames = 0
    watpliwa_frames = 0
    zla_frames = 0
    arch_frames = 0
    potoczna_frames = 0
    wulgarna_frames = 0
    all_frames = 0
    
    spec_frames = 0
    spec_pos = 0
    spec_args = 0
    
    spec_frames_up = 0
    spec_pos_up = 0
    spec_args_up = 0
    
    lemmas_with_phraseology = 0
    lemmas_with_coordination = 0
    
    frames_with_phraseology = 0
    
    lemmas = Lemma.objects.filter(old=False, 
                                  entry_obj__pos__tag='noun').filter(reduce(operator.or_, q_statuses)).distinct().order_by('entry').all()
    for lemma in lemmas:
        print lemma
        lemma_count += 1
        
        pewna_frames += lemma.frame_opinions.filter(value__value=u'pewny').count()
        watpliwa_frames += lemma.frame_opinions.filter(value__value=u'wątpliwy').count()
        zla_frames += lemma.frame_opinions.filter(value__value=u'zły').count()
        arch_frames += lemma.frame_opinions.filter(value__value=u'archaiczny').count()
        potoczna_frames += lemma.frame_opinions.filter(value__value=u'potoczny').count()
        wulgarna_frames += lemma.frame_opinions.filter(value__value=u'wulgarny').count()
        all_frames += lemma.frames.count()
#        if (lemma.frames.count() != lemma.frame_opinions.filter(value__value=u'pewna').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'wątpliwa').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'zła').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'archaiczna').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'potoczna').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'wulgarna').count()):
#            print lemma
#            print lemma.frame_opinions.filter(value__value=u'pewna').count() 
#            print lemma.frame_opinions.filter(value__value=u'wątpliwa').count() 
#            print lemma.frame_opinions.filter(value__value=u'zła').count() 
#            print lemma.frame_opinions.filter(value__value=u'archaiczna').count() 
#            print lemma.frame_opinions.filter(value__value=u'potoczna').count()
#            print lemma.frame_opinions.filter(value__value=u'wulgarna').count()
##            break
            
        if lemma.frames.count() != lemma.frame_opinions.count():
            print lemma.entry  
        
        has_phraseology = False
        has_coordination = False
        for frame in lemma.frames.all():
            phraseologic_frame = False
            
            pos_count += frame.positions.count()
            flat_frames = frame.positions.annotate(num_args=Count('arguments')).aggregate(Max('num_args'))['num_args__max']
            
            if flat_frames > 1:
                spec_frames += 1
                has_coordination = True  
            if frame.has_phraseologic_arguments():
                has_phraseology = True
                phraseologic_frame = True
            
            for pos in frame.positions.all():
                args = pos.arguments.count()
                arg_count += args 
#                for arg in pos.arguments.all():
#                    if arg.type in PHRASEOLOGIC_TYPES:
#                        has_phraseology = True
#                        phraseologic_frame = True
#                        break
            if phraseologic_frame:
                frames_with_phraseology += 1
                        
        if has_phraseology:
            lemmas_with_phraseology += 1
        if has_coordination:
            lemmas_with_coordination += 1   
    
    outfile.write(u'Liczba argumentów:                        ' + str(arg_count) + '\n')
    outfile.write(u'Liczba pozycji:                           ' + str(pos_count) + '\n')
    outfile.write(u'Liczba haseł:                             ' + str(lemma_count) + '\n')
    outfile.write('\n')
    
    outfile.write('\n')
    outfile.write(u'Liczba ramek:                             ' + str(all_frames) + '\n')
    outfile.write(u'Liczba ramek pewnych:                     ' + str(pewna_frames) + '\n')
    outfile.write(u'Liczba ramek wątpliwych:                  ' + str(watpliwa_frames) + '\n')
    outfile.write(u'Liczba ramek złych:                       ' + str(zla_frames) + '\n')
    outfile.write(u'Liczba ramek archaicznych:                ' + str(arch_frames) + '\n')
    outfile.write(u'Liczba ramek potocznych:                  ' + str(potoczna_frames) + '\n')
    outfile.write(u'Liczba ramek wulgarnych:                  ' + str(wulgarna_frames) + '\n')
    outfile.write('\n')
    outfile.write(u'Liczba pozycji z większą niż jeden liczbą argumentów: ' + str(spec_pos) + '\n')
    outfile.write(u'Liczba argumentów występujących w pozycjach o większej niż jeden liczbie argumentów: ' + str(spec_args) + '\n')
    outfile.write(u'Liczba ramek z pozycjami wieloargumentowymi: ' + str(spec_frames) + '\n')
    outfile.write('\n')
    outfile.write(u'Liczba pozycji z większą niż jeden liczbą specyfikacji: ' + str(spec_pos_up) + '\n')
    outfile.write(u'Liczba argumentów występujących w pozycjach o większej niż jeden liczbie specyfikacji: ' + str(spec_args_up) + '\n')
    outfile.write(u'Liczba ramek z pozycjami o większej niż jeden liczbie specyfikacji: ' + str(spec_frames_up) + '\n')
    outfile.write(u'Liczba ramek frazeologicznych: ' + str(frames_with_phraseology) + '\n')
    outfile.write('\n')
    outfile.write(u'Hasła zawierające schematy frazeologiczne: ' + str(lemmas_with_phraseology) + '\n')
    outfile.write(u'Hasła zawierające pozycje z koordynacją: ' + str(lemmas_with_coordination) + '\n')
    
    noun_stats_dict = {'arg_count': arg_count,
                       'pos_count': pos_count,
                       'lemma_count': lemma_count,
                       
                       'sub_lemma_count': lemma_count,
                       
                       'npred_lemma': lemma_count,
                       
                       'all_frames': all_frames,
                       'pewna_frames': pewna_frames,
                       'watpliwa_frames': watpliwa_frames,
                       'zla_frames': zla_frames,
                       'arch_frames': arch_frames,
                       'potoczna_frames': potoczna_frames,
                       'wulgarna_frames': wulgarna_frames,
                       
                       'spec_pos': spec_pos,
                       'spec_args': spec_args,
                       'spec_frames': spec_frames,
                       
                       'spec_pos_up': spec_pos_up,
                       'spec_args_up': spec_args_up,
                       'spec_frames_up': spec_frames_up,
                       'frames_with_phraseology': frames_with_phraseology,
                       
                       'lemmas_with_phraseology': lemmas_with_phraseology,
                       'lemmas_with_coordination': lemmas_with_coordination
                       }
    
    outfile.close()
    return noun_stats_dict
    
def get_advs_stats(stats_path, q_statuses):
    print 'Be patient, it can take a while.'
    outfile = codecs.open(stats_path, 'wt', 'utf-8')
    arg_count = 0
    pos_count = 0
    lemma_count = 0

##################
    pewna_frames = 0
    watpliwa_frames = 0
    zla_frames = 0
    arch_frames = 0
    potoczna_frames = 0
    wulgarna_frames = 0
    all_frames = 0
    
    spec_frames = 0
    spec_pos = 0
    spec_args = 0
    
    spec_frames_up = 0
    spec_pos_up = 0
    spec_args_up = 0
    
    lemmas_with_phraseology = 0
    lemmas_with_coordination = 0
    
    frames_with_phraseology = 0
    
    lemmas = Lemma.objects.filter(old=False, 
                                  entry_obj__pos__tag='adv').filter(reduce(operator.or_, q_statuses)).distinct().order_by('entry').all()
    for lemma in lemmas:
        print lemma
        lemma_count += 1
        
        pewna_frames += lemma.frame_opinions.filter(value__value=u'pewny').count()
        watpliwa_frames += lemma.frame_opinions.filter(value__value=u'wątpliwy').count()
        zla_frames += lemma.frame_opinions.filter(value__value=u'zły').count()
        arch_frames += lemma.frame_opinions.filter(value__value=u'archaiczny').count()
        potoczna_frames += lemma.frame_opinions.filter(value__value=u'potoczny').count()
        wulgarna_frames += lemma.frame_opinions.filter(value__value=u'wulgarny').count()
        all_frames += lemma.frames.count()
#        if (lemma.frames.count() != lemma.frame_opinions.filter(value__value=u'pewna').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'wątpliwa').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'zła').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'archaiczna').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'potoczna').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'wulgarna').count()):
#            print lemma
#            print lemma.frame_opinions.filter(value__value=u'pewna').count() 
#            print lemma.frame_opinions.filter(value__value=u'wątpliwa').count() 
#            print lemma.frame_opinions.filter(value__value=u'zła').count() 
#            print lemma.frame_opinions.filter(value__value=u'archaiczna').count() 
#            print lemma.frame_opinions.filter(value__value=u'potoczna').count()
#            print lemma.frame_opinions.filter(value__value=u'wulgarna').count()
##            break
            
        if lemma.frames.count() != lemma.frame_opinions.count():
            print lemma.entry  
        
        has_phraseology = False
        has_coordination = False
        for frame in lemma.frames.all():
            phraseologic_frame = False
            
            pos_count += frame.positions.count()
            flat_frames = frame.positions.annotate(num_args=Count('arguments')).aggregate(Max('num_args'))['num_args__max']
            
            if flat_frames > 1:
                spec_frames += 1
                has_coordination = True  
            if frame.has_phraseologic_arguments():
                has_phraseology = True
                phraseologic_frame = True
            
            for pos in frame.positions.all():
                args = pos.arguments.count()
                arg_count += args 
#                for arg in pos.arguments.all():
#                    if arg.type in PHRASEOLOGIC_TYPES:
#                        has_phraseology = True
#                        phraseologic_frame = True
#                        break
            if phraseologic_frame:
                frames_with_phraseology += 1
                        
        if has_phraseology:
            lemmas_with_phraseology += 1
        if has_coordination:
            lemmas_with_coordination += 1   
    
    outfile.write(u'Liczba argumentów:                        ' + str(arg_count) + '\n')
    outfile.write(u'Liczba pozycji:                           ' + str(pos_count) + '\n')
    outfile.write(u'Liczba haseł:                             ' + str(lemma_count) + '\n')
    outfile.write('\n')
    
    outfile.write('\n')
    outfile.write(u'Liczba ramek:                             ' + str(all_frames) + '\n')
    outfile.write(u'Liczba ramek pewnych:                     ' + str(pewna_frames) + '\n')
    outfile.write(u'Liczba ramek wątpliwych:                  ' + str(watpliwa_frames) + '\n')
    outfile.write(u'Liczba ramek złych:                       ' + str(zla_frames) + '\n')
    outfile.write(u'Liczba ramek archaicznych:                ' + str(arch_frames) + '\n')
    outfile.write(u'Liczba ramek potocznych:                  ' + str(potoczna_frames) + '\n')
    outfile.write(u'Liczba ramek wulgarnych:                  ' + str(wulgarna_frames) + '\n')
    outfile.write('\n')
    outfile.write(u'Liczba pozycji z większą niż jeden liczbą argumentów: ' + str(spec_pos) + '\n')
    outfile.write(u'Liczba argumentów występujących w pozycjach o większej niż jeden liczbie argumentów: ' + str(spec_args) + '\n')
    outfile.write(u'Liczba ramek z pozycjami wieloargumentowymi: ' + str(spec_frames) + '\n')
    outfile.write('\n')
    outfile.write(u'Liczba pozycji z większą niż jeden liczbą specyfikacji: ' + str(spec_pos_up) + '\n')
    outfile.write(u'Liczba argumentów występujących w pozycjach o większej niż jeden liczbie specyfikacji: ' + str(spec_args_up) + '\n')
    outfile.write(u'Liczba ramek z pozycjami o większej niż jeden liczbie specyfikacji: ' + str(spec_frames_up) + '\n')
    outfile.write(u'Liczba ramek frazeologicznych: ' + str(frames_with_phraseology) + '\n')
    outfile.write('\n')
    outfile.write(u'Hasła zawierające schematy frazeologiczne: ' + str(lemmas_with_phraseology) + '\n')
    outfile.write(u'Hasła zawierające pozycje z koordynacją: ' + str(lemmas_with_coordination) + '\n')
    
    advs_stats_dict = {'arg_count': arg_count,
                       'pos_count': pos_count,
                       'lemma_count': lemma_count,
                       
                       'sub_lemma_count': lemma_count,
                       
                       'npred_lemma': lemma_count,
                       
                       'all_frames': all_frames,
                       'pewna_frames': pewna_frames,
                       'watpliwa_frames': watpliwa_frames,
                       'zla_frames': zla_frames,
                       'arch_frames': arch_frames,
                       'potoczna_frames': potoczna_frames,
                       'wulgarna_frames': wulgarna_frames,
                       
                       'spec_pos': spec_pos,
                       'spec_args': spec_args,
                       'spec_frames': spec_frames,
                       
                       'spec_pos_up': spec_pos_up,
                       'spec_args_up': spec_args_up,
                       'spec_frames_up': spec_frames_up,
                       'frames_with_phraseology': frames_with_phraseology,
                       
                       'lemmas_with_phraseology': lemmas_with_phraseology,
                       'lemmas_with_coordination': lemmas_with_coordination
                       }
    
    outfile.close()
    return advs_stats_dict

def get_verb_stats(stats_path, q_statuses):
    print 'Be patient, it can take a while.'
    outfile = codecs.open(stats_path, 'wt', 'utf-8')
    arg_count = 0
    pos_count = 0
    lemma_count = 0
##################3
    sub_lemma_count = 0
    
    sub_sie_imperf_oboj = 0
    sub_sie_perf_oboj = 0
    sub_sie_oboj_oboj = 0
    sub_imperf_oboj = 0
    sub_perf_oboj = 0
    sub_oboj_oboj = 0
    
    sub_sie_imperf_neg = 0
    sub_sie_perf_neg = 0
    sub_sie_oboj_neg = 0
    sub_imperf_neg = 0
    sub_perf_neg = 0
    sub_oboj_neg = 0
    
    sub_sie_imperf_aff = 0
    sub_sie_perf_aff = 0
    sub_sie_oboj_aff = 0
    sub_imperf_aff = 0
    sub_perf_aff = 0
    sub_oboj_aff = 0
    
    sie_lemma = 0
    nsie_lemma = 0
##################
    pewna_frames = 0
    watpliwa_frames = 0
    zla_frames = 0
    arch_frames = 0
    potoczna_frames = 0
    wulgarna_frames = 0
    all_frames = 0
    
    spec_frames = 0
    spec_pos = 0
    spec_args = 0
    
    spec_frames_up = 0
    spec_pos_up = 0
    spec_args_up = 0
    
    lemmas_with_phraseology = 0
    lemmas_with_coordination = 0
    
    frames_with_phraseology = 0
    
    lemmas = Lemma.objects.filter(old=False, 
                                  entry_obj__pos__tag='verb').filter(reduce(operator.or_, q_statuses)).distinct().order_by('entry').all()
    for lemma in lemmas:
        # jak chcemy bez zapłaconych
#        if RealizedLemma.objects.filter(Q(status__status=u'sprawdzone') |
#                                        Q(status__status=u'tymczasowy')).filter(lemma__entry=lemma.entry, 
#                                                                                  paid=False).exists():
#            pass
#        else:
#            continue
        print lemma
        lemma_count += 1
        
        pewna_frames += lemma.frame_opinions.filter(value__value=u'pewny').count()
        watpliwa_frames += lemma.frame_opinions.filter(value__value=u'wątpliwy').count()
        zla_frames += lemma.frame_opinions.filter(value__value=u'zły').count()
        arch_frames += lemma.frame_opinions.filter(value__value=u'archaiczny').count()
        potoczna_frames += lemma.frame_opinions.filter(value__value=u'potoczny').count()
        wulgarna_frames += lemma.frame_opinions.filter(value__value=u'wulgarny').count()
        all_frames += lemma.frames.count()
#        if (lemma.frames.count() != lemma.frame_opinions.filter(value__value=u'pewna').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'wątpliwa').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'zła').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'archaiczna').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'potoczna').count() + 
#                                    lemma.frame_opinions.filter(value__value=u'wulgarna').count()):
#            print lemma
#            print lemma.frame_opinions.filter(value__value=u'pewna').count() 
#            print lemma.frame_opinions.filter(value__value=u'wątpliwa').count() 
#            print lemma.frame_opinions.filter(value__value=u'zła').count() 
#            print lemma.frame_opinions.filter(value__value=u'archaiczna').count() 
#            print lemma.frame_opinions.filter(value__value=u'potoczna').count()
#            print lemma.frame_opinions.filter(value__value=u'wulgarna').count()
##            break
        
        sub_frame = lemma.frames.filter(characteristics__value__value=u'się',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT',
                                                                                   characteristics__value__value=u'imperf').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'_')
        if sub_frame.count() > 0:
            sub_sie_imperf_oboj += 1
            sub_lemma_count += 1
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'się',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT', 
                                                                                   characteristics__value__value=u'perf').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'_')
        if sub_frame.count() > 0:
            sub_sie_perf_oboj += 1
            sub_lemma_count += 1
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'się',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT',
                                                                                   characteristics__value__value=u'_').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'_')
        if sub_frame.count() > 0:
            sub_sie_oboj_oboj += 1
            sub_lemma_count += 1 
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT', 
                                                                                   characteristics__value__value=u'imperf').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'_')
        if sub_frame.count() > 0:
            sub_imperf_oboj += 1
            sub_lemma_count += 1
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT',
                                                                                   characteristics__value__value=u'perf').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'_')
        if sub_frame.count() > 0:
            sub_perf_oboj += 1
            sub_lemma_count += 1
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT',
                                                                                   characteristics__value__value=u'_').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'_')
        if sub_frame.count() > 0:
            sub_oboj_oboj += 1
            sub_lemma_count += 1   
            
################################### neg #########################################
        sub_frame = lemma.frames.filter(characteristics__value__value=u'się',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT',
                                                                                   characteristics__value__value=u'imperf').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'neg')
        if sub_frame.count() > 0:
            sub_sie_imperf_neg += 1
            sub_lemma_count += 1
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'się',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT', 
                                                                                   characteristics__value__value=u'perf').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'neg')
        if sub_frame.count() > 0:
            sub_sie_perf_neg += 1
            sub_lemma_count += 1
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'się',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT',
                                                                                   characteristics__value__value=u'_').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'neg')
        if sub_frame.count() > 0:
            sub_sie_oboj_neg += 1
            sub_lemma_count += 1 
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT', 
                                                                                   characteristics__value__value=u'imperf').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'neg')
        if sub_frame.count() > 0:
            sub_imperf_neg += 1
            sub_lemma_count += 1
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT',
                                                                                   characteristics__value__value=u'perf').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'neg')
        if sub_frame.count() > 0:
            sub_perf_neg += 1
            sub_lemma_count += 1
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT',
                                                                                   characteristics__value__value=u'_').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'neg')
        if sub_frame.count() > 0:
            sub_oboj_neg += 1
            sub_lemma_count += 1   

#################################### aff ########################################
        sub_frame = lemma.frames.filter(characteristics__value__value=u'się',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT',
                                                                                   characteristics__value__value=u'imperf').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'aff')
        if sub_frame.count() > 0:
            sub_sie_imperf_aff += 1
            sub_lemma_count += 1
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'się',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT', 
                                                                                   characteristics__value__value=u'perf').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'aff')
        if sub_frame.count() > 0:
            sub_sie_perf_aff += 1
            sub_lemma_count += 1
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'się',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT',
                                                                                   characteristics__value__value=u'_').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'aff')
        if sub_frame.count() > 0:
            sub_sie_oboj_aff += 1
            sub_lemma_count += 1 
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT', 
                                                                                   characteristics__value__value=u'imperf').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'aff')
        if sub_frame.count() > 0:
            sub_imperf_aff += 1
            sub_lemma_count += 1
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT',
                                                                                   characteristics__value__value=u'perf').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'aff')
        if sub_frame.count() > 0:
            sub_perf_aff += 1
            sub_lemma_count += 1
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'',
                                        characteristics__type=u'ZWROTNOŚĆ').filter(characteristics__type=u'ASPEKT',
                                                                                   characteristics__value__value=u'_').filter(
                                                                                   characteristics__type=u'NEGATYWNOŚĆ', 
                                                                                   characteristics__value__value=u'aff')
        if sub_frame.count() > 0:
            sub_oboj_aff += 1
            sub_lemma_count += 1  
################################################################################ 

        sub_frame = lemma.frames.filter(characteristics__value__value=u'się',
                                        characteristics__type=u'ZWROTNOŚĆ')
        if sub_frame.count() > 0:
            sie_lemma += 1
            
        sub_frame = lemma.frames.filter(characteristics__value__value=u'',
                                        characteristics__type=u'ZWROTNOŚĆ')
        if sub_frame.count() > 0:
            nsie_lemma += 1
            
            
#################################################################################
            
        if lemma.frames.count() != lemma.frame_opinions.count():
            print lemma.entry  
        
        has_phraseology = False
        has_coordination = False
        for frame in lemma.frames.all():
            phraseologic_frame = False
            
            pos_count += frame.positions.count()
            flat_frames = frame.positions.annotate(num_args=Count('arguments')).aggregate(Max('num_args'))['num_args__max']
            
            if flat_frames > 1:
                spec_frames += 1
                has_coordination = True     
            if frame.has_phraseologic_arguments():
                has_phraseology = True
                phraseologic_frame = True
            
            for pos in frame.positions.all():
                args = pos.arguments.count()
                arg_count += args 
#                for arg in pos.arguments.all():
#                    if arg.type in PHRASEOLOGIC_TYPES:
#                        has_phraseology = True
#                        phraseologic_frame = True
#                        break
            if phraseologic_frame:
                frames_with_phraseology += 1
                        
        if has_phraseology:
            lemmas_with_phraseology += 1
        if has_coordination:
            lemmas_with_coordination += 1    
    
    outfile.write(u'Liczba argumentów:                        ' + str(arg_count) + '\n')
    outfile.write(u'Liczba pozycji:                           ' + str(pos_count) + '\n')
    outfile.write(u'Liczba haseł:                             ' + str(lemma_count) + '\n')
    outfile.write('\n')
    outfile.write(u'Liczba podhaseł:                          ' + str(sub_lemma_count) + '\n')
    
    outfile.write(u'Liczba podhaseł postaci (ZWROTNOŚĆ, NEGATYWNOŚĆ, PREDYKATYWNOŚĆ, ASPEKT)\n')
    
    outfile.write(u'Liczba podhaseł postaci (się, _, , imperf):      ' + str(sub_sie_imperf_oboj) + '\n')
    outfile.write(u'Liczba podhaseł postaci (się, _, , perf):        ' + str(sub_sie_perf_oboj) + '\n')
    outfile.write(u'Liczba podhaseł postaci (się, _, , _):           ' + str(sub_sie_oboj_oboj) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , _, , imperf):        ' + str(sub_imperf_oboj) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , _, , perf):          ' + str(sub_perf_oboj) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , _, , _):             ' + str(sub_oboj_oboj) + '\n')
    
    outfile.write(u'Liczba podhaseł postaci (się, neg, , imperf):    ' + str(sub_sie_imperf_neg) + '\n')
    outfile.write(u'Liczba podhaseł postaci (się, neg, , perf):      ' + str(sub_sie_perf_neg) + '\n')
    outfile.write(u'Liczba podhaseł postaci (się, neg, , _):         ' + str(sub_sie_oboj_neg) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , neg, , imperf):      ' + str(sub_imperf_neg) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , neg, , perf):        ' + str(sub_perf_neg) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , neg, , _):           ' + str(sub_oboj_neg) + '\n')
    
    outfile.write(u'Liczba podhaseł postaci (się, aff, , imperf):    ' + str(sub_sie_imperf_aff) + '\n')
    outfile.write(u'Liczba podhaseł postaci (się, aff, , perf):      ' + str(sub_sie_perf_aff) + '\n')
    outfile.write(u'Liczba podhaseł postaci (się, aff, , _):         ' + str(sub_sie_oboj_aff) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , aff, , imperf):      ' + str(sub_imperf_aff) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , aff, , perf):        ' + str(sub_perf_aff) + '\n')
    outfile.write(u'Liczba podhaseł postaci ( , aff, , _):           ' + str(sub_oboj_aff) + '\n')
    
    outfile.write('\n')
    outfile.write(u'Liczba ramek:                             ' + str(all_frames) + '\n')
    outfile.write(u'Liczba ramek pewnych:                     ' + str(pewna_frames) + '\n')
    outfile.write(u'Liczba ramek wątpliwych:                  ' + str(watpliwa_frames) + '\n')
    outfile.write(u'Liczba ramek złych:                       ' + str(zla_frames) + '\n')
    outfile.write(u'Liczba ramek archaicznych:                ' + str(arch_frames) + '\n')
    outfile.write(u'Liczba ramek potocznych:                  ' + str(potoczna_frames) + '\n')
    outfile.write(u'Liczba ramek wulgarnych:                  ' + str(wulgarna_frames) + '\n')
    outfile.write('\n')
    outfile.write(u'Liczba pozycji z większą niż jeden liczbą argumentów: ' + str(spec_pos) + '\n')
    outfile.write(u'Liczba argumentów występujących w pozycjach o większej niż jeden liczbie argumentów: ' + str(spec_args) + '\n')
    outfile.write(u'Liczba ramek z pozycjami wieloargumentowymi: ' + str(spec_frames) + '\n')
    outfile.write('\n')
    outfile.write(u'Liczba pozycji z większą niż jeden liczbą specyfikacji: ' + str(spec_pos_up) + '\n')
    outfile.write(u'Liczba argumentów występujących w pozycjach o większej niż jeden liczbie specyfikacji: ' + str(spec_args_up) + '\n')
    outfile.write(u'Liczba ramek z pozycjami o większej niż jeden liczbie specyfikacji: ' + str(spec_frames_up) + '\n')
    outfile.write(u'Liczba ramek frazeologicznych: ' + str(frames_with_phraseology) + '\n')
    outfile.write('\n')
    outfile.write(u'Hasła zawierające schematy frazeologiczne: ' + str(lemmas_with_phraseology) + '\n')
    outfile.write(u'Hasła zawierające pozycje z koordynacją: ' + str(lemmas_with_coordination) + '\n')
    
    
    verb_stats_dict = {'arg_count': arg_count,
                       'pos_count': pos_count,
                       'lemma_count': lemma_count,
                       
                       'sub_lemma_count': sub_lemma_count,
                       
                       'sub_sie_imperf_oboj': sub_sie_imperf_oboj,
                       'sub_sie_perf_oboj': sub_sie_perf_oboj,
                       'sub_sie_oboj_oboj': sub_sie_oboj_oboj,
                       'sub_imperf_oboj': sub_imperf_oboj,
                       'sub_perf_oboj': sub_perf_oboj,
                       'sub_oboj_oboj': sub_oboj_oboj,
                       
                       'sub_sie_imperf_neg': sub_sie_imperf_neg,
                       'sub_sie_perf_neg': sub_sie_perf_neg,
                       'sub_sie_oboj_neg': sub_sie_oboj_neg,
                       'sub_imperf_neg': sub_imperf_neg,
                       'sub_perf_neg': sub_perf_neg,
                       'sub_oboj_neg': sub_oboj_neg,
                       
                       'sub_sie_imperf_aff': sub_sie_imperf_aff,
                       'sub_sie_perf_aff': sub_sie_perf_aff,
                       'sub_sie_oboj_aff': sub_sie_oboj_aff,
                       'sub_imperf_aff': sub_imperf_aff,
                       'sub_perf_aff': sub_perf_aff,
                       'sub_oboj_aff': sub_oboj_aff,
                       
                       'all_frames': all_frames,
                       'pewna_frames': pewna_frames,
                       'watpliwa_frames': watpliwa_frames,
                       'zla_frames': zla_frames,
                       'arch_frames': arch_frames,
                       'potoczna_frames': potoczna_frames,
                       'wulgarna_frames': wulgarna_frames,
                       
                       'spec_pos': spec_pos,
                       'spec_args': spec_args,
                       'spec_frames': spec_frames,
                       
                       'spec_pos_up': spec_pos_up,
                       'spec_args_up': spec_args_up,
                       'spec_frames_up': spec_frames_up,
                       'frames_with_phraseology': frames_with_phraseology,
                       
                       'lemmas_with_phraseology': lemmas_with_phraseology,
                       'lemmas_with_coordination': lemmas_with_coordination
                       }
    
    outfile.close()
    return verb_stats_dict