Документация к API

ParaPhraser API

API, разрабатываемый совместно с EnduranceRobots.com, позволяет перефразировать предложения и отдельные слова, а также определять пропущенные члены предложения. Основные функции API реализованы для двух языков (русский, английский), некоторые функции пока работают только для одного языка.

В настоящий момент доступна альфа-версия API (лицензия MIT), и мы приглашаем к тестированию разработчиков, исследователей, лингвистов, веб-мастеров, SEO-специалистов, копирайтеров, а также всех, кто заинтересован в использовании пообного сервиса.

Использование API возможно программным способом (это требует несложной регистрациии на ParaPhraser.ru) либо через специальную Web-форму (без регистрации).

В ближайшем будущем планируется внедрение других функций, таких как подбор гипонимов и гиперонимов, анализ тональности фразы, тематическая классификация фразы и перефразирование текста.

Мы рады отзывам, комментариям и пожеланиям по работе API и внедрению новых функций и любой обратной связи на api@paraphraser.ru.


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

Выполнять запросы к API можно только имея учетную запись на ParaPhraser.ru. Гостевые запросы возможны через Web-форму.

После регистрации каждый пользователь получает уникальный токен, который нужно использовать для обращения к методам API. Посмотреть свой токен можно в личном кабинете. При необходимости, токен может быть получен программным способом в результате обращения по адресу https://paraphraser.ru/token и передачи серверу пары логин/пароль.

Пример запроса
Ниже представлен пример запроса на получение токена:

https://paraphraser.ru/token?login=user&password=12345678

При обращении к API передача токена серверу осуществляется непосредственно в HTTP-запросе:

?token=9944b09199c62bcf3048ad846dd0e4bbdfc6ee4b&...


Формирование запроса

Запрос к API может быть выполнен методом GET или POST. Метод GET используется для передачи отдельных слов или коротких фраз, в то время как POST можно использовать для обработки небольших текстов.

Ограничение Во время тестирования API длина запроса ограничена 90 символами независимо от способа передачи

При передаче параметров методом POST необходимо использовать формат JSON.

Запросы на обработку текста принимаются по адресу https://paraphraser.ru/api.

Пример допустимого запроса:

https://paraphraser.ru/api? token=9944b09199c62bcf3048ad846dd0e4bbdfc6ee4b& c=vector&query=ищите женщину&top=3&lang=ru&format=json

В разделе Примеры использования приведен пример кода рабочего приложения.


Методы


Вектор похожих слов (фраз)

Возвращает список слов или фраз, близких по смыслу исходному слову или фразе, на основе векторной семантической модели.

Описание

Функция принимает на вход фразу или слово, осуществляет морфологический разбор, снимает неоднозначность на уровне частей речи и возвращает список фраз или слов, семантически близких к исходной фразе или слову, на основе технологии Word2Vec. Также возвращаются начальная форма и часть речи исходного слова в формате Universal POS tags (в случае фраз эта информация возвращается для каждого слова внутри исходной фразы).

В случае, если на вход подается слово, которое является неоднозначным, ответ выдается для каждой возможной части речи этого слова отдельно. Кроме того, выдаваемые слова ставятся в ту же форму, что и слова в исходном запросе.

В случае, если на вход подается слово, отсутствующее в векторной модели, функция возвращает только начальную форму и часть речи. Некоторые служебные части речи (артикли, вспомогательные глаголы), а также знаки пунктуации и прочие символы обрабатываются аналогичным образом – функция возвращает только начальную форму и часть речи.

Функция является базовой для данного API.

Параметры
ПараметрОписание
queryИскомое слово или фраза (строка, длина не более 90 символов)
topКоличество возвращаемых схожих по смыслу слов или фраз (число от 0 до 30)
langЯзык (принимает значения «ru» или «en»)
formatФормат вывода (должен принимать значение «json»)
Пример запроса
https://paraphraser.ru/api?token=9944b09199c62bcf3048ad846dd0e4bbdfc6ee4b&c=vector&query=ищите женщину&top=3&lang=ru&format=json
Пример ответа

{ "response": { "1": { "original": "ищите женщину", "vector": [ "отыскивайте девушку", "выискивайте девушку", "отыскивайте мужчину", ], "lemma": "искать женщина", "pos": "VERB NOUN" } }, "code": 0, "msg": "OK" }

Примечание

Набор входных параметров данной функции может быть расширен для получения коэффициентов семантической близости и словоформ.


Коэффициенты семантической близости

Возвращает для каждой фразы или слова в выдаваемом векторе близких слов коэффициент семантической близости между выдаваемым и исходным словом или фразой.

Описание

Функция расширяет вектор похожих слов (фраз), снабжая его коэффициентами семантического сходства (по отношению к исходному слову или фразе). Коэффициенты могут принимать значения от 0 до 1.

Параметры

В дополнение к базовым параметрам функции получения похожих слов (фраз) следует указывать следующие параметры:

ПараметрОписание
scoresВозвращать коэффициенты семантической близости (число, должно принимать значение «1»)
Пример запроса
https://paraphraser.ru/api?token=9944b09199c62bcf3048ad846dd0e4bbdfc6ee4b&c=vector&query=ищите женщину&top=3&scores=1&lang=ru&format=json
Пример ответа

{ "response": { "1": { "original": "ищите женщину", "vector": [ [ "отыскивайте девушку", 0.7048 ], [ "выискивайте девушку", 0.7011 ], [ "отыскивайте мужчину", 0.6609 ] ], "lemma": "искать женщина", "pos": "VERB NOUN" } }, "code": 0, "msg": "OK" }

Примечание

Данная функция может вызываться совместно с функцией словоформ.


Словоформы

Возвращает все словоформы слов из вектора для заданного слова (фразы).

Описание

Функция расширяет вектор похожих слов (фраз), возвращая все возможные формы исходного слова (или слов внутри исходной фразы), а также все возможные формы слов для результирующего вектора слов/фраз.

Параметры

В дополнение к базовым параметрам функции получения похожих слов (фраз) следует указывать следующие параметры:

ПараметрОписание
formsВозвращать все словоформы (число, должно принимать значение «1»)
Пример запроса
https://paraphraser.ru/api?token=9944b09199c62bcf3048ad846dd0e4bbdfc6ee4b&c=vector&query=ищите женщину&top=3&forms=1&lang=ru&format=json
Пример ответа

{ "code": 0, "msg": "OK", "response": { "1": { "pos": "VERB NOUN", "lemma": "искать женщина", "forms_query": { "ищите": [ "ищете", "искало", "искали", "ищешь", "ищем", "ищут", "искала", "ищу", "ищет", "искал" ], "женщину": [ "женщине", "женщинами", "женщины", "женщинах", "женщинам", "женщиной", "женщина", "женщин", "женщину" ] }, "original": "ищите женщину", "forms": [ { "отыскивайте": [ "отыскивает", "отыскивала", ... ], "девушку": [ "девушка", "девушки", ... ] }, { "выискивайте": [ "выискивает", "выискиваю", ... ], "девушку": [ "девушка", "девушки", ... ] }, { "отыскивайте": [ "отыскивает", "отыскивала", ... ], "мужчину": [ "мужчина", "мужчиной", ... ] } ], "vector": [ "отыскивайте девушку", "выискивайте девушку", "отыскивайте мужчину", ] } } }

Примечание

Данная функция может вызываться совместно с функцией коэффициентов семантической близости.


Словарные синонимы

Возвращает синонимы к заданному слову (фразе) на основе Yet Another RussNet.

Описание

Функция возвращает синонимы к исходным слову или фразе на основе синсетов из тезауруса Yet Another RussNet. В случае фразы синонимы подбираются отдельно для каждого слова внутри фразы (кроме служебных частей речи), а затем комбинируются в составе фразы.

Кроме того, для каждого слова внутри фразы функция возвращает начальную форму и часть речи в формате Universal POS tags. Для некоторых служебных частей речи (артикли, вспомогательные глаголы), а также знаков пунктуации и прочих символов синонимы не подбираются – возвращаются только начальная форма и часть речи.

Параметры
ПараметрОписание
queryИскомое слово или фраза (строка, длина не более 90 символов)
topМаксимально допустимое количество возможных комбинаций (число от 1 до 30)
langЯзык (может принимать значения «ru» или «en»)
formatФормат вывода (должен принимать значение «json»)
Пример запроса
https://paraphraser.ru/api?token=9944b09199c62bcf3048ad846dd0e4bbdfc6ee4b&c=syns&query=полосатый котик&top=3& lang=ru&format=json
Пример ответа

{ "code": 0, "response": { "1": { "syns": [ "полосатый котишка", "полосатый морской котик", "полосатый кошечка" ], "original": "полосатый котик", "lemma": "полосатый котик", "pos": "ADJ NOUN" } }, "msg": "OK" }

Примечание

Набор входных параметров данной функции может быть расширен для получения коэффициентов семантической близости и словоформ.


Определение пропущенной части предложения

Возвращает значение, указывающее на отсутствие в предложении подлежащего или сказуемого.

Описание

Функция принимает на вход предложение и проверяет, содержит ли оно и субъект (подлежащее), и предикат (сказуемое).

Параметры
ПараметрОписание
queryИскомое слово или фраза (строка, длина не более 90 символов)
langЯзык (может принимать значения «ru» или «en»)
formatФормат вывода (должен принимать значение )
Пример запроса
https://paraphraser.ru/api?token=9944b09199c62bcf3048ad846dd0e4bbdfc6ee4b&c=misent&query=ищите женщину&format=json
Пример ответа

{ "msg": "OK", "code": 0, "response": { "phrase": [ { "word": "striped", "lemma": "striped", "pos": "ADJ" }, { "word": "kitten", "lemma": "kitten", "pos": "NOUN" } ], "missing": [ "predicate" ] } }

Гипонимы и гиперонимы

Возвращает гипонимы и гиперонимы для слов из запроса.

Описание

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

Параметры
ПараметрОписание
queryИскомое слово или фраза (строка, длина не более 90 символов)
topМаксимально допустимое количество количество гипонимов и гиперонимов (число от 1 до 30 )
langЯзык (может принимать значения «ru» или «en»)
formatФормат вывода (должен принимать значение «json»)
Пример запроса
https://paraphraser.ru/api/form?c=hyp&query=ищите женщину&top=3&lang=ru&format=json
Пример ответа

{ "code": 0, "response": { "1": { "original": "ищите женщину", "lemma": "искать женщина", "pos": "VERB NOUN", "hyponym": { "ищите": [ "отыскивайте", "приискивайте", "разыскивайте", ], "женщину": [ "старуху", "мать", "барышню" ] }, "hypernym": { "ищите": [], "женщину": [ "человека", "самку", "любовницу" ] }, } }, "msg": "OK" }


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

Пример POST-запроса с параметром c=syns на языке Python 3.x с использованием библиотеки requests:

#!/usr/bin/env python

import json
import requests

# 1. Get your authentication token
# by posting username and password to the server

r = requests.post('https://paraphraser.ru/token/',
                  data={'login': 'user', 'password': '12345678'})
token = r.json().get('token', '')

# 2. Make a request using the obtained token

payload = {'c': 'syns',
           'query': 'кот ест рыбку',
           'top': 3,
           'scores': 0,
           'forms': 0,
           'format': 'json',
           'lang': 'ru',
           'token': token}

r = requests.post('https://paraphraser.ru/api/',
                  data=payload)
result = r.json()


if result['code'] == 0:
    response = result['response']

    for item in response:
        for value in response[item]['syns']:
            print(value)

else:
    print('Error:', result['msg'])

Результат выполнения (некоторые слова могут различаться в зависимости от используемой модели):

кошак кушает солнышко котэ кушает солнышко кошак кушает рыбёшку

Пример GET-запроса с параметром c=vector на Python 3.5+ без использования сторонних библиотек:

#!/usr/bin/env python

import json
from urllib.request import urlopen, HTTPError
from urllib.parse import urlencode, quote_plus

def token(login, password):
    payload = {'login': login, 'password': password}
    params = urlencode(payload, quote_via=quote_plus)
    url = 'https://paraphraser.ru/token?{0}'.format(params)
    try:
        return json.loads(urlopen(url).read().decode('utf-8'))['token']
    except HTTPError:
        return None

def send(payload):
    params = urlencode(payload, quote_via=quote_plus)
    url = 'https://paraphraser.ru/api?{0}'.format(params)
    try:
        return json.loads(urlopen(url).read().decode('utf-8'))
    except Exception as err:
        return json.loads(err.read().decode('utf-8'))


token = token('user', '12345678')

if token is not None:

    result = send({
            'c': 'vector',
            'query': 'кот ест рыбку',
            'top': 4,
            'scores': 0,
            'forms': 0,
            'lang': 'ru',
            'token': token
        })
    
    if result['code'] == 0:
        
        response = result['response']
        for item in response:
            for value in response[item]['vector']:
                print(value)
    else:
        print('Ошибка при выполнении запроса:', result['msg'])
else:
    print('Неверные имя пользователя или пароль')

Результат выполнения (некоторые слова могут различаться в зависимости от используемой модели):

кошка ест карася котёнок ест карася кошка ест окунька кошка ест рыбёшку


Используемые ресурсы

ПОСсылка
Korobov M.: Morphological Analyzer and Generator for Russian and Ukrainian Languages // Analysis of Images, Social Networks and Texts, pp. 320-332 (2015)
https://pypi.python.org/pypi/topia.termextract/
Honnibal, M., Johnson, M.: An Improved Non-monotonic Transition System for Dependency Parsing. In EMNLP 2015, pp. 1373–1378 (2015)
De Smedt, T., Daelemans, W.: Pattern for Python. Journal of Machine Learning Research, vol. 13, pp. 2031–2035 (2012)
Řehůřek, R., Sojka, P.: Software Framework for Topic Modelling with Large Corpora. Proceedings of the LREC 2010 Workshop on New Challenges for NLP Frameworks, pp. 45-50 (2010)
https://research.googleblog.com/2016/05/announcing-syntaxnet-worlds-most.html
Kutuzov A., Kuzmenko E.: WebVectors: A Toolkit for Building Web Interfaces for Vector Semantic Models. In: Ignatov D. et al. (eds) Analysis of Images, Social Networks and Texts. AIST 2016. Communications in Computer and Information Science, vol 661. Springer, Cham (2017)
Braslavski, P., Ustalov, D., Mukhin, M., Kiselev, Y.: YARN: Spinning-in-Progress. Proceedings of the Eight Global Wordnet Conference. Bucharest, Romania, 2016, pp. 58–65