В .NET Framework ничего нет, что поможет вам с этим готовым к использованию.
Наиболее распространенными орфографическими ошибками являются те, где буквы являются достойным фонетическим представлением слова, но не правильное написание слова. Например, можно утверждать, что слова sword
и sord
(да, это слово) имеют одинаковые фонетические корни (они звучат одинаково, когда вы их произносите).
Это, как говорится, есть ряд алгоритмов, которые можно использовать для перевода слов (даже неправильно принятых) в фонетические варианты.
Первый - Soundex. Это довольно просто реализовать, и существует довольно много .NET implementations of this algorithm. Это довольно просто, но это дает вам реальные ценности, которые вы можете сравнить друг с другом.
Другое Metaphone. Хотя я не могу найти встроенную .NET-версию Metaphone, предоставленная ссылка имеет ссылки на ряд других реализаций, которые могут быть преобразованы. Проще всего конвертировать, вероятно, будет Java implementation of the Metaphone algorithm.
Следует отметить, что алгоритм Metaphone прошел ревизии.Существует Double Metaphone (у которого есть .NET implementation) и Metaphone 3. Metaphone 3 - это коммерческое приложение, но имеет коэффициент точности 98% по сравнению со скоростью 89% точности для алгоритма Double Metaphone при работе с базой данных общих английских слов. В зависимости от ваших потребностей вы можете захотеть найти (в случае Double Metaphone) или приобрести (в случае Metaphone 3) источник для алгоритма и преобразовать или получить доступ к нему через уровень P/Invoke (существуют реализации C++ имеются в большом количестве).
Метафон и Soundex отличаются тем, что Soundex производит цифровые клавиши фиксированной длины, тогда как Metaphone производит клавиши разной длины, поэтому результаты будут разными. В конце концов, оба будут делать то же самое сравнение для вас, вам просто нужно выяснить, что подходит вашим потребностям наилучшим образом, учитывая ваши требования и ресурсы (и уровни нетерпимости для орфографических ошибок, конечно).
В этом случае мне придется спорить с Левенштейном. Хотя это здорово для выяснения того, как разные две строки, орфографические ошибки чаще, чем не сохранить правильную фонетику. Например, алгоритм LD, вероятно, не указывает на то, что «классная кошка» и «kool kat» похожи (это то, что я считаю, по желанию плаката), тогда как Soundex и Metaphone чаще указывают на сходство между этими словами/фразами , – casperOne
@casperOne: трудно сказать, не зная набор данных, к которому он применяется, но согласитесь, что подход одноразового использования не подходит. Я большой поклонник двойного метафона. – RedFilter
@RedFilter привет .. я использовал levenshtein distance ... но я на самом деле сравниваю страны или регионы мира. поэтому, если я сохраняю толерантность как 2, тогда Австрия и Австралия будут показаны одинаково. в то же время США и США показаны разными. что я могу сделать для этой проблемы? –