コード例 #1
0
    def build_masc_and_fem_surnames(self,
                                    report_filename="surnames.masc_and_fem.txt"
                                    ):
        query = """
            select person_name 
            from declarations_person
        """

        surnames_fem_frq = defaultdict(int)
        surnames_masc_frq = defaultdict(int)
        surnames = defaultdict(int)
        with connection.cursor() as cursor:
            cursor.execute(query)
            for person_name, in cursor:
                fio = TRussianFio(person_name)
                if not fio.is_resolved:
                    continue
                if fio.first_name in self.names_masc:
                    surnames_masc_frq[fio.family_name] += 1
                if fio.first_name in self.names_fem:
                    surnames_fem_frq[fio.family_name] += 1
                surnames[fio.family_name] += 1

        self.surnames_masc.clear()
        self.surnames_fem.clear()
        with open(report_filename, "w") as outp:
            for surname in surnames:
                all_surname_freq = surnames_fem_frq[
                    surname] + surnames_masc_frq[surname] + 0.00000001
                fem_ratio = int(100.0 * surnames_fem_frq[surname] /
                                float(all_surname_freq))
                gender = None
                if surname.endswith("о") or surname.endswith("ук") or surname.endswith("юк") or surname.endswith("o") \
                        or surname.endswith("и"):
                    gender = None
                elif (all_surname_freq > 3
                      and fem_ratio > 90) or surname.endswith(
                          'ская') or surname.endswith('цкий'):
                    gender = TGender.feminine
                elif (all_surname_freq > 3
                      and fem_ratio < 10) or surname.endswith(
                          'ский') or surname.endswith('цкая'):
                    gender = TGender.masculine
                elif surname.endswith(
                        'а') and surnames_masc_frq[surname[:-1]] > 3:
                    #surname=иванова, search for иванов
                    gender = TGender.feminine
                elif not surname.endswith('а') and surnames_fem_frq[surname +
                                                                    'а'] > 3:
                    # surname=иванов, search for иванова
                    gender = TGender.masculine
                elif len(surname) > 4 and (surname.endswith('ова') or surname.endswith('ева') \
                                           or surname.endswith('ёва') or surname.endswith('ина') or surname.endswith('ына')):
                    gender = TGender.feminine
                elif len(surname) > 4 and (surname.endswith('ов') or surname.endswith('ев') or surname.endswith('ёв') \
                        or surname.endswith('ин') or surname.endswith('ын')) and fem_ratio < 1:
                    gender = TGender.masculine
                if gender == TGender.masculine and (surname[-1] == "а"
                                                    or surname[-1] == "я"):
                    gender = None
                outp.write("{}\t{}\t{}\t{}\t{}\n".format(
                    surname, surnames_masc_frq[surname],
                    surnames_fem_frq[surname], surnames[surname], fem_ratio,
                    TGender.gender_to_str(gender)))
                if gender is not None:
                    if gender == TGender.masculine:
                        self.surnames_masc.add(surname)
                    else:
                        self.surnames_fem.add(surname)
コード例 #2
0
ファイル: views.py プロジェクト: TI-Russia/smart_parser
def compare_Russian_fio(search_query, person_name):
    if search_query.find(' ') == -1 and search_query.find('.') == -1:
        return True
    fio1 = TRussianFio(search_query, from_search_request=True)
    fio2 = TRussianFio(person_name)
    return fio1.is_resolved and fio2.is_resolved and fio1.is_compatible_to(fio2)
コード例 #3
0
ファイル: views.py プロジェクト: TI-Russia/smart_parser
 def build_person_name_elastic_search_query(self, should_items):
     person_name = self.field_params.get("person_name")
     if person_name is not None and person_name != '':
         should_items.append({"match": {"person_name": person_name}})
         fio = TRussianFio(person_name, from_search_request=True)
         should_items.append({"match": {"person_name": fio.family_name}})
コード例 #4
0
    def test_search_section_by_person_name(self):
        def _P(fio):
            return TRussianFio(fio)

        def _F(family_name, first_name, patronymic):
            return TRussianFio("").build_from_parts(family_name, first_name,
                                                    patronymic)

        self.assertEqual(_P("Мамедов Чингиз Георгиевич"),
                         _F("Мамедов", "Чингиз", "Георгиевич"))
        self.assertEqual(_P("Мамедов Чингиз Георгиевич,"),
                         _F("Мамедов", "Чингиз", "Георгиевич"))
        self.assertEqual(_P("Мамедов Чингиз Георгиевич*"),
                         _F("Мамедов", "Чингиз", "Георгиевич"))
        self.assertEqual(_P("Мамедов Ч.Г."), _F("Мамедов", "Ч", "Г"))
        self.assertEqual(_P("Мамедов ЧГ"), _F("Мамедов", "Ч", "Г"))
        self.assertEqual(_P("МамедовЧГ."), _F("Мамедов", "Ч", "Г"))
        self.assertEqual(_P("Ч.Г. Мамедов"), _F("Мамедов", "Ч", "Г"))
        self.assertEqual(_P("Мамедов Ч.Г.-О."), _F("Мамедов", "Ч", "Г.-О"))
        self.assertEqual(
            _P("Халиуллина Гульнур Ахметнагимовна Ахметнагимовна"),
            _F("Халиуллина", "Гульнур", "Ахметнагимовна"))
        self.assertEqual(_P("Мамедов .Ч. Г."), _F("Мамедов", "Ч", "Г"))
        self.assertEqual(_P("Мамедов Ч..Г."), _F("Мамедов", "Ч", "Г"))
        self.assertEqual(_P("Пашин А.Е"), _F("Пашин", "А", "Е"))
        self.assertEqual(_P("Гулиев Гурбангули Арастун Оглы"),
                         _F("Гулиев", "Гурбангули", "Арастун Оглы"))
        self.assertEqual(_P("Гасанова Рена Амрали Кызы"),
                         _F("Гасанова", "Рена", "Амрали Кызы"))

        self.assertEqual(_P("Заман Шамима Хасмат-Уз"),
                         _F("Заман", "Шамима", "Хасмат-Уз"))
        self.assertEqual(_P("А.В.Бойко"), _F("Бойко", "А", "В"))
        self.assertEqual(_P('Дорошенкова М В.'), _F("Дорошенкова", "М", "В"))
        self.assertEqual(_P('Ахмедова З. М.-Т.'), _F("Ахмедова", "З", "М.-Т"))
        self.assertEqual(_P('Пыжик Игорь Григорьев Ич.'),
                         _F("Пыжик", "Игорь", "Григорьевич"))
        self.assertEqual(_P('Изъюрова Вик- Тория Александровна'),
                         _F("Изъюрова", "Виктория", "Александровна"))
        self.assertEqual(_P('Романова Людмила Афанасьевна.'),
                         _F("Романова", "Людмила", "Афанасьевна"))
        self.assertEqual(_P('Строганова Наталья Александров На'),
                         _F("Строганова", "Наталья", "Александровна"))
        self.assertEqual(_P('А.А. Кайгородова'), _F("Кайгородова", "А", "А"))
        self.assertEqual(_P('Туба Давор Симович'),
                         _F("Туба", "Давор", "Симович"))
        self.assertEqual(_P('Шпак Игрь Алесандрович'),
                         _F("Шпак", "Игрь", "Алесандрович"))
        self.assertEqual(_P('Слатвинский Д,А.'), _F("Слатвинский", "Д", "А"))
        self.assertEqual(_P('ШАККУМ Мартин Люцианович'),
                         _F("Шаккум", "Мартин", "Люцианович"))

        # I do know how to solve it
        #self.assertEqual(_P('ЛеКиашвили Д.З.'), _F("Лекиашвили", "Д", "З"))

        self.assertEqual(_P('Зейналов Б.Н.о.'), _F("Зейналов", "Б", "Н.о"))
        self.assertEqual(_P('Никулаева Мария ивановна'),
                         _F("Никулаева", "Мария", "Ивановна"))
        self.assertEqual(_P('Гунбатов Д.Ш.О'), _F("Гунбатов", "Д", "Ш.о"))
        self.assertEqual(_P('Мамедов.Х.Н.'), _F("Мамедов", "Х", "Н"))
        self.assertEqual(_P('Морозова С,А'), _F("Морозова", "С", "А"))
        self.assertEqual(_P('Грудинин И. В..'), _F("Грудинин", "И", "В"))
        self.assertEqual(
            _P('Рыбаков Анатолий Витальевич, Глава Муниципального Образования'
               ), _F("Рыбаков", "Анатолий", "Витальевич"))

        #correct ocr errors ѐ ->   ё
        self.assertEqual(_P('Кулѐва Ольга Владимировна'),
                         _F("Кулёва", "Ольга", "Владимировна"))

        # use Russian morphology dictionary
        self.assertEqual(_P('Великоречан Ина Е.Е'),
                         _F("Великоречанина", "Е", "Е"))
        self.assertEqual(_P('Махиборо Да Н.М.'), _F("Махиборода", "Н", "М"))
        self.assertEqual(_P('Халыев А.С .'), _F("Халыев", "А", "С"))
        self.assertEqual(_P('Погуляйченко Оле Г Васильевич'),
                         _F("Погуляйченко", "Олег", "Васильевич"))
        self.assertEqual(_P('Воецкая Ирина'), _F("Воецкая", "Ирина", ""))
        self.assertEqual(_P('Друзина Инна'), _F("Друзина", "Инна", ""))
        self.assertEqual(_P('Гладилина Светлана В.'),
                         _F("Гладилина", "Светлана", "В"))
        self.assertEqual(_P('Разогрееванина Николаевна'),
                         _F("Разогреева", "Нина", "Николаевна"))

        self.assertEqual(TRussianFio("Иванов", from_search_request=True),
                         _F("Иванов", "", ""))

        self.assertEqual(_P("квартира").is_resolved, False)
        self.assertEqual(_P("Ф.И.О.").is_resolved, False)
        self.assertEqual(_P("Иванов").is_resolved, False)
        self.assertEqual(_P("Иванов ..").is_resolved, False)
        self.assertEqual(_P("Мамедов ААА").is_resolved, False)
        self.assertEqual(_P("Мамедов Ч.").is_resolved, False)
        self.assertEqual(_P("Жена Суконцева А.В.").is_resolved, False)
        self.assertEqual(_P("Журавлев А.В. Супруга").is_resolved, False)
        self.assertEqual(_P('Долевая 2/3 Доля').is_resolved, False)
        self.assertEqual(
            _P('Цинцадзе Гис Ионович (Супруг)').is_resolved, False)
        self.assertEqual(
            _P('Сотрудник Кондратьев Вадим Сергеевич').is_resolved, False)
        self.assertEqual(_P('Сделка Совершалась').is_resolved, False)
        self.assertEqual(_P('Сделка Не Совершалась').is_resolved, False)
        self.assertEqual(
            _P('Руденко Р.Р. Учитель С Доплатой За Руководство Оу').
            is_resolved, False)
        self.assertEqual(
            _P('Дети Тиханова Надежда Евгеньевна').is_resolved, False)
        self.assertEqual(_P('Земельный Участок Дачный').is_resolved, False)
        self.assertEqual(_P('Дачный Земельный Участок').is_resolved, False)
        self.assertEqual(_P('Садовый Земельный Участок').is_resolved, False)
        self.assertEqual(_P('Летний Домик Индивидуальная').is_resolved, False)
        self.assertEqual(_P('Земли Населенных Пунктов').is_resolved, False)
        self.assertEqual(_P('Машина Рено Логан').is_resolved, False)
        self.assertEqual(_P('Жилой дом пай').is_resolved, False)
        self.assertEqual(_P('Овощная Ячейка Дом').is_resolved, False)
        self.assertEqual(_P('Изолированная Часть Жилого').is_resolved, False)
        self.assertEqual(_P('Военная Пенсия').is_resolved, False)
        self.assertEqual(_P('Дмитрий Анатольевич').is_resolved, False)
        self.assertEqual(_P('Горячева Михайловна').is_resolved, False)

        self.assertTrue(
            _P("Иванов Иван Иванович").is_compatible_to(_P("Иванов И. И.")))
        self.assertTrue(
            _P("Иванов Иван Иванович").is_compatible_to(
                _P(" Иванов Иван Иванович ")))
        self.assertTrue(
            _P("Иванов Иван Иванович").is_compatible_to(_F("Иванов", "И", "")))
        self.assertTrue(
            _P("Иванов Иван Иванович").is_compatible_to(_F("Иванов", "", "")))
コード例 #5
0
 def _P(fio):
     return TRussianFio(fio)
コード例 #6
0
 def _P(fio):
     return TRussianFio(fio).get_normalized_person_name()
コード例 #7
0
 def _P(s):
     words = re.split("[»«\"',./:;_{}\[\]()\s]+", s)
     return " ".join(TRussianFio.delete_fios(words))
コード例 #8
0
 def _F(family_name, first_name, patronymic):
     return TRussianFio("").build_from_parts(family_name, first_name,
                                             patronymic)
コード例 #9
0
 def _P(fio):
     return TRussianFio(fio, from_search_request=True)
コード例 #10
0
 def set_person_name(self, person_name):
     self.person_name = person_name
     self.fio = TRussianFio(person_name)
コード例 #11
0
 def __init__(self, document_id, year, person_name, income_sum):
     self.document_id = str(document_id)
     self.year = str(year)
     self.person_name = self.person_name = TRussianFio(person_name).get_normalized_person_name()
     self.income_sum = str(convert_to_int_with_nones(income_sum))
コード例 #12
0
def check_family_name(n1, n2):
    fio1 = TRussianFio(n1)
    fio2 = TRussianFio(n2)
    if not fio1.is_resolved or not fio2.is_resolved:
        return n1[0:3].lower() == n2[0:3].lower()
    return fio1.family_name == fio2.family_name