1

基本大纲;我正在检索约 100 个 Facebook 状态,并搜索这些帖子以检查它是否包含约 20 个搜索词之一。当我尝试在浏览器中运行它时,它会锁定,这让我担心尝试在客户端运行它。

让服务器运行此操作并返回结果的最简单方法是什么?我可以用 Python 做吗?这是循环,供参考。

    function Filter() {
    console.log("running Filter")
    //loop through fbObj.posts
    for (i = 0, l = fbObj.length; i < l; i++){
        var post = fbObj[i].post
        console.log("Checking " + post + " for search terms")
        //loop through searchTerms
        for (j = 0; j<searchTermObj.length; j= j++) {
            searchTerm_variants = searchTermObj[j].words
            for (x = 0; x <  searchTerm_variants.length; x++){
                if (post.indexOf(searchTerm_variants[x]) !== 0){
                    foundPosts[i] = {}
                    foundPosts[i] = fbObj[i]
                }
            }   
        }
    console.log(foundPosts) 
    }
}
4

3 回答 3

2

您的代码中有一个错误可能解释了锁定:

//loop through searchTerms
for (j = 0; j<searchTermObj.length; j= j++) {

j 永远不会增加(因此它始终为 0):

j++ 增加 j,但计算结果为分配给 j 的 j。所以这是一个空操作。

因此,您的代码卡在循环中。

于 2013-04-04T14:38:07.610 回答
1

您是否考虑过在客户端使用工作线程来执行此操作?但是,这可能仅在各种浏览器的最新版本中可用? https://developer.mozilla.org/en-US/docs/DOM/Worker

于 2013-04-04T14:06:44.220 回答
1

你可以像这样构建一个包罗万象的正则表达式,我认为:

var regexWords = [], variants;
for (var i = 0; i < searchTermObj.length; ++i) {
  variants = searchTermObj[i].words;
  for (var j = 0; j < variants.length; ++j)
    regexWords.push(variants[j]);
}

var regex = new RegExp(regexWords.join("|"));

然后你可以像这样测试每个帖子:

for (i = 0, l = fbObj.length; i < l; i++){
    var post = fbObj[i].post
    if (regex.test(post)) {
      // found a naughty word in the post
    }
}

现在,只要您的单词列表只是字母单词,没有像“*”或“。”这样的有趣字符,它就可以工作。在他们中。如果它们确实包含特殊字符,您仍然可以完成这项工作,但它会更复杂一些。

使用像这样的大正则表达式允许正则表达式引擎采用智能亚线性搜索技术,因此每个帖子只需要搜索一次。它仍然可能不是非常快。

于 2013-04-04T14:17:45.343 回答