C# сравнение строк с некоторой снисходительностью

В настоящее время я работаю над проектом базы данных, в котором у нас есть некоторые заданные имена, которые необходимо сравнить с некоторыми историческими именами в существующей базе данных. Эти имена принадлежат коренным народам Малайзии, которые собирают антропологи, проводящие интервью в этих отдаленных районах с разницей в месяцы, если не годы. Многие из этих коренных народов неграмотны и не имеют последовательного произношения, а тем более написания своего имени. Это заставляет большинство антропологов делать обоснованные предположения о том, как они могут быть написаны. Большинство из этих предположений довольно последовательны, всего лишь на несколько букв и очень похожи на человеческий глаз.

Однако человеческий глаз, очевидно, сильно отличается от глаза компьютера, и я не уверен, как лучше всего попытаться сравнить имена и посмотреть, насколько они «близки» друг к другу. Я, конечно, не ищу ничего даже отдаленно точного, но мне было интересно, знает ли кто-нибудь о существующем методе этого. Поиск решений такого рода - кошмар, учитывая, насколько близка проблема к невероятно распространенной проблеме сравнения строк.

Кроме того, в качестве примечания, это самый близкий вопрос, который я видел: Мягкое сравнение строк. Однако большая проблема здесь в том, что здесь используется поиск по словарю. Эти имена написаны на совершенно другом языке, у которого даже нет письменного словаря, и подавляющее большинство их озвучивает третьи стороны, потому что на самом деле люди не говорят по-английски. Из-за этого мне нужно что-то, что может выполнять такого рода «процентное совпадение», но для двух заданных строк, а не для словаря строк.

Другое решение, которое я видел, - это вычисление расстояния Левенштейна, но не был уверен, может ли быть решение, которое также учитывало бы «звук» слова. Например, разница между «Кук» и «Чуч» сильно различается с точки зрения расстояния Левенштейна, но на самом деле она довольно похожа в зависимости от того, как это сказано.

Вы, вероятно, захотите сначала фонетизировать слова, а затем взвесить фонемы по расстоянию. Там уже должно быть что-то, см. Интересные статьи microsoft.com/en-us/research/blog/… и stackabuse.com/…

Charlieface 30.03.2021 05:15

Может, что-то использующее soundex? Проверить stackoverflow.com/q/11121936/5803406

devNull 30.03.2021 05:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
30
0

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