Разработка собственных форматеров
<< Click to Display Table of Contents >> Интеллектуальные возможности > Сервисы Directum Ario > Адаптация сервисов Ario под бизнес-задачи компании > Постобработка фактов Разработка собственных форматеров |
Реализация собственных форматеров в сервисах Ario может потребоваться, например, когда в базовую грамматику добавлено распознавание новых фактов или создана грамматика для извлечения фактов из нового типа документа.
Форматеры фактов
Для упрощения разработки создаваемый форматер можно наследовать от классов:
•для strip-форматеров от StripFactFormatterBase;
•для replace-форматеров от ReplaceFactFormatterBase;
•для прочих форматеров фактов от общего базового форматера FactFormatterBase.
Пример реализации собственного strip-форматера для очистки факта GrossWeight от символов «’!/»:
"""Форматер очистки полей факта GrossWeight от лишних символов в начале и в конце строки"""
from formatters.fact_formatters.strip_fact_formatter_base import StripFactFormatterBase
class StripGrossWeightFormatter(StripFactFormatterBase):
def __init__(self):
super().__init__()
self.strip_symbols = '\'/!'
self.fields = ['GrossWeight']
Для разработки и подключения собственных форматеров фактов:
1.Перейдите в папку с форматерами фактов. Путь по умолчанию C:\inetpub\Ario\FactExtractorService\formatters\fact_formatters.
2.Создайте файл с расширением *.py и назовите его по формату: <тип форматера фактов>_<наименование факта>_<наименование поля факта>_formatter.py. Например, strip_gross_weight_formatter.py.
3.Откройте созданный файл и в первой строке добавьте комментарий с информацией о форматере и его назначении, например:
"""Форматер очистки полей факта GrossWeight от лишних символов в начале и в конце строки"""
4.Во второй строке импортируйте соответствующий базовый форматер:
from formatters.fact_formatters.strip_fact_formatter_base import StripFactFormatterBase
5.В третьей строке укажите класс, от которого наследуется создаваемый форматер:
class StripGrossWeightFormatter(StripFactFormatterBase):
6.В четвертой и пятой строках задайте метод обращения к родительскому классу:
def __init__(self):
super().__init__()
7.Далее заполните шестую и седьмую строки в зависимости от типа добавляемого форматера фактов.
Для strip-форматеров:
•в параметре self.strip_symbols задайте символы, которые нужно удалять в начале и в конце строки;
•в параметре self.fields укажите список полей фактов, которые должен обрабатывать форматер.
Пример:
self.strip_symbols = '\'/!'
self.fields = ['GrossWeight']
Для replace-форматеров:
•в параметре self.field укажите поле факта, которое должен обрабатывать форматер;
•в параметре self.replace_symbols в виде регулярных выражений задайте значения, которые нужно заменить.
Пример для replace-форматера ReplaceGoodsGrossWeightFormatter:
self.field = ' GrossWeight'
self.replace_symbols = [
(r',', r'.')
8.Откройте конфигурационный файл formatters.json, который по умолчанию находится в папке с установленным сервисом DFES-B C:\inetpub\Ario\FactExtractorService\formatters.json.
9.Перейдите в секцию факта, для которого велась разработка форматера, например Goods, и добавьте в конец списка наименование вновь разработанного форматера.
10.Сохраните конфигурационный файл и перезапустите службу сервиса DFES-B.
Грамматические форматеры
При разработке учитывайте, что создаваемый форматер должен наследоваться от базовых грамматических форматеров.
Пример реализации собственного грамматического форматера ResolutionGrammarFormatter, который удаляет дубли факта Debtor:
"""Форматер для удаления дублей факта Debtor из результатов извлечения текста"""
from formatters.formatter_base import FormatterBase
class ResolutionGrammarFormatter(FormatterBase):
def __call__(self, facts):
self.facts = facts
self.process_debtor()
return self.facts
def process_debtor(self):
debtors = self.get_facts(self.facts,'Debtor')
if len(debtors) == 0:
return
for debtor in debtors [1:]:
self.facts.remove(debtor)
Для разработки и подключения собственных форматеров фактов:
1.Перейдите в папку с грамматическими форматерами. Путь по умолчанию C:\inetpub\Ario\FactExtractorService\formatters\grammar_formatters.
2.Создайте файл с расширением *.py и назовите его по формату: <наименование_грамматики>_<наименование факта>_<наименование поля факта>_grammar_formatter.py. Например, resolution_grammar.py.
3.Откройте созданный файл и в первой строке добавьте комментарий с информацией о форматере и его назначении, например:
"""Форматер для удаления дублей факта Debtor из результатов извлечения текста"""
4.Во второй строке импортируйте соответствующий базовый форматер:
from formatters.formatter_base import FormatterBase
5.Если в логике работы форматера необходимо создание нового факта, то задайте выражение для импорта класса Fact.
6.Если в логике работы форматера необходимо создание нового поля факта, то задайте выражение для импорта класса FactField.
7.Укажите класс, от которого наследуется создаваемый форматер:
class ResolutionGrammarFormatter(FormatterBase):
8.В методе call укажите аргументы для обращения к функции, в которой фиксируется основная логика постобработки факта. Например:
def __call__(self, facts):
self.facts = facts
self.process_debtor()
return self.facts
9.В функции с префиксом prosess_ опишите основную логику постобработки факта. Пример функции process_debtor:
def process_debtor(self):
debtors = self.get_facts(self.facts,'Debtor')
if len(debtors) == 0:
return
10.Откройте конфигурационный файл formatters.json, который по умолчанию находится в папке сервиса DFES-B в папке с грамматикой. Например, C:\inetpub\Ario\FactExtractorService\grammar\Resolution\formatters.json.
11.В конец списка используемых для грамматики форматеров добавьте наименование созданного форматера.
ПРИМЕЧАНИЕ. Если новый форматер зависит от работы других форматеров и должен выполнять постобработку только после определенного форматера, тогда расположите его в соответствии с бизнес-логикой постобработки.
12.Сохраните конфигурационный файл и перезапустите службу сервиса DFES-B.
© Компания Directum, 2024 |