Pt.py
Версия от 19:01, 16 августа 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')