Создание банка вопросов приложений для общения и ответов на вопросы

Elasticsearch

Некоторое время назад приложение для ответов на викторины было в самом разгаре, и все крупные интернет-компании присоединились к войне монет, включая конференцию на высшем уровне, Million Hero, Cheese Hero и так далее. За этим последовало появление различных вспомогательных приложений для ответов.

В Интернете уже есть много приложений для ответов на викторины, которые, как правило, включают в себя два шага, а именно получение вариантов вопроса и поиск ответа. Получение вопросов и вариантов включает в себя использование adb для захвата снимков экрана мобильных телефонов, а затем использование ocr (оптическое распознавание символов) для определения вопросов и вариантов. Исходный код большинства используемых инструментов распознавания предоставляется Google с открытым исходным кодом.tesseract-ocrИ Baidu OCR API. Google Tesseract-OCR может быть установлен локально, адрес загрузки программного обеспечения: https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-3.05.01.exe, обратите внимание на добавление китайского языка при установке упрощенного языка пакет, иначе китайский язык не распознается. Другой метод заключается в использовании Baidu OCR API, вы можете подать заявку бесплатно, более удобный в использовании, и более точный уровень распознавания является относительно точным. Преимущество Baidu API в том, что картинку можно идентифицировать без обработки, а Tesseract-OCR вообще требует простой обработки. Другой способ получить темы и параметры — использовать инструмент капитана, чтобы получить запрос приложения, чтобы получить информацию о теме и параметрах.

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

Создайте банк вопросов с помощью elasticsearch

В этой статье в основном объясняется очень небольшой аспект создания банка вопросов для исследования.Чтобы использовать помощь в ответах, вы можете прочитать исходный текст, чтобы просмотреть полное введение.Код в основном основан наTopSupВнес некоторые коррективы. Elasticsearch будет использоваться для создания банка вопросов, для установки es вы можете проверить первую статью. Некоторые люди могут подумать, что использование es в качестве банка вопросов похоже на стрельбу по комарам из зенитных орудий — создание большого шума. Но я думаю, что es очень удобен в установке и использовании.Благодаря мощному RESTFUL-интерфейсу es можно манипулировать практически любым инструментом. Говорить дешево, покажи мне код.

from elasticsearch import Elasticsearch

def write_quetion():
  question = {
    'question': '谁是世界上最帅的人',
    'answer': 'Neal'
  }
  es = Elasticsearch({'localhost'})
  es.index(index='question-index', doc_type='question', id=1, body=question)

Выше приведен простой фрагмент кода, вроде записи записи в индекс, по сути, es можно рассматривать как нереляционную базу данных.DB-EnginesВ последнем рейтинге es es переместился на девятое место. Некоторые концепции Elasticsearch можно сравнить с реляционными базами данных:

Реляционная база данных Elasticsearch
database index
table type
row document
column field

Тогда при поиске проблемы в es это должно выглядеть так:

def search_question(key_words):
  es = Elasticsearch({'localhost'})
  res = es.search(index='question-index', body={
    "query": {
      "match": {
        "question": key_words,
        "minimum_should_match": "75%"
        }
      }
    }
  })
  if res['hits'['total'] > 0:
    for hit in res['hits']['hits']:
      print(hit['_source']['question'] + ':' + hit['_source']['answer'])
   else:
     print('未搜索到类似结果')

Получите вопросы и ответы по картинкам

Создание банка вопросов может осуществляться в виде текста или непосредственно с помощью скриншота приложения-ответчика, последнее, несомненно, более ценно. Предположим, теперь у нас есть такой скриншот:

Эта картинка уже содержит правильный выбор, но как мы узнаем картинку и знаем правильный ответ? Используете ли вы цифры после вариантов?Нет, правильный ответ не обязательно является наиболее часто выбираемым вариантом. Благодаря этому курсу по обработке изображений в нем есть очень базовая концепция, которая помогла мне решить эту проблему. Вообще говоря, преобразование цветного изображения в изображение в градациях серого заключается в сопоставлении цветового пространства с пространством в градациях серого с помощью определенной функции. Преобразуйте изображение RGB (которое можно понимать как цветное изображение) в изображение в градациях серого в Matlab.rgb2grayВзяв функцию в качестве примера, предположим, что значение RGB цветового пикселя равно (R, G, B), тогда метод вычисления его значения серого G должен быть следующим:

G = 0.2989 * R + 0.5870 * G + 0.1140 * B

Общепринятой практикой в ​​отрасли является вычисление значения серого цветных пикселей в соответствии с определенным весом. Значение RGB цвета фона правильного ответа на картинке выше можно получить с помощью цветного пера (80, 215, 216), а значение RGB цвета фона неправильного ответа равно (194, 194, 194). ).

936LqI.md.png

Сегодня я научу вас распределительному закону умножения и покажу волну начальной школьной математики. Ближе к дому видно, что значение оттенков серого карты цветного изображения ниже. Это огромная помощь в различении правильных и неправильных вариантов. Во-первых, мы обрезаем область опций, чтобы число справа не влияло на результат распознавания. С помощью алгоритма бинаризации мы можем преобразовать карту вариантов проблемы в два разных изображения с разными пороговыми значениями.Пиксели меньше порога становятся черными пикселями, а пиксели больше порога программируются белыми пикселями. Алгоритм преобразования бинаризации очень прост:

def binarizing(img, threshold):
    pixdata = img.load()
    w, h = img.size
    for y in range(h):
        for x in range(w):
            if pixdata[x, y] < threshold:
                pixdata[x, y] = 0
            else:
                pixdata[x, y] = 255
    return img

Бинаризованное изображение получается путем установки порога 120 и 180 (допустимо любое значение между 175 и 194), и результаты следующие:

93c8dx.png

93clLR.png

Теперь ответ вот-вот появится. Мы идентифицируем эти два изображения с помощью распознавания.Первое изображение может получить все параметры, а второе изображение может получить только неправильные параметры, поэтому разница между ними не является правильным вариантом! То ли кости изысканны, то ли неожиданны!

Эпилог

Это конец этой статьи, которая в основном посвящена тому, как создать банк вопросов с очень небольшой точки зрения, используя простую технику обработки изображений для получения правильных вариантов. Считаете ли вы, что курсы, которые вы прошли, стоят того? Конечно, эта статья является только техническим обсуждением и не гарантирует работоспособность на практике, подробный код можно посмотреть в исходном тексте.

выше.

Добро пожаловать в поиск WeChat mad_coder или отсканируйте QR-код, чтобы подписаться на официальный аккаунт:

93cfyj.jpg