Настройка итоговых вероятностей фактов в Directum Ario

6 0

Цель

Статья-справка для разработчиков с кратким описанием процесса настройки итоговых вероятностей для фактов, извлеченных правилами.

Процесс настройки итоговых вероятностей фактов

  1. Откройте файл custom_probability.py в файлах сервиса Fact Extractor Service.

Путь по умолчанию:
"C:\inetpub\Ario\FactExtractorService\probability\custom_probability"

  1. Функция get_custom_rules возвращает словарь с настройками расчета вероятностей для каждого класса документа.
  2. В данном словаре задайте расчет вероятностей для необходимого класса документа согласно следующей структуре

Структура расчета вероятностей фактов

  • Верхнеуровневый объект - словарь, в котором:
    • Ключ - имя класса документа
    • Значение - словарь, в котором:
      • Ключ - имя поля факта документа
      • Значение - список, содержащий кортежи (tuples), в которых находятся в строгом порядке:
        • Функция расчета вероятности (о них далее)
        • Значение, которое будет добавлено к итоговой вероятности факта, если для него сработает указанная функция.

Примечание. Сумма значений для всех применяемых в списке функций должна равняться 100.

Критерии расчета вероятностей

Критерий Python Описание
Выше всех AboveAll()

Факт находится выше всех остальных фактов данного типа.

(AboveAll(), 100)
Ниже всех BelowAll()

Факт находится ниже всех остальных фактов данного типа.

(BelowAll(), 100)
Рядом(Факт) Near()

Факт находятся в рядом с другим Фактом.

Аргументы:

  • имя поля факта, который должен находиться рядом
  • расстояние до факта (количество символов между ними)

Пример: дата и номер входящего документа находятся рядом

Исх. № 1234 от 25.12.2017

(Near('ResponseToNumber', distance=5), 100)
НаходитсяДо(Факт[,Факт, Факт]) Before()

Находится в тексте документа до Факта [и до Фактов]

Аргументы:

  • словарь, в котором:
    • ключ - имя поля факта, который должен быть до текущего
    • значение - вес поля факта для данного факта (в сумме для всех фактов равно 100)

Пример:

  • дата входящего документа находится до адресата
  • дата входящего документа находится до даты в ответ на
(Before({'Addressee': 100}), 100)
НаходитсяПосле(Факт) After()

Находится в тексте документа после Факта

Аргументы:

  • словарь, в котором:
    • ключ - имя поля факта, который должен быть после текущего
    • значение - значение вероятности для данного факта (в сумме для всех фактов должно быть равно 100)
(After({'Date': 50, 'Number': 50}), 100)
Расположен в(Факт) PlacedIn()

Факт расположен в конкретной части страницы.

Аргументы:

  • количество частей на странице
  • части страницы, на которых должен быть факт
  • страницы на которых должен быть факт. Значения:
    • любое число (т.е. номер страницы)
    • 'first' (первая)
    • 'last' (последняя)
    • 'every' (каждая)
  • сами страницы. Значение всегда: probability.pages
(PlacedIn(4, [1, 2], 'first', probability.pages), 100)
СхлопнутСДругим() IsCollapsed()

Факт был получен объединением нескольких фактов в один на постобработке.

Пример:

  • Объединение фактов фамилия, имя и отчество адресата в один факт, содержащий ФИО
(IsCollapsed(), 100)

Пример кода для расчета вероятности для класса документа "Письмо входящее":

def get_custom_rules(probability):
    return {
        'letter': {
            # Дата "в ответ на"
            'ResponseToDate': [
                (AboveAll(), 20),
                (Near('ResponseToNumber', distance=5), 20),
                (Before({
                    'Addressee': 100
                }), 30),
                (After({
                    'Date': 50,
                    'Number': 50
                }), 30),
            ],
            # Номер "в ответ на"
            'ResponseToNumber': [
                (AboveAll(), 15),
                (PlacedIn(4, [1, 2], 'first', probability.pages), 5)
                (Near('ResponseToDate', distance=5), 20),
                (Before({
                    'Addressee': 10
                }
                ), 30),
                (After({
                    'Date': 50,
                    'Number': 50,
                }
                ), 30)
            ],
        }
    }

 

Пока комментариев нет.

Авторизуйтесь, чтобы написать комментарий