2014-01-30 2 views
0

나는 이것이 공명있게하는 것이 불가능할 수도 있다고 생각하지만, 나는 그것을 시도 할 것이라고 생각했다. 그래서 두 개의 NSStrings이 있다고 가정 해 보겠습니다. 하나는 @"Singin' In The Rain"이고 다른 하나는 @"Singing In The Rain"입니다. 이 문자열은 매우 유사하지만 작은 차이가 있습니다. 나는이 유사 찾았어요두 개의 NSStrings의 차이를 얻는 방법

NSString *stringOne = @"Singin' In The Rain"; 
NSString *stringTwo = @"Singing In The Rain"; 

float dif = [stringOne differenceFrom:stringTwo]; 
//dif = .9634 or something like that 

한 프로젝트가 스택 오버플로의 이전 비슷한 질문에서 찍은 : Check if two NSStrings are similar를 나는 다음과 같은 것을 쓸 수 어디있는 방법을 찾기 위해 노력하고있어. 그러나, 이것은 단순히 내가 필요로하는만큼 정확하지 않은 BOOL을 반환합니다. 또한 NSString에 대한 compare: 설명서를 살펴 보았지만 모두 너무 기본적인 것처럼 보였습니다. 내가 발견 한 또 다른 유사한 것은 https://gist.github.com/iloveitaly/1515464입니다. 그러나 이것은 다양한 결과를 제공합니다. 심지어 동일한 문자열 중 두 개가 때때로 다른 경우도 있습니다. 모든 조언을 많이 주시면 감사하겠습니다.

+1

어떻게 차이를 정의합니까? 문자의 96.34 %가 ​​같은 것을 의미합니까? – nhgrif

+1

먼저 결정해야 할 것은 문자열이 다른 문자열과 다른 것입니다. 규칙은 무엇입니까? – rmaddy

+0

이론적으로 2 개의 NSArrays를 사용할 수 있으며 각 문자를 배열에 넣은 다음 한 배열의 요소 1을 다른 요소의 요소 1과 비교하십시오 – logixologist

답변

0

또 다른 :

소스 및 diff에 따라서 알고리즘과 유사한 프로그램을 쉽게 사용할 수 있습니다. 이들은 라인 단위로 입력을 비교하고 삽입, 삭제 및 변경을 감지합니다.

"친밀감"에 대한 텍스트 문자열을 비교할 때 단어 삽입, 삭제 또는 변경은 모든 것의 척도가됩니다.

그래서 :

  1. 브레이크 "단어"로 각 문자열 (충분해야한다 분리 공백).
  2. diff 알고리즘을 사용하여 두 단어를 비교하고 "단어"를 "줄"로 처리하고 다시 동기화 길이를 1로 사용합니다 (두 입력을 동일하게 처리해야하는 "줄 수" 다시 동기화)
  3. 총 단어 수와 비교하여 삽입/삭제/변경 횟수로 "근접성"을 계산합니다.

두 개의 예제 문자열의 경우 1 : 4 변경 또는 75 % 유사하게 나타납니다.

각 변경에 대해 더 세분화 된 것을 원한다면 두 단어를 문자로 분할하고 단어가 비슷한 단어의 분수를 제공하는 알고리즘을 반복하십시오 (전체 단어와 반대).

두 개의 예제 문자열의 경우 3/6 단어가 4 개 또는 96 % 유사하게 나타납니다.

+0

개념적으로 이것은 Levenshtein 거리와 매우 유사합니다. – mipadi

+0

@mipadi - 예. :-) – CRD

0

나는 그런 비교를 워핑 동적 시간을 권하고 싶습니다 :

http://en.wikipedia.org/wiki/Dynamic_time_warping

이 그러나, 두 개의 문자열 (그래서 당신은 동일한 0를 얻을 수 있습니다) 사이의 거리를 반환하지만이 최고의 시작점 I 생각할 수 있습니다.

1

질문은 다소 모호하지만, 가장 만족스러운 결과는 NSLinguisticTagger을 사용한다고 가정합니다. NSLinguisticTagSchemeLexicalClass 구성표를 사용하여 각각의 태그를 구문 분석하면 문자열이 동사, 명사, 형용사 등으로 분류됩니다. 예를 들어, 그 singin '을 발견하지 못했고 노래가 동일 할지라도, 다른 세 단어는 동일하고 끝에있는 것은 명사이므로 두 가지 모두 같은 일을하는 것입니다.

BK-Tree과 같은 단어를 사용하면 일치하는 단어가 있는지 의심되는 단어를 비교하는 것이 좋습니다 (명사는 분명히 부사와는 일치하지 않지만 철자가 다른 경우에도 두 개의 명사가 일치 할 수 있음).

벽 제안 오프
+0

고려해야 할 또 다른 좋은 점 – uchuugaka

관련 문제