2

正規表現を使用して、大きなテキスト ブロック内の完全な文を分離しようとしています。componentsSeparatedByCharactersInSet は、?!、!!、... で終わる文で明らかに失敗するため、使用できません ... componentSeparateByRegEx を実行する外部クラスを見てきましたが、外部ライブラリを追加せずに実行することを好みます。

ここに入力例があります こんにちは、テスト中です。元気ですか?わお!!これが一番です。満足しています。

出力は配列でなければなりません

最初の要素:こんにちは、テスト中です。

2 番目の要素: お元気ですか?

3番目の要素:うわー!!

第四の要素:これは最高です。満足しています。

これは私が持っているものですが、前述したように、意図したことを行うべきではありません。おそらく、ここでは正規表現の方がはるかにうまく機能します。

-(NSArray *)getArrayOfFullSentencesFromBlockOfText:(NSString *)textBlock{
    NSMutableCharacterSet *characterSet = [[NSMutableCharacterSet alloc] init];
    [characterSet addCharactersInString:@".?!"];  
    NSArray * sentenceArray = [textBlock componentsSeparatedByCharactersInSet:characterSet];                                   
    return sentenceArray;  
}

ご協力いただきありがとうございます、

4

3 に答える 3

13

オプションで使用-[NSString enumerateSubstringsInRange:options:usingBlock:]したい。NSStringEnumerationBySentencesこれにより、すべての文が得られ、言語を認識した方法で行われます。

NSArray *fullSentencesFromText(NSString *text) {
    NSMutableArray *results = [NSMutableArray array];
    [text enumerateSubstringsInRange:NSMakeRange(0, [text length]) options:NSStringEnumerationBySentences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
        [results addObject:substring];
    }];
    return results;
}

テストでは、各部分文字列には句読点の後に末尾のスペースが含まれているように見えることに注意してください。それらを削除したい場合があります。

于 2012-07-09T20:30:26.670 に答える
3

このようなものは仕事をすることができます:

NSString *msg = @"Hi, I am testing. How are you? Wow!! this is the best, and I am happy.";
[msg enumerateSubstringsInRange:NSMakeRange(0, [msg length])
                        options:NSStringEnumerationBySentences | NSStringEnumerationLocalized
                     usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop)
{
    NSLog(@"Sentence:%@", substring);       
    // Add each sentence into an array                                                                 
}];
于 2012-07-09T20:30:34.847 に答える
0

または使用:

    [mutstri enumerateSubstringsInRange:NSMakeRange(0, [mutstri length])
                                options:NSStringEnumerationBySentences
                             usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop){

                                 NSLog(@"%@", substring);

                             }];
于 2017-06-19T12:47:15.930 に答える