3

Для людей, говорящих на голландском языке, два символа «ij» считаются единственной буквой, которая легко обменивается с «y».Дамеру-Левенштейн расстояние для специфических особенностей языка

Для проекта я работаю я хотел бы иметь вариант Damerau–Levenshtein distance, который вычисляет расстояние между «Ij» и «у», как 1 вместо текущего значения 2.

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

Спасибо.

+0

Что делать, если вы транскрибировали голландские фонемы и затем занимаете дистанцию? – dnagirl

+0

AFAIK тогда расстояние может измениться по сравнению с «оригинальными» двумя текстами. –

ответ

2

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

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

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

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

Как алгоритм обрабатывает многокодированные символы?

+0

Символы с несколькими кодировками обрабатываются отлично, потому что реализация, которую я использую, основана на Java (с использованием типа «char») и просто сравнивает «равно» и «не равно». –

+0

Моя команда сделала несколько недоразумений и нашла решение. Я награждаю вас за «ответ», поскольку вы давали самые полезные предложения. Благодарю. –

1

Хорошо, что расстояние D-L не будет обрабатывать его для вас, поскольку оно измеряет расстояния.

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

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

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

0

Идея состоит в том, чтобы перевести каждую строку в какое-то построенное ортогональное представление, где орграфы, такие как «ij» и английский «gh» «th», и друзья - это только один символ. При выполнении Damerau-Levenshtein метрика расстояния не должна быть одинаковой для всех типов реплик, поэтому вы можете использовать любые штрафы, которые вы хотите, но таблицу нужно заполнить локально, поэтому вы действительно хотите, чтобы каждый звук был одной ячейкой в ​​таблице ,

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

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