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
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)
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
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
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
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()