В настоящее время я работаю над проектом базы данных, в котором у нас есть некоторые заданные имена, которые необходимо сравнить с некоторыми историческими именами в существующей базе данных. Эти имена принадлежат коренным народам Малайзии, которые собирают антропологи, проводящие интервью в этих отдаленных районах с разницей в месяцы, если не годы. Многие из этих коренных народов неграмотны и не имеют последовательного произношения, а тем более написания своего имени. Это заставляет большинство антропологов делать обоснованные предположения о том, как они могут быть написаны. Большинство из этих предположений довольно последовательны, всего лишь на несколько букв и очень похожи на человеческий глаз.
Однако человеческий глаз, очевидно, сильно отличается от глаза компьютера, и я не уверен, как лучше всего попытаться сравнить имена и посмотреть, насколько они «близки» друг к другу. Я, конечно, не ищу ничего даже отдаленно точного, но мне было интересно, знает ли кто-нибудь о существующем методе этого. Поиск решений такого рода - кошмар, учитывая, насколько близка проблема к невероятно распространенной проблеме сравнения строк.
Кроме того, в качестве примечания, это самый близкий вопрос, который я видел: Мягкое сравнение строк. Однако большая проблема здесь в том, что здесь используется поиск по словарю. Эти имена написаны на совершенно другом языке, у которого даже нет письменного словаря, и подавляющее большинство их озвучивает третьи стороны, потому что на самом деле люди не говорят по-английски. Из-за этого мне нужно что-то, что может выполнять такого рода «процентное совпадение», но для двух заданных строк, а не для словаря строк.
Другое решение, которое я видел, - это вычисление расстояния Левенштейна, но не был уверен, может ли быть решение, которое также учитывало бы «звук» слова. Например, разница между «Кук» и «Чуч» сильно различается с точки зрения расстояния Левенштейна, но на самом деле она довольно похожа в зависимости от того, как это сказано.
Может, что-то использующее soundex? Проверить stackoverflow.com/q/11121936/5803406
Вы, вероятно, захотите сначала фонетизировать слова, а затем взвесить фонемы по расстоянию. Там уже должно быть что-то, см. Интересные статьи microsoft.com/en-us/research/blog/… и stackabuse.com/…