Используйте NSRegularExpression, чтобы найти, насколько «близка» фаза к другой фразе. - PullRequest
0 голосов
/ 15 апреля 2011

Я пытаюсь выяснить, как использовать NSRegularExpression, чтобы увидеть, как «закрыть» строку соответствует другой строке.Я знаю, что могу просто создать набор подстрок и использовать NSRange для каждой из них, чтобы увидеть.Например,

"вверх", "до", "а", "точка" совпадают с "вверх на два очка". Я мог бы сопоставить 3 из 4 Аналогично, "до точки тоже" соответствует 3, "вверх"to a "соответствует всем 4.

Я надеюсь, что с помощью регулярных выражений я смог обобщить сопоставление с образцом, чтобы я мог просто использовать" до точки "и сопоставить его с тем, что я нахожу в другой строке,например:

до пункта назначения, до точки, до точки, до точки до и т. д. и получают совпадение в процентах.

Не уверен, что это выполнимо, поэтому мой вопрос.Спасибо за любую помощь / совет.

Ответы [ 2 ]

4 голосов
/ 15 апреля 2011

регулярное выражение конечно не подходящий инструмент для этого.

Сделайте это вместо:

  1. Объедините строки, запустив их через [string uppercaseString] или [string lowercaseString].
  2. Вычислить Расстояние Левенштейна между объединенными строками.
  3. ...
  4. Прибыль!

Расстояние Левенштейна (или расстояние редактирования ) - это абсолютное количество символов, которые необходимо обменять / удалить / добавить в / из / в stringA для преобразования это в stringB.

Выполнение Objective-C из Расстояние Левенштейна .

Расширенное примечание : Здесь не похоже, что вы находитесь в опасности, но стоит отметить, что хотя расстояние Левенштейна довольно удобно для сравнения коротких строк, оно не очень полезно для вычисления расстояний между целыми документы. Большинство реализаций Левенштейновского расстояния требуют пространства памяти m*n (m и n - длины ваших строк). И хотя некоторые реализации могут уменьшить это значение до m+n (afaik), для их времени выполнения все еще требуется O(n*n), что в основном эквивалентно O(n^2) в среднем.

1 голос
/ 15 апреля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...