【问题标题】:Intelligence Sentence Comparison in Objective CObjective C 中的智能句子比较
【发布时间】:2011-11-01 12:01:46
【问题描述】:

我需要在 Objective C 中进行智能句子比较。

详情如下。

我有一个主字符串。我将其命名为“OriginalString”

                   NSString *OriginalString = @""HOW DID STUDENT EMILY DO TODAY";

然后我有很多字符串,我需要与原始字符串进行比较。它们是

             NSString *CompareString1 = @"HOW DID EMILY DO "
             NSString *CompareSting  = @"HOW DID YOUR FATHER"
             NSString *CompareString2 = @"WHAT IS YOUR EMILY"
             NSString *CompareString3 = @"THIS IS THE FAST DO ONE"
             NSString *CompareString4 = @"THIS SEARCH EMILY EXAMPLE DO"

从这 5 个 CompareStrings 中,我需要得到相对于原始字符串最高的字符串“HOW DID EMILY DO”(HOW DID STUDENT EMILY DO TODAY)。

让我告诉你一件事。

如果我在 CompareStrings 组中有一个附加字符串为“学生今天如何做”

所以现在我有了 CompareStrings

             NSString *CompareString1 = @"HOW DID EMILY DO "
             NSString *CompareSting  = @"HOW DID YOUR FATHER"
             NSString *CompareString2 = @"WHAT IS YOUR EMILY"
             NSString *CompareString3 = @"THIS IS THE FAST DO ONE"
             NSString *CompareString4 = @"THIS SEARCH EMILY EXAMPLE DO"
             NSString *CompareString4 = @"HOW DID STUDENT DO TODAY"

从这 6 个 CompareStrings 中,我需要得到相对于原始字符串最高的字符串“HOW DID STUDENT DO TODAY”(HOW DID STUDENT EMILY DO TODAY)

我查看了 NSPredicate 的“比较和喜欢”方法。但是我没有找到任何方法来完成这个过程

感谢任何关于弄清楚这个概念的帮助。

谢谢。

【问题讨论】:

  • 你用什么规则来决定最接近的句子?还是这是你的问题?
  • 我没有任何规则。只是我需要在它们中获得一个“相对于我的 OriginalString 最高的 CompareString”

标签: objective-c xcode ios4 nsstring comparison


【解决方案1】:

自然语言解析是一个困难的话题,使用简单的字符串比较方法不太可能获得好的结果。我建议寻找一个在更高级别运行的工具包。 Lion 和 iOS 5 使用 NSLinguisticTagger class 对此提供了少量支持。

【讨论】:

  • 不知道这个,太棒了。谢谢!
  • 我认为我们无法在 IOS 4.3 中实现它。谢谢您的出色回复
【解决方案2】:

听起来像是 comp-sci 作业。这是草率和低效的地狱,但它会工作。我敢肯定这里有人有更好的想法来提高性能。

将您要搜索的短语分解为单个单词的数组:

NSArray *myWords = [myString componentsSeparatedByString:@" "];

现在 myWords 是每个单词的数组(没有空格)。然后,构建一个谓词来查找每个单词:

int found = 0;
for (NSString* word in myWords) {
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like[c] %@", word];
    BOOL ok = [predicate evaluateWithObject:originalString];
    if (ok) {
      ++found;
    }
}

完成后,您会得到一个found,您可以比较每个不同的短语。最匹配的单词最多。

在这种情况下,你最终会这样计数:

HOW DID STUDENT EMILY DO TODAY

  • “艾米丽是怎么做到的”4
  • “你父亲怎么样”2
  • “你的艾米莉是什么”1
  • “这是最快的”1
  • “搜索 EMILY 示例”2
  • “学生今天过得怎么样”5

【讨论】:

  • 如果一个词出现“DID DID DID DID”怎么办。我认为解决方案将始终从比较字符串中获取“DID DID DID DID”,而我输入“学生艾米莉今天如何做”跨度>
  • 搜索时,您可以先通过唯一比较器过滤数组中的唯一元素
猜你喜欢
  • 2017-06-03
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多