Как мне перевести пользовательский ввод в режиме реального времени с помощью пользовательского словаря?

Я пытаюсь перевести пользовательский ввод в реальном времени на язык, который они определили, используя PHP.

Например, пользователь создает следующий словарь (где левая сторона — это ввод, а правая сторона — это вывод):

[
"A" => "alpha",
"B" => "bravo",
"CD" => "charlie delta"]

Затем пользователь вводит следующее (подробности см. Ниже):

"A", "B", "C", "D"

Как я могу перевести эти входные данные в режиме реального времени:

|-------------|---------------------------------|
| input       | output                          |
|-------------|---------------------------------|
| "A"         | "alpha"                         |
| "A" + "B"   | "alpha" + "bravo"               |
| "AB" + "C"  | "alpha bravo" + ?               |
| "ABC" + "D" | "alpha bravo" + "charlie delta" |
|-------------|---------------------------------|

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

Возможное решение

Я думал о токенизации входной строки в N-грамм, где N максимальное количество входов для одного вывода в словаре пользователя (в приведенном выше примере N будет 2 из-за «CD»).

Примерно такой алгоритм:

  1. Пользователь вводит «А».
  2. Я токенизирую входную строку:

    |--------|---------|
    | tokens | hits    |
    |--------|---------|
    | "A"    | "alpha" |
    |--------|---------|
    
  3. Я вывожу «альфа».
  4. Пользователь добавляет «B» к входной строке («A» + «B»).
  5. Я токенизирую новый вход в биграммы:

    |--------|--------|
    | tokens | hits   |
    |--------|--------|
    | "B"    | "beta" |
    | "AB"   |        |
    |-----------------|
    
  6. Я добавляю «бета» к выходной строке («альфа» + «бета»).
  7. Пользователь добавляет «C» к входной строке («AB» + «C»).
  8. Я токенизирую новый вход в биграммы:

    |--------|--------|
    | tokens | hits   |
    |--------|--------|
    | "C"    |        |
    | "BC"   |        |
    |-----------------|
    
  9. Я ничего не добавляю к выводу, потому что пока нет попаданий.
  10. Пользователь добавляет «D» к входной строке («ABC» + «D»).
  11. Я токенизирую новый вход в биграммы:

    |--------|-----------------|
    | tokens | hits            |
    |--------|-----------------|
    | "D"    |                 |
    | "CD"   | "charlie delta" |
    |--------------------------|
    
  12. Я добавляю «дельта Чарли» к выходной строке («альфа браво» + «дельта Чарли»).

Конечно, N-граммы растут с количеством возможных вводов. Есть ли более простое или быстрое решение, которого я не вижу?

РЕДАКТИРОВАТЬ 19 марта 2015 г .:

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

На внешнем интерфейсе пользователь вводит свой ввод в текстовый ввод, и значение ввода отправляется в PHP через AJAX-запрос в фоновом режиме.

Например…

  1. Пользователь вводит «А» при вводе текста.
  2. При включении Javascript получает значение ввода текста, отправляет его на сервер в фоновом режиме и очищает значение ввода.
  3. Пользователь вводит «B» при вводе текста.
  4. При включении Javascript захватывает значение ввода текста, отправляет его на сервер в фоновом режиме и очищает значение ввода.
  5. …Так далее и тому подобное…

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

0

Решение

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

По этой причине вы почти наверняка захотите использовать Javascript.

В javascript это не очень сложно. Вы должны будете определить свой список конверсии, вероятно, с помощью ajax-вызова, который получает его с вашего сервера. Вы бы присвоили эти результирующие данные объекту, который вы можете использовать для поиска значений. Вы создадите событие keyup или change в поле ввода, в этом случае вы оцените ввод, определите вывод из вашего объекта определения и вернете его в другое поле.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]