2012-06-27 5 views
1

Я хотел бы написать перечислитель, который пройдет через абзац текста и даст мне по одному предложению за раз. Я попытался использовать stringEnumerate с помощью NSStringEnumerationBySentences, но просто просматривает периоды и терпит неудачу. Например, предположим, что у меня есть следующий текст Блок:Цель C Перечисление предложений в абзаце

«Сенатор Джон А. Бонер решил не двигаться вперед, он также решил не называть съезд сказал репортер новостей, хотя ......»

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

  1. сенатор Джон А. Бонер решил не двигаться вперед

  2. Он также решил не т назвать съезд (Нет третье предложение, потому что это половина предложение)

Строка Enumerator с предложением optionjust смотрит на периоды и перерывы вниз таким образом, что неправильно:

  1. сенатор Джон А.

  2. Бонер решил не двигаться вперед

  3. Он также решил не называть съезд

  4. Новости репортер сказал, хотя ....

Есть ли библиотека или функция, которую я могу назвать, что делает лучшую работу в этом?

Благодаря

- (NSMutableString *) getOnlyFullSentencesFromTextBlock:(NSMutableString *) textBlock{ 
    [textBlock enumerateSubstringsInRange:NSMakeRange(0, [textBlock length]) 
            options:NSStringEnumerationBySentences | NSStringEnumerationLocalized 
           usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) 
    { 
     NSLog(@"Sentence Frag:%@", substring);                   
    }]; 
    return textBlock; 
} 
+0

Вам действительно нужно перебирать их напрямую или было бы неплохо получить все предложения в массиве и перебрать их за –

+4

Вам нужно было бы лучше определить, что делает предложение предложением. Его достаточно просто для людей сказать, что предложение не заканчивается в первый период, потому что это аббревиатура, но как компьютер знает об этом? –

+1

Я не могу придумать способ сделать то, что вы просите, просто проанализировав строку символов. Вам, вероятно, нужно что-то, что хорошо понимает грамматику английского языка ... возможно, переднюю часть автоматической системы перевода. –

ответ

0

Единственное решение, которое происходит мне, чтобы проверить, если последнее слово до периода начинается с символа верхнего регистра. Если это так, и количество символов этого слова не превышает 3 или 4 (вам нужно попытаться увидеть, что работает лучше), возможно, это аббревиатура.
Я знаю, что это не распространяется на все случаи, но это может сработать для большинства из них.