Beispiel #1
0
def parser2(file):
    """
    № 2, 1, 1, 1, 120
    Якщо одна сторона бере на себе обов’язок перед другою стороною вчинити певні дії або утриматися від них, а друга сторона наділяється лише правом вимоги, без виникнення зустрічного обов’язку щодо першої сторони, то договір вважається :
    1) двостороннім;
    2) консенсуальним;
    3) реальним;
    4) одностороннім;
    5) недвостороннім.
    #4    
    """
    doc = opendocx(file)

    questions_data = []
    data = []

    for p in doc.xpath('/w:document/w:body/w:p', namespaces=nsprefixes):
        t = p.xpath('w:r/w:t', namespaces=nsprefixes)
        if bool(t):
            data.append(u''.join([i.text for i in t]).replace(u'№', u'#').strip())
        else:
            len(data) and questions_data.append(data)
            data = []

    if len(data):
        questions_data.append(data)
       
    questions = []

    for qs_data in questions_data:
        if qs_data[0].startswith(u'№') or qs_data[0].startswith(u'#'):
            qs_data = qs_data[1:]
            
        data = {
            'question': qs_data[0],
            'answers': []
        }
        
        correct = []
        for i in qs_data[-1][1:]:
            correct.append(int(i))

        for i, answer in enumerate(qs_data[1:-1]):
            data['answers'].append({
                'text': answer,
                'correct': i+1 in correct
            })
        
        questions.append(data)
        
    return questions
Beispiel #2
0
def parser1(file):
    doc = opendocx(file)
    
    questions_data = []
    data = []
    for p in doc.xpath('/w:document/w:body/w:p', namespaces=nsprefixes):
        if not bool(p.xpath('w:r/w:t', namespaces=nsprefixes)):
            if len(data):
                questions_data.append(data)
                data = []
        else:
            data.append(p)
    
    if len(data):
        questions_data.append(data)
    
    questions = []
    for qs_data in questions_data:
        data = {
            'question': u'',
            'answers': []
        }
        
        for r in qs_data[0].xpath('w:r/w:t', namespaces=nsprefixes):
            data['question'] += u'%s ' % r.text.strip()
        
        for p in qs_data[1:]:
            text = u''
            for r in p.xpath('w:r/w:t', namespaces=nsprefixes):
                text += u'%s ' % r.text.strip()  
            data['answers'].append({
                'text': text,
                'correct': bool(p.xpath('w:r/w:rPr/w:b', namespaces=nsprefixes))
            })                  
                    
        if data['answers']:
            questions.append(data)    
Beispiel #3
0
def parser(file):
    """
    № 001,0,1,3,1,30
    Міжнародне право регулює відносини:
    +    двосторонні та багатосторонні між державами;
    -    між державами та транснаціональними компаніями;
    -    між міжнародними неурядовими організаціями;
    +    між державами та міжнародними міжурядовими організаціями;
    +    між державами та державо подібними утвореннями;
    -    між міжнародними організаціями і фізичними особами.
    
    №052,0,3,1,1,30
    Міжнародне м’яке право складають:
        -  матеріальні норми;
        -  процесуальні норми;
        -  регіональні норми;
        +  рекомендаційні норми;
        -  імперативні норми;
        -  диспозитивні норми.
    
    №061,3,1,4,30
    (34) Кількість членів, з яких складається Комісія міжнародного права? 
    """
    doc = opendocx(file)
    #f = open('d:/workspace/testing-for-Kate/src/app/main/1.xml', 'w')
    #f.write(tostring(doc))
    questions_data = []
    data = []
    
    for p in doc.xpath('/w:document/w:body/w:p', namespaces=nsprefixes):
        t = p.xpath('w:r/w:t', namespaces=nsprefixes)
        text = u''.join([i.text.strip() for i in t])

        if text:
            data.append(text)
        else:
            len(data) and questions_data.append(data)
            data = []
       
    questions = []
    
    for qs_data in questions_data:
        num = qs_data[1]
        qs_data = qs_data[1:]
        
        assert len(qs_data), num
        
        data = {
            'question': qs_data[0],
            'text_answer': u'',
            'answers': []
        }
        
        for answer in qs_data[1:]:
            if answer.startswith('+'):
                data['answers'].append({
                    'text': answer[1:].strip(),
                    'correct': True
                })
            else:
                if answer.startswith('-'):
                    answer = answer[1:]
                    
                data['answers'].append({
                    'text': answer.strip(),
                    'correct': False
                })
                        
        if data['answers']:
            questions.append(data)
        else:
            r = text_answer_re1.search(data['question'])
            assert r, num
            
            data['text_answer'] = r.groups()[0]
            data['question'] = text_answer_re1.sub('', data['question'])
            questions.append(data)
        
        assert len(data['answers']) or data['text_answer'], 'Question: %s' % num

    return questions
Beispiel #4
0
def parser3(file):
    """
    № 9, 0, 1, 1, 1, 90
    Особлива частина кримінального права України включає в себе норми таких видів:
    -одноразові;
    -похідні;
    +заохочувальні;
    -про помилування;
    -каральні.
    
    № 1249, 0, 18, 2, 4, 180
    Підставте відповідні цифри у вказану формулу і впишіть лише результат: А + Б, 
    де А - під незаконною винагородою у значному розмірі в злочині 
    “Одержання незаконної винагороди працівником державного підприємства, установи чи організації” 
    слід розуміти незаконну винагороду, яка в ________ і більше разів перевищує 
    неоподатковуваний мінімум доходів громадян; Б – кількість форм вини, з якими 
    вчинюються злочини проти авторитету органів державної влади, органів місцевого 
    самоврядування та об’єднань громадян. (*3*)
    """
    doc = opendocx(file)

    questions_data = []
    data = []

    for p in doc.xpath('/w:document/w:body/w:p', namespaces=nsprefixes):
        t = p.xpath('w:r/w:t', namespaces=nsprefixes)
        if bool(t):
            data.append(u''.join([i.text for i in t]).replace(u'№', u'#').strip())
        else:
            len(data) and questions_data.append(data)
            data = []

    if len(data):
        questions_data.append(data)
       
    questions = []

    for qs_data in questions_data:
        num = ''
        if qs_data[0].startswith(u'№') or qs_data[0].startswith(u'#'):
            num = qs_data[0]
            qs_data = qs_data[1:]
  
        data = {
            'question': qs_data[0],
            'text_answer': u'',
            'answers': []
        }
        
        for answer in qs_data[1:]:
            answer = answer.strip()
            data['answers'].append({
                'text': answer[1:],
                'correct': answer.startswith('+')
            })
        
        if data['answers']:
            questions.append(data)
        else:
            r = text_answer_re.search(data['question'])
            if r:
                data['text_answer'] = r.groups()[0]
                data['question'] = text_answer_re.sub('', data['question'])
                questions.append(data)
        
        #Uncommen for debuging and checking all questions
        #assert len(data['answers']) or data['text_answer'], 'Question: %s' % num
    
    return questions
Beispiel #5
0
def parser4(file):
    """
    № 5
    У якій відповіді правильно вказано, що є кримінально-процесуальною формою: 
    передбачена законом система стадії кримінального процесу; 
    передбачені законом засоби контролю за законністю та обґрунтованістю всіх процесуальних дій і рішень; 
     # передбачений законом порядок провадження у кримінальній справі в цілому, порядок і послідовність виконання необхідних процесуальних дій та прийняття відповідних рішень; 
    передбачені законом процесуальні засоби і способи викриття винних у вчиненні злочину осіб; 
    зміст процесуальних дій і прийнятих рішень та їх форма.
    
    № 141, 0, 2, 1, 4, 60
    Вкажіть рік прийняття Кримінально-процесуального кодексу України: (*1960*)    
    """
    doc = opendocx(file)

    questions_data = []

    for p in doc.xpath('/w:document/w:body/w:p', namespaces=nsprefixes):
        t = p.xpath('w:r/w:t', namespaces=nsprefixes)
        if len(t):
            questions_data.append([i.text.strip() for i in t])
       
    questions = []

    for qs_data in questions_data:
        num = ''
        if qs_data[0].startswith(u'№'):
            assert len(qs_data[0]) == 1
            num = qs_data[1]
            qs_data = qs_data[2:]
  
        data = {
            'question': qs_data[0],
            'text_answer': u'',
            'answers': []
        }
        
        for answer in qs_data[1:]:
            if answer.startswith('#'):
                data['answers'].append({
                    'text': answer[1:],
                    'correct': True
                })
            else:
                data['answers'].append({
                    'text': answer,
                    'correct': False
                })
                        
        if data['answers']:
            questions.append(data)
        else:
            r = text_answer_re.search(data['question'])
            if r:
                data['text_answer'] = r.groups()[0]
                data['question'] = text_answer_re.sub('', data['question'])
                questions.append(data)
        
        assert len(data['answers']) or data['text_answer'], 'Question: %s' % num
        
    return questions
Beispiel #6
0
    def file_filter(self):
        """ sets SOURCE and TARGET """

        def remove_empty_items(segmented_text):
            segmented_text = [ i for i in segmented_text if len(i)>0 ]
            segmented_text = [ i for i in segmented_text if i.isspace() == False ]
            return segmented_text

        filenames = [(config.PROJECT_PROPERTIES['sfilename'], config.PROJECT_PROPERTIES['slang']),
                    (config.PROJECT_PROPERTIES['tfilename'], config.PROJECT_PROPERTIES['tlang']) ]

        for name, lang in filenames:
            ext = os.path.splitext(name)[1]
            text = None

            file_open_error = config.app.translate('main_window',
            '{0} cannot be opened. The encoding or the file type is not supported.'.format(name),
            'file import error')

            err_title = config.app.translate('main_window',
            'File error', 'file import error')

            if ext == '.docx':
                document = docx.opendocx(name)
                paratextlist = docx.getdocumenttext(document)
                text = [p+'\n' for p in paratextlist]

            elif ext == '.odt':
                text = importOdt.get_writer_doc(name)

            elif re.match('(\.x?(htm)l?)|(\.php)', ext):    # treats php like html
                # possible KW options for html parser: get_meta=True, get_img_meta=False
                text = parse_html.to_text_list(name)

            elif ext == '.txt':
                file_obj = open(name, mode='rb')
                as_bytes = file_obj.read()
                text = self.decode_text_file(as_bytes)

                if text:
                    text = text.splitlines()
                else:
                    self.error_message(file_open_error, err_title)
                    text = None

            elif len(ext) == 0:     # try to open files without an extension as plain text
                istext = self.is_plain_text(name)

                if istext is True:
                    as_bytes = open(name, mode='rb').read()
                    text = self.decode_text_file(as_bytes)
                    text = text.splitlines()

                if istext is False or text is None:
                    self.error_message(file_open_error, err_title)


            elif ext == '.tmx':     # not implemented YET
                self.error_message(file_open_error, err_title)
                text = None

            else:
                self.error_message(file_open_error, err_title)
                text = None


            if text:
                segmented_text = self.segment_text(text, lang)

                if segmented_text:
                    segmented_text = remove_empty_items(segmented_text)

                    if lang == config.PROJECT_PROPERTIES['slang']:
                        config.SOURCE = segmented_text
                    if lang == config.PROJECT_PROPERTIES['tlang']:
                        config.TARGET = segmented_text

##                    print("""debug file_filter: filename={0} :
##                    len(segmented_text)={1} :
##                    lang={2}""".format(name, len(segmented_text), lang) )

        self.setup_model()