Pt.py

Материал из Wiki FU-Lab
Версия от 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')