def test_doc_parser(self): db = get_mongodb_connection() if db is None: # TODO: this is a weird way of detecting we're on CI return FILENAME = "/Users/artem/work/nemo/goil/IN/Другие договоры/Договор Формула.docx" wp = WordDocParser() res = wp.read_doc(FILENAME) doc: LegalDocument = LegalDocument('') doc.parse() last = 0 for d in res['documents']: for p in d['paragraphs']: header_text = p['paragraphHeader']['text'] + '\n' body_text = p['paragraphBody']['text'] + '\n' header = LegalDocument(header_text) header.parse() # self.assertEqual(self.n(header_text), header.text) doc += header headerspan = (last, len(doc.tokens_map)) print(headerspan) last = len(doc.tokens_map) body = LegalDocument(body_text) body.parse() doc += body bodyspan = (last, len(doc.tokens_map)) header_tag = SemanticTag('headline', header_text, headerspan) body_tag = SemanticTag('paragraphBody', None, bodyspan) print(header_tag) # print(body_tag) para = Paragraph(header_tag, body_tag) doc.paragraphs.append(para) last = len(doc.tokens_map) h_subdoc = doc.subdoc_slice(para.header.as_slice()) b_subdoc = doc.subdoc_slice(para.body.as_slice()) # self.assertEqual(self.n(header_text), h_subdoc.text) # self.assertEqual(self.n(body_text), b_subdoc.text) print('-' * 100) print(doc.text) headers = [ doc.subdoc_slice(p.header.as_slice()) for p in doc.paragraphs ] print('-' * 100)
def test_concat_docs(self): tm1 = LegalDocument('text prefix \n').parse() tm2 = LegalDocument('more words').parse() N = 10 expected_tokens = len(tm1.tokens) + N * len(tm2.tokens) for _ in range(N): tm1 += tm2 # //tm1.parse() self.assertEqual(expected_tokens, len(tm1.tokens))
def test_concat_docs_2(self): tm1 = LegalDocument('text prefix \n').parse() tm2 = LegalDocument('\rmore words').parse() N = 10 expected_tokens = len(tm1.tokens_cc) + N * len(tm2.tokens_cc) for _ in range(N): tm1 += tm2 print(tm1.tokens_map_norm._full_text) # //tm1.parse() self.assertEqual(expected_tokens, len(tm1.tokens_cc)) self.assertEqual('more words', tm1.tokens_map_norm.text_range((3, 5)))
def test_find_agent_fond_2(self): txt = ''' основании Устава, с одной стороны, и Фонд «Благо», именуемое в дальнейшем «Благополучатель», в лице председателя''' r = re.compile(r_quoted_name, re.MULTILINE) x = r.search(n(txt)) self.assertEqual('Благо', x['name']) r = re.compile(r_type_and_name, re.MULTILINE) x = r.search(n(txt)) self.assertEqual('Фонд', x['type']) self.assertEqual('Благо', x['name']) r = re.compile(complete_re_str_org, re.MULTILINE) x = r.search(n(txt)) self.assertEqual('Фонд', x['type']) self.assertEqual('Благо', x['name']) r = re.compile(complete_re_str, re.MULTILINE) x = r.search(n(txt)) self.assertEqual('Фонд', x['type']) self.assertEqual('Благо', x['name']) r = complete_re x = r.search(n(txt)) self.assertEqual('Фонд', x['type']) self.assertEqual('Благо', x['name']) tags: List[SemanticTag] = find_org_names(LegalDocument(txt).parse(), decay_confidence=False) self._validate_org(tags, 1, ('Фонд', 'Благо', 'Благополучатель'))
def test_slice_doc_1(self): text = 'этилен мама этилен' __doc = LegalDocument(text) __doc.parse() subdoc = __doc.subdoc_slice(slice(2, 3)) self.assertEqual('этилен', subdoc.text)
def test_normalize_doc_slice_1(self): doc_text = """\n\n\nАкционерное 3`4`` общество «Газпром - 'Вибраниум' и Криптонит» (АО «ГВК»), "именуемое" в собранием `` акционеров собранием `` акционеров \'\' \ дальнейшем «Благотворитель», """ doc_o = LegalDocument(doc_text) doc_o.parse() print(doc_o.tokens_map.tokens)
def test_find_agent_fond(self): txt = '''Одобрить предоставление безвозмездной финансовой помощи Фонду «Олимп» в размере 1500000 (один миллион пятьсот тысяч) рублей \ для создания и организации работы интернет-платформы «Олимп» по поддержке стартапов в сфере взаимопомощи. Время подведения итогов голосования – 18 часов 00 минут.''' r = re.compile(r_quoted_name, re.MULTILINE) x = r.search(n(txt)) self.assertEqual('Олимп', x['name']) r = re.compile(r_type_and_name, re.MULTILINE) x = r.search(n(txt)) self.assertEqual('Фонду', x['type']) self.assertEqual('Олимп', x['name']) r = re.compile(complete_re_str_org, re.MULTILINE) x = r.search(n(txt)) self.assertEqual('Фонду', x['type']) self.assertEqual('Олимп', x['name']) r = re.compile(complete_re_str, re.MULTILINE) x = r.search(n(txt)) self.assertEqual('Фонду', x['type']) self.assertEqual('Олимп', x['name']) r = complete_re x = r.search(n(txt)) self.assertEqual('Фонду', x['type']) self.assertEqual('Олимп', x['name']) tags: List[SemanticTag] = find_org_names(LegalDocument(txt).parse(), decay_confidence=False) self._validate_org(tags, 1, ('Фонду', 'Олимп', None))
def test_org_dict_4_2(self): t = n( """Государственное автономное учреждение дополнительного профессионального образования Свердловской области «Армавирский учебно-технический центр», на основании Лицензии на право осуществления образовательной деятельности в лице директора Птицына Евгения Георгиевича, действующего на основании Устава, с одной стороны, """ ) tags: List[SemanticTag] = find_org_names(LegalDocument(t).parse()) self._validate_org(tags, 1, ('Государственное автономное учреждение', 'Армавирский учебно-технический центр', None))
def test_org_dict_0_1(self): t0 = """Общество с ограниченной ответственностью «Газпромнефть-сахалин», в лице Генерального директора, Имя Имя Имя, действующего на основании Устава, именуемое в дальнейшем «Заказчик», и ЧАСТНОЕ""" \ + _suffix tags: [SemanticTag] = find_org_names(LegalDocument(t0).parse()) self._validate_org(tags, 1, ('Общество с ограниченной ответственностью', 'Газпромнефть-Сахалин', 'Заказчик'))
def test_checksum(self): d0 = LegalDocument("aasasasasas aasasas").parse() d = LegalDocument("aasasasasas aasasas").parse() d1 = LegalDocument("bgfgjfgdfg dfgj d gj").parse() print(d.checksum) self.assertIsNotNone(d.checksum) self.assertTrue(d.checksum != 0) self.assertEqual(d0.checksum, d.checksum) self.assertNotEqual(d0.checksum, d1.checksum) self.assertEqual(d0.checksum, DocumentJson(d0).checksum) self.assertEqual(d.checksum, DocumentJson(d).checksum) self.assertEqual(d1.checksum, DocumentJson(d1).checksum) self.assertEqual(d1.checksum, d1.checksum) self.assertEqual(d1.get_checksum(), d1.get_checksum())
def test_PARAGRAPH_DELIMITER_docs(self): tm1 = LegalDocument(f'text\rprefix {PARAGRAPH_DELIMITER} postfix').parse() expected_tokens = ['text', 'prefix', '\n', 'postfix'] self.assertEqual(expected_tokens, tm1.tokens) self.assertEqual('text\rprefix', tm1.tokens_map.text_range((0, 2))) self.assertEqual('text\rprefix', tm1.tokens_map_norm.text_range((0, 2)))
def test_org_dict_2(self): t = n(""" ООО «Газпромнефть-Региональные продажи» в дальнейшем «БлаготворЮтель», с другой стороны """) tags: List[SemanticTag] = find_org_names(LegalDocument(t).parse()) self._validate_org( tags, 1, ('Общество с ограниченной ответственностью', 'Газпромнефть-Региональные продажи', 'БлаготворЮтель'))
def test_org_dict_3_1(self): t = n(""" Федеральное государственное бюджетное образовательное учреждение высшего образования «Государственный университет» (ФГБОУ ВО «ГУ»), именуемое в дальнейшем «Исполнитель», в лице ____________________ Сергеева """) tags: List[SemanticTag] = find_org_names(LegalDocument(t).parse()) self._validate_org(tags, 1, ( 'Федеральное государственное бюджетное образовательное учреждение высшего образования', 'Государственный университет', 'Исполнитель'))
def test_find_ip3(self): t = n(""" Сибирь , и ИП Лужин В. В., именуемый в дальнейшем « Исполнитель » , \ с другой стороны , именуемые в дальнейшем совместно « Стороны » , а по отдельности - « Сторона » , заключили настоящий договор о нижеследующем : """) tags: [SemanticTag] = find_org_names(LegalDocument(t).parse()) self._validate_org( tags, 1, ('Индивидуальный предприниматель', 'Лужин В. В.', 'Исполнитель'))
def test_org_dict_4_1(self): t = n( """Автономная некоммерческая организация дополнительного профессионального образования «ООО», \ именуемое далее Исполнитель, в лице Директора Уткиной Е.В., действующей на основании Устава, с одной стороны,""" ) tags: List[SemanticTag] = find_org_names(LegalDocument(t).parse()) self._validate_org( tags, 1, ('Автономная некоммерческая организация', 'ООО', 'Исполнитель'))
def test_embedd_large(self): point1 = [1, 6, 4] emb = FakeEmbedder(point1) ld = LegalDocument('a b c d e f g h').parse() print(ld.tokens) emb.embedd_large(ld.tokens_map_norm, 5) # print(ld.embeddings) print(ld.tokens)
def test_charter_parser(self): # from renderer import SilentRenderer point1 = [1, 6, 4] emb = FakeEmbedder(point1) legal_doc = LegalDocument("1. ЮРИДИЧЕСКИЙ содержание 4.").parse() charter = CharterDocument(legal_doc).parse() charter_parser = CharterParser(emb, emb) actx = AuditContext() charter_parser.find_org_date_number(charter, actx) charter_parser.find_attributes(charter, actx) print(charter.warnings)
def test_org_dict_1(self): t = n( "ООО «Газпромнефть-Региональные продажи», в лице начальника управления по связям с общественностью " "Иванова Семена Евгеньевича, действующего на основании Доверенности в дальнейшем «Благотворитель», " "с другой стороны заключили настоящий Договор о нижеследующем: \n") tags: List[SemanticTag] = find_org_names(LegalDocument(t).parse()) self._validate_org( tags, 1, ('Общество с ограниченной ответственностью', 'Газпромнефть-Региональные продажи', 'Благотворитель'))
def test_org_dict_0(self): t1 = 'ЧАСТНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ " БИЗНЕС ШКОЛА - СЕМИНАРЫ", ' \ 'действующее на ' \ 'основании лицензии №_____от _______., именуемое в дальнейшем «Исполнитель», ' \ 'в лице ___________ Имя Имя Имя, ' \ 'действующего на основании Устава, и Имя Имя Имя, именуемая в дальнейшем «Слушатель», в дальнейшем совместно ' \ 'именуемые «Стороны», а по отдельности – «Сторона», заключили настоящий Договор об оказании образовательных ' \ 'услуг (далее – «Договор») о нижеследующем:' t1 = n(t1) # r = re.compile(r_types, re.MULTILINE) r = complete_re_ignore_case x = r.search(t1) print('===r_alias_prefix=', x['r_alias_prefix']) print('===r_quoted_name=', x['r_quoted_name']) print('===r_quoted_name_alias=', x['r_quoted_name_alias']) tags: List[SemanticTag] = find_org_names(LegalDocument(t1).parse()) self._validate_org(tags, 1, ( 'ЧАСТНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ', 'БИЗНЕС ШКОЛА-СЕМИНАРЫ', 'Исполнитель')) t = 'Общество с ограниченной ответственностью «Газпромнефть-сахалин», в лице Генерального директора, ' \ 'Имя Имя Имя, действующего на основании Устава, именуемое в дальнейшем «Заказчик», ' \ 'и ЧАСТНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ " БИЗНЕС ШКОЛА - СЕМИНАРЫ", действующее ' \ 'на основании лицензии №_____от _______., именуемое в дальнейшем «Исполнитель», в лице ___________ Имя Имя Имя, ' \ 'действующего на основании Устава, и Имя Имя Имя, именуемая в дальнейшем «Слушатель», в дальнейшем совместно ' \ 'именуемые «Стороны», а по отдельности – «Сторона», заключили ' \ 'настоящий Договор об оказании образовательных услуг (далее – «Договор») о нижеследующем:' tags: List[SemanticTag] = find_org_names(LegalDocument(t).parse()) self._validate_org(tags, 2, ('Общество с ограниченной ответственностью', 'Газпромнефть-Сахалин', 'Заказчик')) self._validate_org(tags, 1, ( 'ЧАСТНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ', 'БИЗНЕС ШКОЛА-СЕМИНАРЫ', 'Исполнитель'))
def test_slice_doc_2(self): text = 'этилен мама этилен' __doc = LegalDocument(text) __doc.parse() tm: TextMap = __doc.tokens_map subdoc = __doc.subdoc_slice(slice(0, 1)) del __doc tm2: TextMap = subdoc.tokens_map self.assertEqual('этилен', tm2[0]) self.assertEqual('этилен', tm2.text) self.assertEqual(0, tm2.token_index_by_char(1))
def test_find_agents_person(self): doc_text = """Общество с ограниченной ответственностью «Кишки Бога» (ООО «Кишки Бога»), именуемое в дальнейшем «Заказчик», \ в лице генерального директора Шприца Александра Устыныча, действующего на основании Устава, с одной \ стороны, и Базедов Болезнь Бледнович, являющийся гражданином Российской Федерации, действующий \ от собственного имени, именуемый в дальнейшем «Исполнитель», с другой стороны, совместно \ именуемые «Стороны», и каждая в отдельности «Сторона», заключили настоящий """ tags: List[SemanticTag] = find_org_names( LegalDocument(doc_text).parse()) self._validate_org(tags, 2, ('Общество с ограниченной ответственностью', 'Кишки Бога', 'Заказчик')) self._validate_org(tags, 1, (None, 'Базедов Болезнь Бледнович', 'Исполнитель'))
def test_normalize_doc_tokenization(self): doc_text = """n\n\nАкционерное общество «Газпром - Вибраниум и Криптонит» (АО «ГВК»), именуемое в \ дальнейшем «Благотворитель», в лице заместителя генерального директора по персоналу и \ организационному развитию Неизвестного И.И., действующего на основании на основании Доверенности № Д-17 от 29.01.2018г, \ с одной стороны, и Фонд поддержки социальных инициатив «Интерстеларные пущи», именуемый в дальнейшем «Благополучатель», \ в лице Генерального директора ____________________действующего на основании Устава, с другой стороны, \ именуемые совместно «Стороны», а по отдельности «Сторона», заключили настоящий Договор о нижеследующем: """ doc = LegalDocument(doc_text) doc.parse() self.assertEqual(doc.tokens_map.text.lower(), doc.tokens_map_norm.text.lower()) for i in range(len(doc.tokens)): self.assertEqual(doc.tokens[i].lower(), doc.tokens_cc[i].lower())
def test_find_agent_MPZ(self): txt = ''' 2016 год. Акционерное общество “Газпромнефть - МНПЗ” (АО “ГПН-МНПЗ”), именуемое в дальнейшем «Организацией» водопроводно-канализационного хозяйства''' txt = n(txt) x = re.compile(r_type_and_name, re.MULTILINE).search(n(txt)) self.assertEqual('Акционерное общество', x['type']) self.assertEqual('Газпромнефть - МНПЗ', x['name']) tags: List[SemanticTag] = find_org_names(LegalDocument(txt).parse()) self._validate_org( tags, 1, ('Акционерное общество', 'Газпромнефть-МНПЗ', 'Организацией'))
def test_org_dict_0_2(self): t0 = """, и Общество с ограниченной ответственностью «Частная охранная \ организация «СТАР» (ООО «ЧОО «СТАР») (Лицензия, серия ЧО № _________, регист\ рационный № ___ от ___________., на осуществление частной охранной деятельности, \ выдана ГУ МВД России по г. Санкт-Петербургу и Ленинградской области, предоставлена\ на срок до _________ года), именуемое в дальнейшем «Исполнитель», в лице _______________ Гончаров\ а Геннадия Федоровича, действующего на основании Устава, с другой стороны """ tags: [SemanticTag] = find_org_names(LegalDocument(t0).parse()) self._validate_org( tags, 1, ('Общество с ограниченной ответственностью', 'Частная охранная организация «СТАР»', 'Исполнитель'))
def test_org_dict_3(self): t = n(""" Муниципальное бюджетное учреждение города Москвы «Радуга» именуемый в дальнейшем «Благополучатель», в лице директора Соляной Марины Александровны, действующая на основании Устава, с одной стороны, и ООО «Газпромнефть-Региональные продажи», аааааааа аааа в дальнейшем «Благотворитель», с другой стороны заключили настоящий Договор о нижеследующем: """) tags: [SemanticTag] = find_org_names(LegalDocument(t).parse(), decay_confidence=False) self._validate_org(tags, 2, ('Муниципальное бюджетное учреждение', 'Радуга', 'Благополучатель')) self._validate_org( tags, 1, ('Общество с ограниченной ответственностью', 'Газпромнефть-Региональные продажи', 'Благотворитель'))
def test_finditer__a(self): from analyser.transaction_values import _re_greather_then text = """стоимость, равную или превышающую 2000000 ( два миллиона ) долларов сша, но менее""" __doc = LegalDocument(text) __doc.parse() doc = __doc.subdoc_slice(slice(2, len(__doc.tokens_map))) tm = doc.tokens_map iter = tm.finditer(_re_greather_then) spans_ = [t for t in iter] spans = spans_[0] self.assertEqual('превышающую', tm.text_range(spans)) self.assertEqual(2, spans[0]) self.assertEqual(3, spans[1])
def test_org_dict(self): t = """ Муниципальное бюджетное учреждение города Москвы «Радуга» именуемый в дальнейшем «Благополучатель», в лице директора Соляной Марины Александровны, действующая на основании Устава, с одной стороны, и ООО «Газпромнефть-Региональные продажи» в лице начальника управления по связям с общественностью Иванова Семена Евгеньевича, действующего на основании Доверенности в дальнейшем «Благотворитель», с другой стороны заключили настоящий Договор о нижеследующем: """ + _suffix tags: List[SemanticTag] = find_org_names(LegalDocument(t).parse()) self._validate_org(tags, 2, ('Муниципальное бюджетное учреждение', 'Радуга', 'Благополучатель')) self._validate_org( tags, 1, ('Общество с ограниченной ответственностью', 'Газпромнефть-Региональные продажи', 'Благотворитель'))
def test_tokens_in_range_start_from_space(self): text = ' мама' tm = TextMap(text) self.assertEqual(1, tm.map[0][0]) self.assertEqual(0, tm.token_index_by_char(0)) txt = ' ' * 20 + '''основании Устава, с одной стороны, и Фонд «Благо»''' # tm = TextMap(txt) doc = LegalDocument(txt).parse() tm = doc.tokens_map print(tm.map[0]) print(tm.tokens[11]) print(tm.map[11]) print(f'[{doc.tokens_map.text}]') print(f'[{doc.text}]')
def test_find_agents_1(self): doc_text = """Акционерное общество «Газпромнефть - мобильная карта» (АО «ГВК»), именуемое в \ дальнейшем «Благотворитель», в лице заместителя генерального директора по персоналу и \ организационному развитию Неизвестного И.И., действующего на основании на основании Доверенности № Д-17 от 29.01.2018г, \ с одной стороны, и Фонд поддержки социальных инициатив «Интерстеларные пущи», именуемый в дальнейшем «Благополучатель», \ в лице Генерального директора ____________________действующего на основании Устава, с другой стороны, \ именуемые совместно «Стороны», а по отдельности «Сторона», заключили настоящий Договор о нижеследующем: """ tags: List[SemanticTag] = find_org_names( LegalDocument(doc_text).parse()) self._validate_org(tags, 1, ('Акционерное общество', 'Газпромнефть-Мобильная карта', 'Благотворитель')) self._validate_org(tags, 2, ('Фонд поддержки социальных инициатив', 'Интерстеларные пущи', 'Благополучатель'))
def test_find_agent_no_comma(self): txt_full = 'Акционерное Общество «Газпромнефть – Терминал» именуемое в дальнейшем «Продавец», в лице генерального ' \ 'директора, действующего на основании Устава, с одной стороны, и ООО «Ромашка», именуемое в ' \ 'дальнейшем «Покупатель», в лице Петрова П.П., действующего на основании Устава, с другой стороны, совместно ' \ 'именуемые «Стороны», а по отдельности - «Сторона», заключили настоящий договор (далее по тексту – ' \ 'Договор) о нижеследующем:' doc = LegalDocument(txt_full).parse() print(doc.text) txt = txt_full[150:] r = re.compile(r_quoted_name, re.MULTILINE) normalized_txt = n(txt) x = r.search(normalized_txt) self.assertEqual('Ромашка', x['name']) r = re.compile(r_type_and_name, re.MULTILINE) x = r.search(normalized_txt) self.assertEqual('ООО', x['type']) self.assertEqual('Ромашка', x['name']) r = re.compile(complete_re_str_org, re.MULTILINE) x = r.search(normalized_txt) self.assertEqual('ООО', x['type']) self.assertEqual('Ромашка', x['name']) r = re.compile(complete_re_str, re.MULTILINE) x = r.search(normalized_txt) self.assertEqual('ООО', x['type']) self.assertEqual('Ромашка', x['name']) self.assertEqual('Покупатель', x['alias']) print('r_alias_prefix=', x['r_alias_prefix']) print('_alias_ext=', x['_alias_ext']) r = complete_re x = r.search(normalized_txt) self.assertEqual('ООО', x['type']) self.assertEqual('Ромашка', x['name']) tags: List[SemanticTag] = find_org_names(doc, decay_confidence=False) self._validate_org( tags, 1, ('Акционерное общество', 'Газпромнефть-Терминал', 'Продавец')) self._validate_org(tags, 2, ('Общество с ограниченной ответственностью', 'Ромашка', 'Покупатель'))