2015-09-03 7 views
-2

http://snomedct.t3as.org/ Это веб-сервис, который будет анализировать английский клинический текст и сообщать о любых концепциях, которые могут быть обнаружены.
Например, у меня головная боль. Это выявит головную боль как Симптом.Использование R для вызова веб-службы: отправьте данные и верните таблицу результатов в R

Теперь то, что я хотел бы сделать, - отправить предложение на веб-службу через R и вернуть таблицу с веб-страницы в R для дальнейшего анализа.

+1

Вы пробовали что-нибудь или хотите, чтобы мы это закодировали? – grubjesic

+0

Взгляните на пакет [rvest] (http://blog.rstudio.org/2014/11/24/rvest-easy-web-scraping-with-r/). – ulfelder

+1

Звучит как _awesome_ возможность сесть с холодным напитком и ознакомиться с [Просмотр задачи CRAN на веб-технологиях] (https://cran.rstudio.com/web/views/WebTechnologies.html). – hrbrmstr

ответ

3

Если мы возьмем их пример curl командной строки:

curl -s --request POST \ 
     -H "Content-Type: application/x-www-form-urlencoded" \ 
     --data-urlencode "The patient had a stroke." \ 
     http://snomedct.t3as.org/snomed-coder-web/rest/v1.0/snomedctCodes 

, которые могут быть переведены на httr довольно легко.

-s означает «тихий» (без индикатора прогресса или сообщений об ошибках), поэтому нам не нужно это переводить.

Любое -H означает, что хотите добавить заголовка в запрос. Этот конкретный заголовок Content-Type может быть обработан лучше с параметром encode до httr::POST.

Параметр --data-urlencode указывает URL-кодировать эту строку и помещать ее в body запроса.

И, наконец, URL-адрес является ресурсом для вызова.

library(httr) 

result <- POST("http://snomedct.t3as.org/snomed-coder-web/rest/v1.0/snomedctCodes", 
       body="The patient had a stroke.", 
       encode="form") 

Поскольку вы не делаете это регулярно, вы можете обернуть POST вызов с with_verbose(), чтобы увидеть, что происходит (посмотреть, что вверх в httr документы).

Есть тонна нюансов, которые нужно технически сделать после этого (как проверить код состояния HTTP с stop_for_status(), warn_for_status() или даже просто status_code(), но для простоты предположит работу вызовов (это один их пример так делает работа и возвращает код состояния 200 HTTP, который является хорошей вещью).

по умолчанию, что веб-сервис возвращает JSON, так что нам нужно, чтобы преобразовать его в объект R. в то время как httr имеет встроенный разборе, мне нравится для обработки результата jsonlite.

dat <- jsonlite::fromJSON(content(result, as="text"), flatten=TRUE) 

Функция fromJSON выполняет несколько параметров, которые призваны помочь сформировать JSON в разумную структуру данных R (многие API возвращают ужасные JSON и/или XML). Этот API будет вписываться в категорию «ужасных». Данные в dat довольно грубые, и дальнейшее их декодирование будет отдельным вопросом SO.

+0

Это именно то, что я искал. Спасибо за прекрасное объяснение. – user3117837