大量字符串比较的最佳语言

时间:2011-01-28 13:25:07

标签: twitter performance

我正在创建一个网站,它将从Twitter API中获取大量数据。然后我想在API中查找推文中的某些短语。我想知道最好的语言是什么。我的大部分知识都是用PHP编写的,但从我过去读到的内容来看,我更倾向于使用python。就像我之前说的那样,我会寻找某些短语,所以我想使用类似PHP的strpos函数。我正在寻找一种处理时间最快的语言。我也会用这段代码做很多INSERT但我认为字符串处理大部分时间都会占用,所以我专注于此。提前感谢您的回答。

3 个答案:

答案 0 :(得分:3)

如果您的搜索字词集是固定的,the esmre library for Python可能就是您所需要的。它使用Aho-Corasick对大量搜索词进行快速子串匹配。

以下是使用esmre查找某些编程语言的提及的示例:

import esm

tweets = """
I've always loved Python.
C# is better than I thought. It's like Java done right.
My tiny mind cannot grasp Haskell.
Objective-C is like C and Smalltalk's illegitimate lovechild.
""".strip().split('\n')

search_terms = ["Python", "Ruby", "PHP", "Erlang", "Haskell", "OCaml",
    "Objective-C", "C#", "C++", "Common Lisp", "Scheme", "Java", "Smalltalk",
    " C "
]

# Build the index of search terms
index = esm.Index()

for term in search_terms:
    index.enter("%s" % term.lower(), term)

index.fix()

# Find mentions of the search terms
for tweet in tweets:
    matches = index.query(tweet.lower())
    languages = [label for (position, label) in matches]

    print "%r mentions %r" % (tweet, languages)

答案 1 :(得分:1)

您认为字符串比较将花费最多时间是正确的,但无论您选择使用哪种语言,性能都可能相同。因此,您最好的选择是选择您最满意的那个。另一方面,学习一门新语言只会增加你的知识,python的语法会让你成为一个更好的程序员。

无论如何,使用适当的算法进行字符串搜索和索引更为重要。 Wikipedia有一篇不错的文章,可以为您提供各种算法的概述。根据您的描述,听起来好像您最好使用有限模式集搜索,优先选择预处理模式的模式,例如Aho-Corasick。

答案 2 :(得分:1)

我的一个项目收集了许多开发人员的推文,然后将该语料库过滤到只有那些与技术和开发相关的推文。从Twitter dwarfs 获取这些推文的成本是搜索字符串所花费的时间。

我说你应该选择一种你喜欢的语言(我选择的武器是C#)并确保你使用一种有效且合适的算法来执行搜索 - SEK发布了一个非常好的链接来帮助你入门。

更重要的是有一个好的策略来处理推文,这是你可以被Twitter的表现杀死的地方。对我来说很有效的方法是让一个进程(或多个机器上的进程)使用多线程异步客户端来获取推文并将它们放入数据存储区进行处理。这个过程完全有责任尽快从Twitter获取推文。另一个多线程服务进程负责检查提取的推文是否与我的目标短语匹配。