Неправильное написание Regex - PullRequest
7 голосов
/ 25 декабря 2008

У меня есть регулярное выражение, созданное на основе списка в базе данных, для сопоставления названий типов зданий в игре. Проблема заключается в опечатках, иногда те, кто пишут инструкции для своей команды в игре, неправильно пишут название здания, и, очевидно, регулярное выражение не будет его подбирать (т. Е. Произносить слова «Университет» и «Университет»).

Есть ли какие-либо предложения по созданию орфографических совпадений из 1 или 2 букв?

Регулярное выражение генерируется динамически и запускается на локальном компьютере, способном справиться с гораздо большей нагрузкой, поэтому я в крайнем случае алгоритмически создаю версии каждого слова с пропущенной буквой, а затем еще одного с добавлением букв. *

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

Ответы [ 6 ]

14 голосов
/ 25 декабря 2008

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

Он также встроен в PHP .

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

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

3 голосов
/ 25 декабря 2008

Что такое Soundex ()? - Teifion (28 минут назад)

Саундекс похож на функцию Левенштейна, которую упоминает Триптих Это средство сравнения строк. Смотри: http://us3.php.net/soundex

Вы также можете посмотреть метафон и подобные тексты. Я бы написал это в комментарии, но у меня пока недостаточно представителей, чтобы сделать это. : D

3 голосов
/ 25 декабря 2008

Реализация Google "Вы имели в виду", взглянув на предыдущие результаты, также может помочь:

Как вы реализуете «Вы имели в виду»?

2 голосов
/ 25 декабря 2008

тебе повезло; ребята из алгоритмов проделали большую работу по приблизительному сопоставлению регулярных выражений . Самый старый из этих инструментов, вероятно, agrep, первоначально разработанный в Университете Аризоны и теперь доступный в хорошей версии с открытым исходным кодом. Вы просто говорите agrep, сколько ошибок вы готовы допустить , и это соответствует оттуда. Он может также соответствовать другим блокам текста, кроме строк . Ссылка выше содержит ссылки на более новую версию agrep под лицензией GPL, а также на ряд библиотек для конкретного языка для приблизительного соответствия регулярных выражений.

2 голосов
/ 25 декабря 2008

В те времена, когда мы иногда использовали Soundex () для этих проблем.

1 голос
/ 25 декабря 2008

Это может быть излишним, но Питер Норвиг из Google написал отличную статью о написании проверки орфографии в Python. Это определенно стоит прочитать и может подойти к вашему делу.

В конце статьи он также перечислил дополнительные реализации алгоритма на других языках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...