def get_homonymous_multi_rooted(): multi_root_words = get_dicts_from_csv_file( 'src_dict/Многокорневые слова.csv') multi_root_names = [] for multi_root_word in multi_root_words: for root_index_key in list(multi_root_word): if multi_root_word[root_index_key]: multi_root_names.append( get_socket_word_form(multi_root_word[root_index_key]).name) socket_group_list = list(read_src_socket_bs('src_dict/БГ 10.04.21.txt')) homonymous_multi_rooted = [] for socket_group in socket_group_list: for sub_group in socket_group.sub_groups: title_word_form = sub_group.title_word_form for word_form in sub_group.socket_word_forms: if (not word_form.invisible and not word_form.root_index): if word_form.name in multi_root_names: print(word_form) if str(word_form) == str(title_word_form): homonymous_multi_rooted.append(str(word_form)) else: homonymous_multi_rooted.append(' < '.join([ str(word_form), str(title_word_form), ])) homonymous_multi_rooted = sorted( homonymous_multi_rooted, key=lambda x: x.replace('*', '').strip().lower()) save_list_to_file(homonymous_multi_rooted, 'out/Слова, омонимичные многокорневым словам.txt')
def find_all_multi_rooted_words_from_bs(): """ 15. Найти в док-те БС 06.04.21.txt все слова (ЗС групп и одиночки) из док-та Многокорневые слова.xlsx и создать список строк с такими словами - док-т Многокорневые слова БС.txt . Учитывая п.п. 1 и 2 Правил соотношения БГ и БС, сравнить каждую строку док-та Многокорневые слова БС.txt с каждой ячейкой со словом в док-те Многокорневые слова.xlsx . """ multi_root_words = get_dicts_from_csv_file( 'out/Многокорневые слова.csv') word_forms_bases = list(read_src_bs('src_dict/БС 06.04.21.txt')) multi_root_bg_forms = [] for multi_root_word in multi_root_words: for root_index_key in list(multi_root_word)[1:]: if multi_root_word[root_index_key]: socket_form = get_socket_word_form( multi_root_word[root_index_key] ) multi_root_bg_forms.append( ' '.join(filter( None, [ socket_form.name, socket_form.idf, ' '.join(socket_form.info), socket_form.note.replace('* ', ''), ]))) multi_root_bs_forms = [] for group_word_form in word_forms_bases: title_form = group_word_form.title_word_form src_title_form = ' '.join(filter( None, [ title_form.name, title_form.idf, ' '.join(title_form.info), (title_form.note.replace('.* ', '') if '<' not in title_form.note else None), ])) if src_title_form in multi_root_bg_forms: print(title_form) multi_root_bs_forms.append(str(title_form)) multi_root_bs_forms = sorted( multi_root_bs_forms, key=lambda x: x.replace('*', '').lower().strip() ) save_list_to_file(multi_root_bs_forms, 'out/Многокорневые слова БС.txt')
def save_groups_to_bs(): src_groups = get_dicts_from_csv_file('Добавить группы в БС.csv') add_groups_to_bs_list = [] for src_dict in src_groups: add_groups_to_bs_list.append(get_group_word_form(src_dict)) save_bs_dicts_to_txt(sorted(add_groups_to_bs_list), 'out/Добавить группы в БС. Сущ-ные.txt', encoding='utf-8')
def check_socket_bs(): multi_root_words = get_dicts_from_csv_file('out/Многокорневые слова.csv') multi_root_bs_forms = get_string_list_from_file( 'out/Многокорневые слова БС.txt') multi_root_bs_forms = [ get_bs_title_word_form(x).name for x in multi_root_bs_forms ] for multi_root_word in multi_root_words: for root_index_key in list(multi_root_word)[1:]: if multi_root_word[root_index_key]: socket_form = get_socket_word_form( multi_root_word[root_index_key]) if socket_form.name not in multi_root_bs_forms: print(socket_form)
def save_groups_to_bs(): """Ещё раз, пож-ста, п. 3. 3. Используя списки на вкладке "Добавить группы в БС" док-та Существительные.xlsx , а также шаблоны, приведённые на вкладках "ШАБЛОНЫ ед.ч." и "ШАБЛОНЫ мн.ч." того же док-та, создать док-т Добавить группы в БС. Сущ-ные.txt .""" src_groups = get_dicts_from_csv_file('Добавить группы в БС.csv') add_groups_to_bs_list = [] for src_dict in src_groups: add_groups_to_bs_list.append(get_group_word_form(src_dict)) save_bs_dicts_to_txt(sorted(add_groups_to_bs_list), 'out/Добавить группы в БС. Сущ-ные.txt', encoding='utf-8')
def save_groups_to_bs(): """ 10. Используя списки на вкладке "Глаголы" док-та Глаголы.xlsx , а также шаблоны, приведённые на вкладках "Шаблоны НБ вр.", "Шаблоны Причастия" и "Шаблоны Остальное" того же док-та, создать док-т Добавить группы в БС. Глаголы.txt . """ src_groups = get_dicts_from_csv_file('Добавить глаголы.csv') add_groups_to_bs_list = [] for src_dict in src_groups: add_groups_to_bs_list.append(get_group_word_form(src_dict)) save_bs_dicts_to_txt(sorted(add_groups_to_bs_list), 'out/Добавить группы в БС. Глаголы.txt', encoding='utf-8')
def find_all_multi_rooted_words_from_bs(): multi_root_words = get_dicts_from_csv_file( 'src_dict/Многокорневые слова.csv') word_forms_bases = list(read_src_bs('src_dict/БС 03.02.21.txt')) multi_root_bg_forms = [] for multi_root_word in multi_root_words: for root_index_key in list(multi_root_word)[1:]: if multi_root_word[root_index_key]: socket_form = get_socket_word_form( multi_root_word[root_index_key] ) multi_root_bg_forms.append( ' '.join(filter( None, [ socket_form.name, socket_form.idf, ' '.join(socket_form.info), socket_form.note.replace('* ', '') ]))) multi_root_bs_forms = [] for group_word_form in word_forms_bases: title_form = group_word_form.title_word_form src_title_form = ' '.join(filter( None, [ title_form.name, title_form.idf, ' '.join(title_form.info), title_form.note.replace('.* ', '') ])) if src_title_form in multi_root_bg_forms: print(title_form) multi_root_bs_forms.append(str(title_form)) multi_root_bs_forms = sorted( multi_root_bs_forms, key=lambda x: x.replace('*', '').lower().strip() ) save_list_to_file(multi_root_bs_forms, 'out/Многокорневые слова БС.txt')
def save_groups_to_bs(): """ 6. Используя списки на вкладке "Прил-ные в столбик" док-та Прилагательные.xlsx , а также шаблоны, приведённые на вкладках "ШАБЛОНЫ полн. ф., прев. ст." и "ШАБЛОНЫ кр. ф., срав. ст." того же док-та, создать док-т Добавить группы в БС. Прил-ные.txt . """ src_groups = get_dicts_from_csv_file('Прилагательные.csv') add_groups_to_bs_list = [] for src_dict in src_groups: add_groups_to_bs_list.append(get_socket_group_word_form(src_dict)) save_bs_dicts_to_txt(sorted(add_groups_to_bs_list), 'out/Добавить группы в БС. Прил-ные.txt', encoding='utf-8')
def add_groups_to_bs(): """3. Используя списки на вкладке "Добавить группы в БС" док-та Существительные.xlsx , а также шаблоны, приведённые на вкладках "ШАБЛОНЫ ед.ч." и "ШАБЛОНЫ мн.ч." того же док-та, создать док-т Добавить группы в БС. Сущ-ные.txt .""" src_groups = get_dicts_from_csv_file('Добавить группы в БС.csv') add_groups_to_bs_list = [] for src_dict in src_groups: add_groups_to_bs_list.append(get_group_word_form(src_dict)) save_bs_dicts_to_txt(sorted(add_groups_to_bs_list), 'out/Добавить группы в БС. Сущ-ные.txt', encoding='utf-8') word_forms_bases = list(read_src_bs('src_dict/БС 13.12.20.txt')) word_forms_bases += add_groups_to_bs_list save_bs_dicts_to_txt(sorted(word_forms_bases), 'out/БС 14.12.20.txt')
def check_socket_bs(): multi_root_words = get_dicts_from_csv_file('out/Многокорневые слова.csv') multi_root_bs_forms = get_string_list_from_file( 'out/Многокорневые слова БС.txt') multi_root_bs_forms = [ get_bs_title_word_form(x).name for x in multi_root_bs_forms ] not_found_in_bs = [] for multi_root_word in multi_root_words: for root_index_key in list(multi_root_word)[1:]: if multi_root_word[root_index_key]: socket_form = get_socket_word_form( multi_root_word[root_index_key]) if socket_form.name not in multi_root_bs_forms: print(socket_form) not_found_in_bs.append(str(socket_form)) save_list_to_file(not_found_in_bs, 'out/Не найденные в БС.txt')
def ordinary_words_bg(): socket_group_list = list(read_src_socket_bs( 'src_dict/БГ 01.03.21.txt')) exclusion_list = [] # Многокорневые слова multi_root_words = get_dicts_from_csv_file( 'src_dict/Многокорневые слова.csv') multi_root_bg_forms = [] for multi_root_word in multi_root_words: for root_index_key in list(multi_root_word): if multi_root_word[root_index_key]: multi_root_bg_forms.append(multi_root_word[root_index_key]) exclusion_list += multi_root_bg_forms # Повторы в группах replays_in_groups = [] with open('src_dict/Повторы в группах.txt', encoding='utf-8') as f_in: groups = (x.strip() for x in f_in.read().split('\n\n')) for group in groups: for line in group.split('\n')[1:]: if not line.startswith('!'): replays_in_groups.append(line) exclusion_list += replays_in_groups # Омонимы БГ homonyms_bg = get_string_list_from_file('src_dict/Омонимы БГ.txt') homonyms_bg_str_form = [] for homonym in homonyms_bg: socket_form = get_socket_word_form(homonym) string_form = ' '.join(filter( None, [ socket_form.invisible, socket_form.name, socket_form.root_index, socket_form.idf, ' '.join(socket_form.info), socket_form.note, socket_form.etml_note, ] )) homonyms_bg_str_form.append(string_form) exclusion_list += homonyms_bg_str_form # Слова, омонимичные многокорневым homonymous_words = get_string_list_from_file( 'src_dict/Слова, омонимичные многокорневым словам.txt') homonymous_words_str_form = [] for word in homonymous_words: socket_form = get_socket_word_form(word) string_form = ' '.join(filter( None, [ socket_form.invisible, socket_form.name, socket_form.root_index, socket_form.idf, ' '.join(socket_form.info), socket_form.note, socket_form.etml_note, ] )) homonymous_words_str_form.append(string_form) exclusion_list += homonymous_words_str_form # Обычные слова БГ ordinary_words_bg_list = [] for socket_group in socket_group_list: for sub_group in socket_group.sub_groups: for word_form in sub_group.socket_word_forms: if not word_form.invisible: if str(word_form) not in exclusion_list: ordinary_words_bg_list.append(word_form) ordinary_words_bg_list = [str(x) for x in sorted(ordinary_words_bg_list)] save_list_to_file(ordinary_words_bg_list, 'out/Обычные слова БГ.txt')
def check_replays(): """ 14. Проверить каждое слово из док-та Excel Многокорневые слова.xlsx на количество повторов в док-те БГ 12.02.21.txt , используя следующую таблицу: корневой индекс 2* / 3** - 1 повтор в БГ; корневой индекс 2 / 2! / 3* / 4** - 2 повтора в БГ; корневой индекс 3 / 3! / 4* / 5** - 3 повтора в БГ; корневой индекс 4 / 4! / 5* / 6** - 4 повтора в БГ; корневой индекс 5 / 5! / 6* / 7** - 5 повторов в БГ; корневой индекс 6 / 6! / 7* - 6 повторов в БГ; корневой индекс 7 / 7! - 7 повторов в БГ; и на абсолютную идентичность строки со словом в док-те Многокорневые слова.xlsx со ВСЕМИ строками с этим словом в док-те БГ 12.02.21.txt . Т.е. напр. строка из док-та Многокорневые слова.xlsx автобус 3* .СеИ неод мI1 мнII1 * auto(mobile) (omni)bus должна ИМЕННО В ТАКОМ виде 2 раза присутствовать в док-те БГ 12.02.21.txt . """ multi_root_words = get_dicts_from_csv_file('out/Многокорневые слова.csv') socket_group_word_form_list = list( read_src_socket_bs('src_dict/БГ 12.02.21.txt')) root_index_ds = { '2': [], '2!': [], '2*': [], '3': [], '3!': [], '3*': [], '3**': [], '4': [], '4!': [], '4*': [], '4**': [], '5': [], '5!': [], '5*': [], '5**': [], '6': [], '6!': [], '6*': [], '6**': [], '7': [], '7!': [], '7*': [], '7**': [], } count_index = { '2': 2, '2!': 2, '2*': 1, '3': 3, '3!': 3, '3*': 2, '3**': 1, '4': 4, '4!': 4, '4*': 3, '4**': 2, '5': 5, '5!': 5, '5*': 4, '5**': 3, '6': 6, '6!': 6, '6*': 5, '6**': 4, '7': 7, '7!': 7, '7*': 6, '7**': 5, } incorrect_replays = [] for multi_root_word in multi_root_words: for root_index_key in list(multi_root_word)[1:]: if multi_root_word[root_index_key]: root_index_ds[root_index_key].append( multi_root_word[root_index_key]) for root_index in root_index_ds: for multi_root_word in root_index_ds[root_index]: count_word = 0 for socket_group_word_form in socket_group_word_form_list: for socket_word_form in socket_group_word_form.socket_word_forms: if multi_root_word == str(socket_word_form): count_word += 1 if count_word != count_index[root_index]: print(multi_root_word) incorrect_replays.append(f'{multi_root_word} - {count_word}') save_list_to_file(incorrect_replays, 'out/Не корректные повторы.txt')
def check_replays(): multi_root_words = get_dicts_from_csv_file('out/Многокорневые слова.csv') socket_group_word_form_list = list( read_src_socket_bs('src_dict/БГ 10.04.21.txt')) root_index_ds = { '2': [], '2!': [], '2*': [], '3': [], '3!': [], '3*': [], '3**': [], '4': [], '4!': [], '4*': [], '4**': [], '5': [], '5!': [], '5*': [], '5**': [], '6': [], '6!': [], '6*': [], '6**': [], '7': [], '7!': [], '7*': [], '7**': [], } count_index = { '2': 2, '2!': 2, '2*': 1, '3': 3, '3!': 3, '3*': 2, '3**': 1, '4': 4, '4!': 4, '4*': 3, '4**': 2, '5': 5, '5!': 5, '5*': 4, '5**': 3, '6': 6, '6!': 6, '6*': 5, '6**': 4, '7': 7, '7!': 7, '7*': 6, '7**': 5, } incorrect_replays = [] for multi_root_word in multi_root_words: for root_index_key in list(multi_root_word)[1:]: if multi_root_word[root_index_key]: root_index_ds[root_index_key].append( multi_root_word[root_index_key]) for root_index in root_index_ds: for multi_root_word in root_index_ds[root_index]: count_word = 0 for socket_group_word_form in socket_group_word_form_list: for socket_word_form in socket_group_word_form.socket_word_forms: if multi_root_word == str(socket_word_form): count_word += 1 if count_word != count_index[root_index]: print(multi_root_word) incorrect_replays.append(f'{multi_root_word} - {count_word}') save_list_to_file(incorrect_replays, 'out/Не корректные повторы.txt')