API индивидуализированного изучения грамматики

image

Индивидуальное обучение иностранному языку всегда работает лучше, чем обучение по общим программам и по материалам, которые «подходят всем». Действительно, программисту и флористу интересные разные темы, разные тексты, а значит — разный языковой материал (лексика в первую очередь). И многие сервисы, помогающие изучить иностранный язык, стараются строить обучение именно таким образом. Например, в ЛингуаЛео можно добавлять свои тексты или выбирать из большой библиотеки те, которые наиболее интересны, и изучать язык, точнее — лексику, именно из этих текстов. Easy Ten позволяет выбирать тематические списки слов. Но всё это про лексику. А что же с грамматикой? Можно ли изучение грамматики сделать индивидуальным?


Зачем учить грамматику индивидуально?

Действительно —  зачем? Грамматика-то везде одинаковая — и в текстах про цветы и в текстах про алгоритмы. Эта одна из причин, из-за которой обучение грамматике сейчас строится достаточно однообразно: обычно предлагается один курс грамматики, состоящий из статических разделов, где даётся определение грамматическому материалу, а потом предлагается сделать несколько упражнений. Весь названный материал не имеет никакой привязки к интересующим ученика темам.

Вторая причина, почему не предлагается индивидуализированное обучение грамматике, заключается в том, что это технически сложнее, чем извлечение слов и подсчёт простых метрик, типа TFIDF. Для извлечения грамматических конструкций из текста нужен более сложный лексико-грамматический и морфологический анализ текста.

Казалось бы — зачем заниматься тем, что не нужно, да ещё и сложно?


Как грамматика связана с тематикой

На самом деле изучение грамматики — это не запоминание правил. Грамматика не существует сама по себе вне связи с лексикой. Любое грамматическое правило — абстрактное описание большого количества структурно похожих высказываний, которые выражены как раз при помощи слов. Таким образом получается, что грамматика напрямую связана с лексикой, а значит — и с тематикой того материала, на котором происходит обучение. Поэтому примеры использования грамматических конструкций, упражнения, которые тренируют и закрепляют грамматический материал, могут и должны иметь то лексическое наполнение, которое интересно и полезно изучающему язык.


Как же надо учить грамматику?

Индивидуализированное обучение грамматике может быть основано на практически любом текстовом материале пользователя. Для каждого предложения определяются грамматические явления и на их основе создаются упражнения.

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


My friend has never to Paris.

  1. been
  2. was
  3. being
  4. is

Исправление ошибки
Например:


My friend have never been to Paris.

Использование правильной формы слова (поставить данное слово в нужную форму или вписать правильную форму слова)

Например:


My friend has never (be) to Paris.
или
My friend has never to Paris.

Указание грамматической конструкции
Например:


My friend has never been to Paris.
Present Perfect

Именно эти две задачи решает наш API: в каждом предложении он находит грамматические конструкции и создаёт из найденных предложений упражнения на грамматику.


API

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

Для получения доступа к API нужно зарегистрироваться на сервисе https://market.mashape.com. После регистрации перейдите по ссылке https://market.mashape.com/smallstep/englishgrammar и подпишитесь на бесплатный API.

На вход принимается текст в виде JSON, посылаемым через POST запрос, например:

{
  "text": "John lives in London. He loves cats."
}

В документации на странице API вы найдёте примеры кода для многих языков программирования: Java, Node, PHP, Python, Objective-C, Ruby, .NET.

В ответ получаете JSON такого содержания:

[
  {
    "sentenceText": "John lives in London.",
    "grammarPatterns": [
      {
        "name": "present_simple_construction",
        "words": [
          {
            "word": "lives",
            "startOffset": 5,
            "endOffset": 10
          }
        ],
        "dependencies": [
          "present_simple_usage"
        ],
        "difficulty": 1,
        "fullName": "Настоящее простое время (Present Simple Tense)"
      }
    ],
    "multipleChoice": [
      {
        "startOffset": 5,
        "endOffset": 10,
        "answers": [
          "lives",
          "live",
          "living",
          "lived"
        ],
        "correctIndex": 0
      }
    ]
  },
  {
    "sentenceText": "He loves cats.",
    "grammarPatterns": [
      {
        "name": "present_simple_construction",
        "words": [
          {
            "word": "loves",
            "startOffset": 3,
            "endOffset": 8
          }
        ],
        "dependencies": [
          "present_simple_usage"
        ],
        "difficulty": 1,
        "fullName": "Настоящее простое время (Present Simple Tense)"
      }
    ],
    "multipleChoice": [
      {
        "startOffset": 3,
        "endOffset": 8,
        "answers": [
          "love",
          "loving",
          "loves",
          "loved"
        ],
        "correctIndex": 2
      }
    ]
  }
]

Как видно из примера, текст разбит на предложения и к каждому предложению есть grammarPatterns (выявленные грамматические конструкции) и multipleChoice (материал для создания упражнений).
В grammarPatterns указано системное название грамматической конструкции (name), приведены слова, которые образуют данное грамматическое явление, с оффсетами от начала предложения (words), dependencies (грамматический материал, который помог бы в освоении данного грамматического явления), относительный уровень сложности (difficulty — может помочь в оценке грамматической трудности текста), и fullName — полное название конструкции на русском языке.

В multipleChoice даны оффсеты слова, на которое предлагается упражнение. Answers — варианты ответов для multiple choice, и correctIndex — индекс правильного ответа (индекс начинается с 0).

В простейшем случае API позволяет создать упражнение на выбор правильной формы, но и другие упражнения сделать совершенно не сложно. Например, для упражнения «исправить ошибку» нужно просто заменить слово в предложении на один из неверных вариантов из поля answers. Для вписывания правильного варианта можно просто удалить слово из исходного предложения (можно также указать название искомой формы из grammarPatterns).

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


Анонс

Чуть позже мы планируем открыть API диагностирующего mutiple choice (грамматического и лексического), а также API генерации вопросов к тексту (и вариантов ответов к нему).

© Geektimes