Вопрос

Для людей, говорящих по-голландски, два иероглифа "ij" считаются одной буквой, которую легко заменить на "y".

Для проекта, над которым я работаю, я хотел бы иметь вариант Расстояние Дамерау–Левенштейн это вычисляет расстояние между "ij" и "y" как 1 вместо текущего значения 2.

Я сам пытался это сделать, но потерпел неудачу.Моя проблема в том, что я понятия не имею, как справиться с тем фактом, что оба текста имеют разную длину.У кого-нибудь есть предложение / фрагмент кода о том, как это решить?

Спасибо.

Это было полезно?

Решение

Статья Википедии довольно свободна с терминологией. На «естественном языке» нет таких вещей, как «строки». В естественном языке есть фонемы, которые могут быть представлены письменными символами и комбинированными символами.

Некоторые комбинезоны характера-это остатки исторических соглашений, которые выжили в современное время, как на современном английском «грубо», где «GH» может звучать как -f- или вообще не звучать. Мне кажется, что, сосредотачиваясь на необработанных «строках», алгоритм должен быть агностичным относительно исторической связи языка и орфографического соглашения, что приводит к некоторым произвольным показателям, когда комбинированные комбинезы коррелируют с одной фонемой. Как это будет измерить «грубо» для «ruf»? Или "через", чтобы "через"? Или немецкий o-umlaut to "oe"?

В вашем случае -Y- можно обмениваться фонетически и орфографически с -ij-. Итак, что это такое в соответствии с алгоритмом, два удаления, за которым следует вставка, или единственное удаление -J- или -, сопровождаемое транспозицией оставшегося персонажа в -y-? Или -i -iJ соавтоспособен, а коалесценция сопровождается транспозицией?

Я бы порекомендовал вам использовать еще одного неиспользованного персонажа Comnbining для -ij- перед применением алгоритма, возможно, U00EC, латинской маленькой буквы I с могильным акцентом.

Как алгоритм обрабатывает мульти-кодечевые символы?

Другие советы

Что ж, сама расстояние DL не будет справляться с ним для вас, из -за того, как оно измеряет расстояния.

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

Чтобы прояснить ситуацию, так как вы спрашиваете в общих чертах,

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

Идея состоит в том, чтобы перевести каждую строку в какое-то сконструированное орфографическое представление, где орграфы, такие как "ij" и английские "gh", "th" и friends, имеют длину всего в один символ.Метрика расстояния не обязательно должна быть одинаковой для всех типов замен при выполнении Дамерау-Левенштейна, поэтому вы можете использовать любые штрафы, которые вы хотите, но таблица должна быть заполнена локально, поэтому вы действительно хотите, чтобы каждый звук занимал одну ячейку в таблице.

Это, однако, прерывается, когда "ij" было задумано не как "ij", а как орфографическая ошибка или на границе сегментации слов (я не знаю, может ли это произойти в голландском языке), или в любой другой ситуации это на самом деле не (подразумевается как) орграф.

В противном случае вам нужно будет выполнить некоторый поиск, это усложнит ситуацию, но не должно изменять порядок роста алгоритма (я полагаю), при условии, что вы смотрите только на постоянное количество ячеек вокруг.Однако постоянные факторы по-прежнему будут намного больше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top