objective-c - 优化扫描大文本并匹配单词或短语列表

标签 objective-c ios nsstring full-text-search replace

我正在开发一个应用程序,它接受一篇文章(简单的 HTML 页面)和一个词汇表(每个都可以是一个词、一个短语,甚至是一个句子),并为它的每个词创建一个链接发现。问题在于,对于包含更多术语的较大文本,需要很长时间。目前我们正在处理这个问题,最初显示未标记的文本,在后台处理链接,最后在处理完成时重新加载 web View 。不过,这可能需要一段时间,而且我们的一些用户对此并不满意。

现在,该应用程序对条款使用了一个简单的循环,在 HTML 中进行了替换。基本上:

for (int i=0; i<terms.count; i++){
    NSString *term = [terms objectAtIndex:i];
    NSString *replaceString = [NSString stringWithFormat:@"<a href="myUrl:\\%d>%@</a>", i, term];
    htmlString = [htmlString stringByReplacingOccurrencesOfString:term 
                                                       withString:replaceString 
                                                          options:NSCaseInsensitiveSearch 
                                                            range:NSMakeRange(0, [htmlString length] )];
}

但是,我们处理的是多种语言,因此每个学期不仅有一个替代品,而是二十个!那是因为我们必须在每个学期的开头(西类牙语中倒置的问号)和结尾处处理标点符号。我们必须用适当的超链接替换 ​​"term""term.""term?"

我可以使用更有效的方法来标记此 HTML 吗?

我需要保留原始术语的索引,以便稍后当用户单击链接时可以检索它。

最佳答案

您可以按如下方式处理文本:

  1. 与其遍历词汇表,不如将文本拆分为单词并在词汇表中查找每个单词。

  2. 创建一些索引、哈希表或字典以提高查找效率。

  3. 不要使用 stringByReplacingOccurrencesOfString。每次调用它时,它都会复制整个文本,并且在自动池耗尽之前不会释放内存。 (有趣的是,您还没有遇到内存问题。)而是使用一个 NSMutableString 实例,您可以在其中附加每个单词(以及它们之间的字符),就像在原始文本中一样或装饰为一个链接。

关于objective-c - 优化扫描大文本并匹配单词或短语列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7222664/

相关文章:

ios - objc 与协议(protocol)继承不兼容的指针类型

ios - 使用自定义动画呈现 ViewController

ios - 无法快速注销 pinterest

iphone - 带有大图标的标签栏

ios - 填充 NSMutableArray 不工作

ios - 打开 View 时,UITextView 部分向下滚动

objective-c - UITableView 上的 sendSubviewToBack 在 iOS 11 中无法正常工作

ios - 尝试使用 swiftyJSON 快速解析 JSON

objective-c - 如何确定 NSString 中子字符串的顺序?

objective-c - 在 NSString 实例中替换给定 unicode char 的正确方法是什么?