Сравнительный анализ предложения в задаче C - PullRequest
0 голосов
/ 01 ноября 2011

Мне нужно провести сопоставление предложений в разведке в Задаче 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 как «КАК СТУДЕНТ ДЕЛАЕТ СЕГОДНЯ»

Так что теперь у меня есть 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 мне нужно получить строку «КАКDID STUDENT DO TODAY ", который является наивысшим по сравнению с исходной строкой (КАК DID STUDENT EMILY DO TODAY)

Я посмотрел NSP предикат" сравнение и подобные "методы.Однако я не нашел никакого способа сделать процесс

Любая помощь в выяснении этой концепции приветствуется.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 01 ноября 2011

Разбор естественного языка - сложная тема, и вряд ли вы получите хорошие результаты с простым подходом сравнения строк. Я бы предложил поискать инструментарий, работающий на более высоком уровне. Lion и iOS 5 поддерживают небольшой уровень поддержки этого класса NSLinguisticTagger .

2 голосов
/ 01 ноября 2011

Походит на домашнюю работу компа.Это неряшливо и неэффективно, но это сработает.Я уверен, что у кого-то здесь есть лучшая идея улучшить производительность.

Разбейте ваши фразы, которые вы хотите искать, на массивы отдельных слов:

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
  • "ЭТО БЫСТРОONE " 1
  • " ЭТОТ ПРИМЕР ПОИСКА EMILY DO " 2
  • " КАК СТУДЕНТ ДЕЛАЛ СЕГОДНЯ " 5
...