我正在启动一个网站,该网站将从Twitter API中获取大量数据。然后,我想在从API获得的tweet中查找某些短语。我想知道最好的语言是什么。我的大部分知识都是用PHP编写的,但从我过去读到的内容来看,我更倾向于使用python。就像我之前说的,我将寻找某些短语,所以我想使用一些类似于PHP的strpos函数。我正在寻找一种语言,将具有最快的处理时间。我还将使用此代码执行大量插入,但我认为字符串处理将占用大部分时间,因此我将重点放在这一点上。提前感谢你的回答。
发布于 2011-01-29 04:24:44
我的一个项目收集了许多开发人员的推文,然后将语料库过滤为与技术和开发相关的推文。从Twitter获取这些推文的成本使搜索字符串所需的时间相形见绌。
我说你应该选择一种你喜欢的语言(我选择的武器是C#),并确保你使用一种有效和适当的算法来执行搜索-- SEK发布了一个非常好的链接来帮助你入门。
更重要的是要有一个好的策略来处理tweet,这就是你可能会被Twitter的性能杀死的地方。对我来说,最好的做法是有一个进程(或多个机器上的进程),它使用多线程异步客户端获取tweet,并将它们放入数据存储中进行处理。尽可能快地从Twitter获取tweet是这个过程的唯一责任。另一个多线程服务进程负责检查获取的tweet是否与我的目标短语匹配。
发布于 2011-01-28 14:19:40
如果你的搜索词集合是固定的,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)
发布于 2011-01-28 13:55:55
您认为字符串比较将花费最多时间的想法是正确的,但是无论您选择使用哪种语言,性能都可能是相同的。所以你最好的选择就是选一个你最舒服的。另一方面,学习一门新的语言只会增加你的知识,而python的语法会让你成为一名更好的程序员。
在任何情况下,使用适当的算法进行字符串搜索和索引都要重要得多。Wikipedia有一篇不错的文章,应该会让你对各种算法有一个大概的了解。从你的描述来看,听起来你最好使用有限模式集搜索,优先选择预处理模式的模式,比如Aho-Corasick。
https://stackoverflow.com/questions/4828706
复制相似问题