计算NSStrings中的相似度

时间:2014-08-30 17:38:50

标签: ios string cocoa-touch similarity

我需要找到一种方法来比较NSString以获得两个句子匹配的百分比。

例如,这句话的内容有多相似:

NSString *firstSentence = @"The first iPhone was released in 2007.";

这句话:

NSString *secondSentence = @"in 2007, the iphone first iphone was released";

我试图将它们分成单词,看看有多少单词与单词总数相匹配,然后给出一定百分比 - 但这只会比较我选择的单词,比如

NSString *oneWord = @"ipone";
if ([oneWord isEqualToString:@"iPhone"]) {
    matchingWords++;
}

这并不告诉我它包含相同的信息 - 它是否拼写错误?

我的另一个想法是检查两个单词的发音,但如果oneWord是“ifone”而不是“ipone”,那会更好。

这有点像剽窃检查。

我应该采取什么方法?

2 个答案:

答案 0 :(得分:0)

看看http://en.wikipedia.org/wiki/Levenshtein_distance

这里有一个实现:https://gist.github.com/iloveitaly/1515464

似乎你可以通过调用来比较字符串:

- (CGFloat) compareWithString: (NSString *) stringB matchGain:(NSInteger)gain missingCost:(NSInteger)cost;

然后,您可以通过测试确定所需的阈值。

答案 1 :(得分:0)

如何将字符串拆分为类似的数组

NSArray *sentenceOne = [firstSentence componentsSeperatedByString:@“ “];
NSArray *sentenceTwo = [secondSentence componentsSeperatedByString:@“ “];

然后可以轻松计算每个数组以查找句子中的单词数。 然后迭代比较第一个数组的每个元素和第二个数组。您可以在第二个数组中向前或向后检查,以查看是否存在相同的单词,但不一定在同一个位置。加权分数可以根据它是在同一位置,在句子的后面,还是在句子的早期给出。

如果你想用字符分割句子,你可以使用像

这样的东西
NSMutableArray *characters = [[NSMutableArray alloc] init];
for (int i=0;i<[sentence length];i++)
        {
           NSString *character = [NSString stringWithFormat:@"%c", [sentence characterAtIndex:i]];
            [characters addObject:character];
        }
}
相关问题