【问题标题】:iphone sdk : Break chinese sentence into words and lettersiphone sdk:将中文句子分解成单词和字母
【发布时间】:2014-08-23 05:21:34
【问题描述】:

我有中文新闻提要,我想将句子分成更小的块传递给 API。

我如何在 ios 中做到这一点?我为英语设置了 50 个字符的字符长度。

目前我正在使用rangeOfString: 函数来查找点、逗号和分句。

NSString *str  = nil, *rem = nil;

str = [final substringToIndex:MAX_CHAR_Private];
rem = [final substringFromIndex:MAX_CHAR_Private];
NSRange rng = [rem rangeOfString:@"?"];
if (rng.location == NSNotFound) {
    rng = [rem rangeOfString:@"!"];
    if (rng.location == NSNotFound) {
        rng = [rem rangeOfString:@","];
        if (rng.location == NSNotFound) {
            rng = [rem rangeOfString:@"."];
            if (rng.location == NSNotFound) {
                rng = [rem rangeOfString:@" "];
            }
        }
    }
}
if (rng.location+1 + MAX_CHAR_Private > MAXIMUM_LIMIT_Private) {
    rng = [rem rangeOfString:@" "];
}

if (rng.location == NSNotFound) {
    remaining = [[final substringFromIndex:MAX_CHAR_Private] retain];
}
else{
    //NSRange rng = [rem rangeOfString:@" "];
    str = [str stringByAppendingString:[rem substringToIndex:rng.location]];
    remaining = [[final substringFromIndex:MAX_CHAR_Private + rng.location+1] retain];
}

这不适用于中文和日文字符。

【问题讨论】:

    标签: ios nsstring chinese-locale word-processor


    【解决方案1】:

    检查NSLinguisticTagger,它应该可以使用中文:

    来自 Apple:“NSLinguisticTagger 类用于自动分割自然语言文本并用信息标记它,例如词性。它还可以标记语言、脚本、词干形式等。”

    苹果文档NSLinguisticTagger Class Reference

    另见NSHipster NSLinguisticTagger

    另见objc.io issue 7

    【讨论】:

    • "如果您使用的是 iOS,那么您目前(从 iOS 7 开始)仅限于英语。在 OS X(从 10.9/Mavericks 开始)您有一个稍大的可用列表; method +[NSLinguisticTagger availableTagSchemesForLanguage:] 列出了给定语言可用的所有方案。在 iOS 上限制数量的可能原因是资源文件占用大量空间,这在笔记本电脑或台式机上很好,但不是这样在手机或平板电脑上很好。”从教程中得到这个,你还有其他选择吗?请分享
    【解决方案2】:

    NSString 提供了开箱即用的 NSStringEnumerationBySentences 枚举选项:

    [string enumerateSubstringsInRange:NSMakeRange(0, [string length])
                               options:NSStringEnumerationBySentences
                           usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop)
        {
            NSString *sentence = [substring stringByTrimmingCharactersInSet:whiteSpaceSet];
            // process sentence
        }
    ];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      相关资源
      最近更新 更多