我的想法是建立一个基于我的书签文件,我在CSV格式的搜索引擎。
这个想法背后的动机是我有大量与教育资源相关的书签,我希望能够搜索和找到特定主题或主题的相关内容。
我不是一个很好的程序员(我可以用c++和java编写简单的程序),最近开始学习python。
是否有可能在一个月内实施该项目?
我已经搜索并发现一个CSV模块存在于python语言中,我唯一能得到的想法是从udacity CS101课程中使用python构建搜索引擎。
我的问题是这是否可能,从哪里开始?
我在工作中用Perl和Python实现了一个搜索引擎。第一个是为了解决一个生产问题而匆忙拼凑起来的,从概念到运行花了2个小时。我想开源最终版本,但不确定从哪里开始,因为它是为雇主完成的工作。总之,算法如下:
st={} #dictonary for search engine tree
for bokm in bookmarks:
bokm=re.sub('W_',' ',bokm).toupper() #filter out junk chars
ct = st; #cursor for traversing and building our tree
for c in bokm.split():
if not ct[c]: ct[c]={}
ct = ct[c]
至此,您有了一个包含书签的字符字典树。它只会从书签的开头找到匹配项,您可以修改算法以从任何单词开始的书签散列。一定要去print.pprint(st),亲眼看看它的美。
假设你现在正在搜索并输入单词"dog":
def search(word, st):
word=re.sub('W_',' ',word).toupper() #pass word through same filter!
ct = st #init our cursor
for c in word.split():
try:
ct = ct[c] #traverse the tree
except KeyError:
return False #pattern diverged, no match
return True #run out of word chars and every character matched. Found a match!
你几乎可以把它插入并开始使用。它不返回匹配的模式,您需要在搜索树分支的末尾记录它,并递归地遍历最后一个搜索词字符之后的子树,以打印所有匹配的书签。
PS:有许多可能的方法来实现单词搜索。这种方法的优点在于,无论书签文件大小如何,它几乎总是能够立即找到匹配项。第二个好处是可以修改search(),使其在键入时显示结果,每次按下键,因为它一个字符一个字符地遍历书签树,而且它会立即完成。
是的- Udacity的CS101是一个很好的起点。我在1-2年前完成了这门课。它可以指导您一步一步地使用python构建搜索引擎。以平均速度学习,你可以在2周内完成课程。在理解了这里所做的工作之后,您可以切换到书签输入。