2013-01-18 3 views
1

Я получаю текстовые объекты, которые пользователи сократили с помощью смартфона, тумбочки или компьютерной клавиатуры. Это заставляет их искать «jstn» не получить «Джастин Робертс». Если они войдут в «csr», «caesar» должен появиться в auto-suggest.Как сделать практическую текстовую кодировку

В ожидании, я хочу кодировать правильно записанные слова в один или несколько возможных терминов «текст-говорить», чтобы при входе в них пользователи могли получать, сопоставлять и предлагать правильные условия.

Вот только некоторые виды вариантов написаний я должен объяснить:

justin -> jst, jstn, jtn 
april -> apr, aprl 
swedish -> swed swd 
banglore -> blore 
katrina -> kat 

Каковы некоторые хорошие схемы для кодирования условия, чтобы их текст -говорить и укороченные слова могут также соответствовать им? Я могу думать:

Удаление гласные: апрель -> aprl

Удаление гласных и пропуск некоторых согласных звуков: Бангалор -> bnglr, bglr

Metaphone, который генерирует тот же хэш для подобных звучащих слов

ответ

1

Я не уверен, что это хороший подход для создания статической базы данных для этой задачи. Вероятно, есть миллионы возможных терминов «текст», вы действительно думаете, что можете собрать их все и сохранить свою базу данных в актуальном состоянии, когда сотни новых могут быть «изобретены» каждую неделю?

Я предпочел бы рассмотреть возможность внедрения этой системы с использованием скоринга. Сначала вам нужен список «известных слов». Этот список может быть ограничен несколькими сотнями слов, если вы хотите управлять им вручную. С другой стороны, это также может быть огромным, например. вы можете взять все слова из английского словаря, включая пару списков, содержащих общие имена и фамилии, а также общие названия компаний и продуктов (например, список зарегистрированных товарных знаков будет охватывать большинство имен компаний и продуктов). Конечно, это также база данных, которая, возможно, потребуется регулярно обновлять, но, по крайней мере, вам нужно только обновить известные слова, а не все термины «текст-говорить». Обратите внимание, что в некоторых системах есть встроенные словари правописания, которые вы можете использовать, которые уже дают вам большую базу известных слов.

Вместо также сохраняя тонн «текст-Speak» точки зрения, вы пытаетесь соответствовать то, что пользователь вошел в свой список известных слов следующий набор правил:

  1. Все буквы «Текст -speak "должен появиться в слове.
  2. Все буквы должны отображаться в том же порядке, как в термином «текст».

Эти правила сами по себе уже устраняют множество невозможных слов. Теперь для оставшихся слов вам нужен способ, чтобы определить, насколько вероятен это слово. Вот тут и начинается игра. Вы пытаетесь угадать, какое слово более вероятно, используя какую-то эвристику.

E.g. все оставшиеся слова получают оценку 0. За каждые две последовательные «текстовые» буквы также следуют в оставшихся словах (никакая другая буква между ними не указана), вы увеличиваете счет на 2, так как это делает слово гораздо более вероятно. Для каждых двух последовательных «текстовых» букв, которые не являются последовательными в оставшемся слове, но между ними остаются только гласные, которые были опущены, вы увеличиваете счет на 1, поскольку это все еще делает хит более вероятным, но не так вероятным, как в случае раньше. И так далее.Вы можете также думать об условиях, которые приводят к отрицательным оценкам, уменьшая количество слов снова. Например. слова получают отрицательный результат в зависимости от соотношения между их длиной и длиной слова «текстовый».

Такая эвристика никогда не имеет прекрасных результатов, но если вы правильно настроите свою оценку, она может иметь очень хорошие результаты. Например. apr соответствует april, но это также соответствует aprilfool, по правилам выше april побед, потому что он короче и ближе к длине apr. jst будет соответствовать just, а также justin. В этом случае just победит, что может быть неправильным, но может быть и правильным, так как я видел jst для just много раз. Конечно, just может не иметь никакого смысла в вашем случае, поэтому просто не добавляйте его в список известных слов. Чтобы получить хорошую систему подсчета очков, нужно просто ее реализовать, а затем начать настраивать ее, добавляя или удаляя правила подсчета очков и изменяя добавленную или вычитаемую оценку в случае соответствия правила. Чем больше вы будете играть с этим, тем лучше это получится.

Также имейте в виду, что вы можете спросить пользователя, если у вас есть сомнения. Например. если пользователь набирает jst, вы показываете список удалений с Justin, а затем Justine, и первое попадание в этот список всегда отображается как автоматическое предложение, но пользователь также может указывать на вторую запись списка, чтобы она была завершена. В качестве бонуса вы можете сделать систему подсчета очков системой обучения. Если пользователь искал jst десять раз, и каждый раз, когда он выбирал Justine из списка, никогда Justin, похоже, что пользователь хочет скорее поискать Justine, чем для Justin. В этом случае вы, возможно, помните этот выбор и дадите Justine пару дополнительных бонусных очков, чтобы он всегда выигрывал Justin в будущем. Такая система оценки обучения используется для пользователя, поскольку она будет учиться с течением времени, что именно означает пользователь, когда он вводит определенный термин «текстовый разговор».

BTW, например система подсчета очков, как большинство спам-фильтров на серверах и в клиентском программном обеспечении работают. Включая «способность к обучению», если пользователь сам вводит что-то в качестве СПАМа или отключает что-то, что было ошибочно отмечено как СПАМ. В начале большинство фильтрующих фильтров SPAM в порядке, не очень хорошо. Если вы продолжаете использовать и «обучаете» их на более длительный период времени, они становятся все лучше и лучше, и, в конце концов, они будут правы в 99% всех случаев.

Смежные вопросы