1. Введение


Обращение к TextToGraph API выполняется через Интернет по адресу вида:
https://t2graph.ru/api/<команда>
где <команда> - одна из команд, описанных в разделе 3. Команды TextToGraph API.
Команды и их параметры могут быть переданы методами GET или POST.
При обращении к API должны быть переданы аутентификационные параметры и, если требуется командой, дополнительные параметры. Результат возвращается в виде JSON объекта (Response-объект), различные поля которого содержат информацию о результатах отработки команды. Результат всех команд содержит поля:

  • err_code – код ошибки, тип number. Значение 0 – команда выполнена без ошибок. Значения > 0 – при выполнении произошла ошибка. Описание кодов ошибок приведено в разделе 5. Коды ошибок.
  • err_str – текстовое описание ошибки, тип string
  • result – объект, содержащий результат отработки команды (result-объект). Структура возвращаемого объекта приведена в описании команд.


2. Аутентификация


Обращение к API требует предоставления аутентификационных данных – адреса электронной почты (user) и API-ключа (api_key). Эти параметры определяются при регистрации пользователя на сайте https://t2graph.ru.
Эти параметры должны передаваться всегда и не описываются ниже при описании команд.


3. Команды TextToGraph API


/parse - Выполняет построение графа используя переданный текст.

Входные параметры:
  • text - строка, содержащая текст для обработки на русском языке в кодировке UTF-8
Выходные данные (поля result-объекта):
  • model - тип array, содержит массив объектов графа (graph-объект), входящих в результирующий граф. Структура объектов графа описана в разделе 4. Структура Graph-объекта
  • top_nodes - тип array, содержит объекты графа верхнего уровня (вершину(ы) графа)

/user_info - Возвращает информацию о доступных лимитах пользователя.

Входные параметры:
  • нет
Выходные данные (поля result-объекта):
  • max_free_rq_day_limit - число, содержит максимально возможное количество запросов для пользователя в сутки
  • free_rq_day_limit - число, содержит оставшееся количество запросов для пользователя в сутки

4. Структура Graph-объекта


Получаемый в результате работы сервиса граф состоит из элементов (graph-объектов) представляющих узлы и связи графа.

Все Graph-объекты имеют поля:
  • id - string, уникальный идентификатор объекта. Содержит цифры или символы
  • nm - string, название объекта
  • type - string, тип объекта (одна из строк “object”, “action”, “property”)

В зависимости от типа, Graph-объект может содержать дополнительные поля:
Graph-объекты типа “object” и “action” представляют узлы графа. Для них определено поле:
  • properties - array, массив содержащий идентификаторы (id), указывающие на graph-объекты типа “property”, представляющие свойства объекта, выражаемые в структуре графа в виде связей
Для graph-объектов типа “property” определены поля:
  • prop_act - array, из одного элемента, содержит id узла, типа «action»
  • prop_arg - array, содержит id узла/узлов к которым «применяется» действие
  • prop_res - array, содержит id узла/узлов содержащих результат действия (значение свойства)
  • chego - number, 0 – означает что свойство «прямое», то есть объект у которого оно находится в property, указан в prop_arg данного свойства. 1 – означает что свойство «обратное», то есть объект у которого оно находится в property, указан в prop_res данного свойства. Этот параметр отражает направленность действия, которое указано в prop_act. Прямое свойство представляется связью, идущей от объекта prop_arg к объекту prop_res, а обратное от prop_res к prop_arg. Обратные свойства используются, например, для представления выражения свойств в конструкциях вида «Иванов руководитель отдела». В этом случае среди свойств человека с фамилией Иванов будет обратное свойство «руководитель» и прямое свойство «фамилия». Если же мы будем описывать свойства отдела, то у отдела свойство руководитель будет прямым.

5. Коды ошибок


err_code: 1
  • err_str: Неверные API-key или почта
  • Описание: В запросе неверно указаны аутентификационные данные. Пользователь с указанными данными отсутствует или почта не была подтверждена

err_code: 2
  • err_str: Слишком частые запросы. Время между запросами не менее 5 секунд
  • Описание: Минимальный лимит времени между запросами к семантическому анализатору составляет 5 секунд

err_code: 3
  • err_str: Закончился лимит бесплатных запросов. Бесплатный запросы обновляются ежедневно
  • Описание: Исчерпан лимит бесплатных запросов к сервису. Обновление происходит бесплатной ежедневно в 00:00:01 по серверному времени

err_code: 4
  • err_str: Не указана почта или API-key
  • Описание: В запросе отсутствуют или указаны пустыми аутентификационные данные

err_code: 5
  • err_str: Слишком длинный текст запроса. Максимальная длинна бесплатного запроса - 150 символов
  • Описание: Максимальная длинна бесплатных запросов составляет 150 символов.

err_code: 6
  • err_str: Сервер не отвечает
  • Описание: При обращении к серверу семантического анализатора возникла ошибка. Обработка запроса будет возможна после того, как сервер перезагрузится в автоматическом режиме

err_code: 7
  • err_str: Пустой текст запроса
  • Описание: Не заполнен или отсутствует входной параметр text

err_code: 64
  • err_str: Текст системного исключения (exception)
  • Описание: Если в ходе выполнения парсинга произошла исключительная ситуация, то возникает данная ошибка и системное сообщение, связанное с данной исключительной ситуацией содержится в err_str

err_code: 65
  • err_str: No free agents
  • Описание: Отсутствуют свободные агенты.
    Парсер, для выполнения запроса пользователя выделяет агента, который разбирает текст и строит граф. Число агентов ограничено. Если все агенты заняты обработкой других запросов, то возникает данная ошибка

6. Семантические параметры действия


Graph-объекты типа “action” в составе своих свойств (в поле properties) могут иметь специальные свойства, отражающие семантику действия – кто делает, что делает, с чем делает и так далее.
Часть параметров применима ко всем действиям, а часть являются специфическими только для определенных действий.
Перечень определенных на данный момент параметров, которые парсер распознает в тексте и размещает в соответствующем свойстве, приведен ниже:
  • ACT_ACTION - Базовое действие. Какое базовое действие описывает данный объект
  • ACT_ACTOR - Актор действия. Кто выполняет действие
  • ACT_OBJECT - Объект действия. Обычно представлен в тексте винительным падежом
  • ACT_LOCATION - Где
  • ACT_LOCATION_KUDA - Куда
  • ACT_LOCATION_OTKUDA - Откуда
  • ACT_TIME - Время выполнения действия
  • ACT_COND - Условие выполнения действия
  • ACT_FOLLOWING - Чем руководствуются (чему следуют) при выполнении действия
  • ACT_USING - Что используется при действии («с учетом», «на основании»)
  • ACT_OBJECT_CHEMU - Чему/кому («приходится ему»)
  • ACT_OBJECT_K_CHEMU - К чему/кому («принять к сведению»)
  • ACT_OBJECT_S_CHEM - С чем/кем (“обратиться с просьбой», «взаимодействовать с ним»)
  • ACT_OBJECT_O_CHEM - О чем (“знать об этом»)
  • ACT_OBJECT_ZA_CHTO - За что («благодарить за помощь»)
  • ACT_OBJECT_CHTO_DELAT - Что делать («просить сходить», «любить гулять»)
  • ACT_HOW - Как выполняется действие
  • ACT_MOD - Модификатор действия. Отражает завершенность, время действия, повелительность
  • ACT_INSTR - Инструмент, с помощью чего выполняется действие («ударить молотком»)
  • ACT_RESULT - Результат действия. Для действий, выражающих свойства («весить», «стоить», «быть»)
  • ACT_AIM - Цель действия
  • ACT_CHEM - Чем («приходится племянником»)
  • ACT_SROK - Срок. «прогнозировать на следующий год»
  • ACT_DETAILED_BY - Уточняется чем. Указывает на уточнение одного действия другим. У уточняющего действия обычно присутствует свойство ACT_COND. (“Направьте что-то… В случае если… обратитесь…»)
  • ACT_EXEC_AMOUNT - Количество выполнений («два раза нажмите»)
  • ACT_EXEC_FREQ - Частота выполнений (“раз в год предоставлять»)

7. Примеры использования


Передача данных методом POST

PHP

// Функция выполняющая запрос parse методом POST и возвращающая строку в формате JSON-объекта, содержащую err_code, err_str и result. 
// Аргументы функции: $API_key = API-key пользователя, $user = указанная при регистрации электронная почта, $text = текст для анализа 
function parse($API_key,$user,$text){ 
	$url="https://t2graph.ru/api/parse"; 
		
	$request = curl_init();
	curl_setopt($request, CURLOPT_URL,$url);
	curl_setopt($request, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($request, CURLOPT_POST, 1);
	curl_setopt($request, CURLOPT_POSTFIELDS,
			"API_key=".$API_key."&user=".$user."&text=".$text);
	curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
	$curl_result = curl_exec($request);
	curl_close ($request);
	
	return $curl_result;
}

Обработка результатов

PHP

//Пример ниже извлекает из смысловой модели текста указанную характеристику и связанные с ней объекты или действия.
//Для строки "Менеджер обеспечивает подготовку коммерческих предложений, проведение переговоров, заключение договоров" и характеристики (prop_act) ACT_ACTOR результат работы примера будет следующий:
						
//обеспечивает ( 0. актор - UNKN<менеджер> 1. объект - подготовку - проведение - заключение ) - актор - UNKN<менеджер> ()			

$API_key=<API_key>;
$user=<mail>;
$text="Менеджер обеспечивает подготовку коммерческих предложений, проведение переговоров, заключение договоров";
//Получаем JSON-объект с результатом анализа текста $text. Функция parse() приведена ниже
$response=parse($API_key,$user,$text); 
$response_оbj=json_decode($response,false);

if ($response_оbj->err_code==0){
	
	//Формируем массив для навигации, содержащий key - id элемента, value - JSON-объект элемента
	$model_obj_arr=array();
	$model_obj=$response_оbj->result->model;
	foreach ($model_obj as $model_obj_elem) {
		$model_obj_arr[$model_obj_elem->id]=$model_obj_elem;
	}
	//задаем, какая характеристика интересует - ACT_ACTOR, ACT_TIME, ACT_OBJECT и др.
	$search_property="ACT_ACTOR"; 
	//Функция prop_action выполняет поиск в модели заданных характеристик ($search_property) и связанных с ними объектов, после чего выводит результат на экран через команду echo 
	prop_action($model_obj_arr,$search_property);
} else {
	echo "Ошибка: ".$response_оbj->err_code." - ".$response_оbj->err_str;
}

//Функция, выполняющая поиск переданной характеристики $search_property и связанных с ней объектов
function prop_action($model_obj_arr,$search_property){
	foreach ($model_obj_arr as $model_obj_arr_elem){
		if (isset($model_obj_arr_elem->prop_act) && isset($model_obj_arr_elem->prop_arg) && isset($model_obj_arr_elem->prop_res)) {
			if ($model_obj_arr_elem->prop_act[0]==$search_property){			
				$arg_nm_arr=explode(":",$model_obj_arr[$model_obj_arr_elem->prop_arg[0]]->nm);
				$arg_id=$model_obj_arr[$model_obj_arr_elem->prop_arg[0]]->id;
				$res_nm_arr=explode(":",$model_obj_arr[$model_obj_arr_elem->prop_res[0]]->nm);
				$res_id=$model_obj_arr[$model_obj_arr_elem->prop_res[0]]->id;	
				//Функция collectData выполняет поиск связанных с переданным id элемента ($id) характеристик и объектов
				echo $arg_nm_arr[0]." (".collectData($model_obj_arr,$arg_id).")";
				echo " - ".$model_obj_arr_elem->nm." - ";
				echo $res_nm_arr[0]." (".collectData($model_obj_arr,$res_id).")";
				echo "<br>";
			}
		}
	}
}

//Функция, выполняющая поиск связанных с переданным id элемента ($id) характеристик и объектов
function collectData($model_obj_arr,$id){
	$property_arg="";
	$property_res="";
	$return_arr=array();
	$return_str="";
	$prop_arr=array();
	$prop_arr=$model_obj_arr[$id]->properties;
	$name=$model_obj_arr[$id]->nm;

	foreach ($prop_arr as $prop_arr_elem){
		$result_data_arr=array();
		$property_arr=array();
		$property_name=$model_obj_arr[$prop_arr_elem]->nm;
		if ($property_name != ""){
			
			if ($model_obj_arr[$prop_arr_elem]->type=="property"){
				foreach ($model_obj_arr[$prop_arr_elem]->prop_arg as $prop_id){
					$property_arr[]=$prop_id;
				}
				foreach ($model_obj_arr[$prop_arr_elem]->prop_res as $prop_id){
					$property_arr[]=$prop_id;
				}
			}
			
			if ($model_obj_arr[$prop_arr_elem]->type=="action" || $model_obj_arr[$prop_arr_elem]->type=="object"){
				foreach ($model_obj_arr[$prop_arr_elem]->properties as $prop_id){
					$property_arr[]=$prop_id;
				}
			}
			
			foreach ($property_arr as $property_arr_elem) {
				$property_arr_elem_name=$model_obj_arr[$property_arr_elem]->nm;
				
				if ($property_arr_elem_name==$name) {
					$property_arr_elem_name="";
				} else {
					$property_arr_elem_name=explode(":",$property_arr_elem_name);
					$property_arr_elem_name=$property_arr_elem_name[0];
				}
	
				$result_data_arr[]="<b>".$property_name."</b>";
				$result_data_arr[]=$property_arr_elem_name;
			}
			
			$result_data_arr=array_unique($result_data_arr);
			$result_data_arr=array_filter($result_data_arr);
			$return_arr[]=implode(" - ",$result_data_arr);
		}
	}
	
	foreach ($return_arr as $key => $return_arr_elem) {
		$return_str.=" ".$key.".  ".$return_arr_elem." ";
	}
	return $return_str;
}
	
// Функция выполняющая запрос методом POST и возвращающая строку в формате JSON-объекта, содержащую err_code, err_str и result. 
function parse($API_key,$user,$text){
	
	$url="https://t2graph.ru/api/parse";
	$request = curl_init();
	curl_setopt($request, CURLOPT_URL,$url);
	curl_setopt($request, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($request, CURLOPT_POST, 1);
	curl_setopt($request, CURLOPT_POSTFIELDS,
			"API_key=".$API_key."&user=".$user."&text=".$text);
	curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
	$curl_result = curl_exec($request);
	curl_close ($request);
	return $curl_result;
}