Pt.py
Версия от 22:20, 5 ноября 2023; Ӧньӧ Лав (обсуждение | вклад)
Скрипт для разбивки текстов на предложения по точке с учетом исключений для русского, коми и удмуртского языков.
import os; import sys; import re; import glob; # Считываем русский файл в переменную # Указываем путь к папке, в которой нужно искать файлы folder_path = os.path.abspath(os.curdir)+"/input/" # Получаем список файлов ru file_list = glob.glob(folder_path + '/*_ru*') # Перебираем файлы for file_path in file_list: # Получаем только имя файла без пути file_name = file_path.split('/')[-1] # Проверяем, содержит ли имя файла сочетание "_ru" if '_ru' in file_name: with open(folder_path+file_name) as file: textFile = file.read() with open(os.path.abspath(os.curdir)+"/stop_words/stop_words_ru.txt") as file_stop_words: array = [row.strip() for row in file_stop_words] array.sort(key = lambda s: len(s)); array.reverse() for arrayRow in array: # print(arrayRow) arrayRowRe = arrayRow.replace(".","tchk"); arrayRowReSub = arrayRow.replace(".",""); # print(arrayRowReSub) # Задаем шаблон регулярного выражения pattern = r"(^|\s)" + arrayRowReSub + "\." # Заменяем подстроки с помощью функции re.sub() textFile = re.sub(pattern, r"\1"+arrayRowRe, textFile) # Делим на предложения # text_search = re.split('(?<=[\w\*])[\s]{2}(?=[\s-]|[—А-ЯӦ][^\.])',textFile); text_search = re.split('(?<=[\w\*.!?;)])[\n\r]{2,6}(?=[\w\*§])|(?<=[\w\*])[\s]{2}(?=[\s-]|[—А-ЯЁA-Z][^\.])|(?<=[.?!;…])[\n]{1,5}(?=[—А-ЯЁA-Z1-9])|(?<=[\w\*])[\n]{2,5}(?=[—А-ЯЁA-Z1-9])|(?<=[а-яёa-z°»)][.?!;…])[\s\t\n\r]{1,3}(?=[«(—А-ЯЁA-Z0-9])|(?<=[а-яёa-z°)][.?!;…])[\s\t\n\r]{1,3}(?=[1-9][.])|(?<=[а-яёa-z°])[\n\r](?=[1-9][.])|(?<=[а-яёa-z°][;:])[\n\r](?=[1-9][.])|(?<=[а-яёa-z°][;:])[\n\r](?=[а-яёa-z°][)])|(?<=[—А-ЯЁA-Z][—А-ЯЁA-Z][.!?])[\s](?=[1-9][.])|(?<=[—А-ЯЁA-Z][—А-ЯЁA-Z][.!?])[\s](?=[—А-ЯЁA-Z])|(?<=[а-яёa-z°][\s][0-9][0-9][.!?])[\s](?=[—А-ЯA-Z])|(?<=[а-яёa-z°][\s][0-9][.!?])[\s](?=[—А-ЯЁA-Z])|(?<=[°][CС][!.?])[\s](?=[—А-ЯЁA-Z])|(?<=[‰][!.?])[\s](?=[—А-ЯЁA-Z])|(?<=[а-яёa-z°][!.?][)])[\s](?=[—А-ЯЁA-Z])|(?<=[а-яёa-z°»)][.][.][.])[\s\t\n\r]{1,3}(?=[«(—А-ЯЁA-Z0-9])|(?<=[а-яёa-z°»)][0-9][.?!;…])[\s\t\n\r]{1,3}(?=[«(—А-ЯЁA-Z0-9])|(?<=[—А-ЯЁ][—А-ЯЁ][.?!])[\s\t\n\r]{1,3}(?=[—А-ЯЁA-Z0-9])|(?<=[а-яёa-z°][!?][.][.])[\s](?=[—А-ЯЁA-Z])|(?<=[а-яёa-z°][!?][»])[\s](?=[—А-ЯЁA-Z])|(?<=[а-яёa-z°][.][.][.])[\s](?=[—А-ЯЁA-Z])|(?<=[!][?])[\s\n](?=)|(?<=[?][!])[\s\n](?=)|(?<=[»][.!?])[\s\n](?=)|(?<=[*][.][!][?])[\s\n](?=)|(?<=[%"”][!.?])[\s\n](?=)|(?<=[!.?])[\s\n](?=[-][\s\n][—А-Я])',textFile); file_name = file_name.replace(".txt","_end.txt") with open(os.path.abspath(os.curdir)+"/output/" + file_name, "w") as file: for text_searchRow in text_search: for arrayRow in array: arrayRowRe = arrayRow.replace(".","tchk"); text_searchRow = text_searchRow.replace(arrayRowRe, arrayRow); # print(text_searchRow+"||"); file.write(text_searchRow + '\n') # Считываем коми файл в переменную # Указываем путь к папке, в которой нужно искать файлы folder_path = os.path.abspath(os.curdir)+"/input/" # Получаем список файлов kv file_list = glob.glob(folder_path + '/*_kv*') # Перебираем файлы for file_path in file_list: # Получаем только имя файла без пути file_name = file_path.split('/')[-1] # Проверяем, содержит ли имя файла сочетание "_kv" if '_kv' in file_name: with open(folder_path+file_name) as file: textFile = file.read() with open(os.path.abspath(os.curdir)+"/stop_words/stop_words_kv.txt") as file_stop_words: array = [row.strip() for row in file_stop_words] array.sort(key = lambda s: len(s)); array.reverse() for arrayRow in array: # print(arrayRow) arrayRowRe = arrayRow.replace(".","tchk"); arrayRowReSub = arrayRow.replace(".",""); # print(arrayRowReSub) # Задаем шаблон регулярного выражения pattern = r"(^|\s)" + arrayRowReSub + "\." # Заменяем подстроки с помощью функции re.sub() textFile = re.sub(pattern, r"\1"+arrayRowRe, textFile) # Делим на предложения # text_search = re.split('(?<=[\w\*])[\s]{2}(?=[\s-]|[—А-ЯӦІ][^\.])',textFile); text_search = re.split('(?<=[\w\*.!?;)])[\n\r]{2,6}(?=[\w\*§])|(?<=[\w\*])[\s]{2}(?=[\s-]|[—А-ЯІӦЁA-Z][^\.])|(?<=[.?!;…])[\n]{1,5}(?=[—А-ЯІӦЁA-Z1-9])|(?<=[\w\*])[\n]{2,5}(?=[—А-ЯІӦЁA-Z1-9])|(?<=[а-яёӧі°a-z»)][.?!;…])[\s\t\n\r]{1,3}(?=[«(—А-ЯІӦЁA-Z0-9])|(?<=[а-яёӧі°a-z)][.?!;…])[\s\t\n\r]{1,3}(?=[1-9][.])|(?<=[а-яёӧі°a-z])[\n\r](?=[1-9][.])|(?<=[а-яёӧі°a-z][;:])[\n\r](?=[1-9][.])|(?<=[а-яёӧі°a-z][;:])[\n\r](?=[а-яёӧі°a-z][)])|(?<=[—А-ЯІӦЁA-Z][—А-ЯІӦЁA-Z][.!?])[\s](?=[1-9][.])|(?<=[—А-ЯІӦЁA-Z][—А-ЯІӦЁA-Z][.!?])[\s](?=[—А-ЯІӦЁA-Z])|(?<=[а-яёӧі°a-z][\s][0-9][0-9][.!?])[\s](?=[—А-ЯӦA-Z])|(?<=[а-яёӧі°a-z][\s][0-9][.!?])[\s](?=[—А-ЯІӦЁA-Z])|(?<=[°][CС][!.?])[\s](?=[—А-ЯІӦЁA-Z])|(?<=[‰][!.?])[\s](?=[—А-ЯІӦЁA-Z])|(?<=[а-яёӧі°a-z][!.?][)])[\s](?=[—А-ЯІӦЁA-Z])|(?<=[а-яёӧі°a-z»)][.][.][.])[\s\t\n\r]{1,3}(?=[«(—А-ЯІӦЁA-Z0-9])|(?<=[а-яёӧі°a-z»)][0-9][.?!;…])[\s\t\n\r]{1,3}(?=[«(—А-ЯІӦЁA-Z0-9])|(?<=[—А-ЯӦЁ][—А-ЯӦЁ][.?!])[\s\t\n\r]{1,3}(?=[—А-ЯІӦЁA-Z0-9])|(?<=[а-яёӧі°a-z][!?][.][.])[\s](?=[—А-ЯІӦЁA-Z])|(?<=[а-яёӧі°a-z][!?][»])[\s](?=[—А-ЯІӦЁA-Z])|(?<=[а-яёӧі°a-z][.][.][.])[\s](?=[—А-ЯІӦЁA-Z])|(?<=[!][?])[\s\n](?=)|(?<=[?][!])[\s\n](?=)|(?<=[»][.!?])[\s\n](?=)|(?<=[*][.][!][?])[\s\n](?=)',textFile); file_name = file_name.replace(".txt","_end.txt") with open(os.path.abspath(os.curdir)+"/output/" + file_name, "w") as file: for text_searchRow in text_search: for arrayRow in array: arrayRowRe = arrayRow.replace(".","tchk"); text_searchRow = text_searchRow.replace(arrayRowRe, arrayRow); # print(text_searchRow+"||"); file.write(text_searchRow + '\n') # Считываем удмуртский файл в переменную # Указываем путь к папке, в которой нужно искать файлы folder_path = os.path.abspath(os.curdir)+"/input/" # Получаем список файлов ud file_list = glob.glob(folder_path + '/*_ud*') # Перебираем файлы for file_path in file_list: # Получаем только имя файла без пути file_name = file_path.split('/')[-1] # Проверяем, содержит ли имя файла сочетание "_ud" if '_ud' in file_name: with open(folder_path+file_name) as file: textFile = file.read() with open(os.path.abspath(os.curdir)+"/stop_words/stop_words_ud.txt") as file_stop_words: array = [row.strip() for row in file_stop_words] array.sort(key = lambda s: len(s)); array.reverse() for arrayRow in array: # print(arrayRow) arrayRowRe = arrayRow.replace(".","tchk"); arrayRowReSub = arrayRow.replace(".",""); # print(arrayRowReSub) # Задаем шаблон регулярного выражения pattern = r"(^|\s)" + arrayRowReSub + "\." # Заменяем подстроки с помощью функции re.sub() textFile = re.sub(pattern, r"\1"+arrayRowRe, textFile) # Делим на предложения # text_search = re.split('(?<=[\w\*])[\s]{2}(?=[\s-]|[—А-ЯӞӜӤӦӴ][^\.])',textFile); text_search = re.split('(?<=[\w\*.!?;)])[\n\r]{2,6}(?=[\w\*§])|(?<=[\w\*])[\s]{2}(?=[\s-]|[—А-ЯЁӞӜӤӦӴA-Z][^\.])|(?<=[.?!;…])[\n]{1,5}(?=[—А-ЯЁӞӜӤӦӴA-Z1-9])|(?<=[\w\*])[\n]{2,5}(?=[—А-ЯЁӞӜӤӦӴA-Z1-9])|(?<=[а-яёӟӝӥӧӵ°a-z»)][.?!;…])[\s\t\n\r]{1,3}(?=[«(—А-ЯЁӞӜӤӦӴA-Z0-9])|(?<=[а-яёӟӝӥӧӵ°a-z)][.?!;…])[\s\t\n\r]{1,3}(?=[1-9][.])|(?<=[а-яёӟӝӥӧӵ°a-z])[\n\r](?=[1-9][.])|(?<=[а-яёӟӝӥӧӵ°a-z][;:])[\n\r](?=[1-9][.])|(?<=[а-яёӟӝӥӧӵ°a-z][;:])[\n\r](?=[а-яёӟӝӥӧӵ°a-z][)])|(?<=[—А-ЯЁӞӜӤӦӴA-Z][—А-ЯЁӞӜӤӦӴA-Z][.!?])[\s](?=[1-9][.])|(?<=[—А-ЯЁӞӜӤӦӴA-Z][—А-ЯЁӞӜӤӦӴA-Z][.!?])[\s](?=[—А-ЯЁӞӜӤӦӴA-Z])|(?<=[а-яёӟӝӥӧӵ°a-z][\s][0-9][0-9][.!?])[\s](?=[—А-ЯЁӞӜӤӦӴA-Z])|(?<=[а-яёӟӝӥӧӵ°a-z][\s][0-9][.!?])[\s](?=[—А-ЯЁӞӜӤӦӴA-Z])|(?<=[°][CС][!.?])[\s](?=[—А-ЯЁӞӜӤӦӴA-Z])|(?<=[‰][!.?])[\s](?=[—А-ЯЁӞӜӤӦӴA-Z])|(?<=[а-яёӟӝӥӧӵ°a-z][!.?][)])[\s](?=[—А-ЯЁӞӜӤӦӴA-Z])|(?<=[а-яёӟӝӥӧӵ°a-z»)][.][.][.])[\s\t\n\r]{1,3}(?=[«(—А-ЯЁӞӜӤӦӴA-Z0-9])|(?<=[а-яёӟӝӥӧӵ°a-z»)][0-9][.?!;…])[\s\t\n\r]{1,3}(?=[«(—А-ЯЁӞӜӤӦӴA-Z0-9])|(?<=[—А-ЯЁӞӜӤӦӴA-Z][—А-ЯЁӞӜӤӦӴA-Z][.?!])[\s\t\n\r]{1,3}(?=[—А-ЯЁӞӜӤӦӴA-Z0-9])|(?<=[а-яёӟӝӥӧӵ°a-z][!?][.][.])[\s](?=[—А-ЯЁӞӜӤӦӴA-Z])|(?<=[а-яёӟӝӥӧӵ°a-z][!?][»])[\s](?=[—А-ЯЁӞӜӤӦӴA-Z])|(?<=[а-яёӟӝӥӧӵ°a-z][.][.][.])[\s](?=[—А-ЯЁӞӜӤӦӴA-Z])|(?<=[!][?])[\s\n](?=)|(?<=[?][!])[\s\n](?=)|(?<=[»][.!?])[\s\n](?=)|(?<=[*][.][!][?])[\s\n](?=)',textFile); file_name = file_name.replace(".txt","_end.txt") with open(os.path.abspath(os.curdir)+"/output/" + file_name, "w") as file: for text_searchRow in text_search: for arrayRow in array: arrayRowRe = arrayRow.replace(".","tchk"); text_searchRow = text_searchRow.replace(arrayRowRe, arrayRow); # print(text_searchRow+"||"); file.write(text_searchRow + '\n')