Я пытаюсь смоделировать фонетический распознаватель, который должен изолировать слова (цепочки телефонов) из длинного потока телефонов, в котором нет пропусков между каждым словом. Поток телефонов, возможно, был плохо распознан, с заменами / вставками / удалениями букв, поэтому мне придется выполнить приблизительное сопоставление строк.
Однако я хочу, чтобы сопоставление было фонетически мотивированным, например, «m» и «n» фонетически похожи, поэтому стоимость замены «m» на «n» должна быть небольшой по сравнению, скажем, «m» и «k». Так что, если я ищу [mein] "main", он будет соответствовать последовательности букв [meim] "maim", скажем, стоимостью 0,1, тогда как он будет соответствовать последовательности букв [meik] "make", скажем, , стоимость 0,7. Точно так же существуют разные затраты на вставку или удаление каждого письма. Я могу предоставить матрицу путаницы, которая для каждой пары букв (x, y) дает стоимость замены x на y, где x и y - любая буква или пустая строка.
Я знаю, что есть доступные инструменты, которые приближаются к сопоставлению, такие как agrep
, но, насколько я могу судить, они не принимают матрицу путаницы в качестве входных данных. То есть стоимость любая вставка / замена / удаление = 1. У меня вопрос, есть ли уже доступные инструменты с открытым исходным кодом, которые могут приблизительное сопоставление с матрицами путаницы, и если нет, то что такое хороший алгоритм, который я могу реализовать для достижения этой цели?
РЕДАКТИРОВАТЬ: просто чтобы быть ясно, я пытаюсь выделить приблизительные экземпляры слова, такие как [mein] из более длинной строки, например. [Aiammeinlimeiking ...]. В идеале алгоритм / инструмент должен сообщать о таких экземплярах, как [mein] со стоимостью 0,0 (точное совпадение), [meik] со стоимостью 0,7 (близкое совпадение) и т. Д., Для всех приблизительных совпадений строк со стоимостью ниже заданного порога.