Наконец-то мне удалось понять, как это работает, благодаря этой теме в списке распространения GoogleGroup BRAT.
Текст отправляется в API автоматического аннотатора в виде строки байтов в теле запроса POST, а формат BRAT, требуемый в ответ от этого API, имеет форму словаря словарей namel(
{
"T1": {
"type": "WhatEverYouWantString", # must be defined in the annotation.conf file
"offsets": [(0, 2), (10, 12)], # list of tuples of integers that correspond to the start and end position of
"texts": ["to", "go"]
}
"T2" : {
"type": "SomeString",
"offsets":[(start1, stop1), (start2, stop2), ...]
"texts":["string[start1:stop1]", "string[start2:stop2]", ...
}
"T3" : ....
}
ЗАТЕМ вы помещаете этот словарь в формат JSON и отправляете его обратно в BRAT.
Примечание :
- T1, T2, ... являются обязательными ключами (и соответствуют индексу Term в файле
.ann
, который BRAT генерирует во время ручной аннотации)
- тип ключей, смещения и тексты являются обязательными, в противном случае вы получите некоторую ошибку в журнале BRAT (вы можете просмотреть этот журнал, как описано в теме GoogleGroup, указанной выше)
- формат значений строгий (тип получает строку, смещения получает список кортежей (или списка) или целых чисел, тексты получает список строк), в противном случае вы получаете ошибки BRAT
Я предполагаю, что строки в текстах должны соответствовать смещениям, иначе должна быть ошибка или как минимум проблема с отображением тегов (это уже так, если вы генерируете файлы .ann
из автоматического алгоритма обнаружения и имеете разные начать и остановить, чем соответствующий текст)
Я надеюсь, что это помогает. Сегодня утром мне удалось создать API с помощью Flask, но мне нужно было создать flask.Response
, чтобы получить правильный вывод формат. Кроме того, входящий формат из BRAT в API Flask не мог быть перехвачен, пока я не использовал flask.request
с методом request.get_body()
.
Кроме того, я должен упомянуть, что я не смог использовать примеры, приведенные в BRAT GitHub:
Я имею в виду, что я не мог заставить их работать, но я вообще не знаком с пакетами API и HTTP в Python. По крайней мере, я понял, какой правильный формат для ответа API.
Наконец, я понятия не имею, как сделать формат отношений между сущностями (т.е. стрелки BRAT) из API, хотя
кажется, работает с такой вещью.
Обсуждение в группе Google
кажется, упоминается, что невозможно отправить отношения между объектами обратно из API автоматической аннотации и заставить их работать с BRAT.
может потом попробую :-)
person
FraSchelle
schedule
05.05.2021