基本的本地搜索引擎-Python

Vestergaardish

这是我大学的一项工作,我必须使用Python 2.7.10对基本搜索引擎进行编程。

我的搜索引擎需要查看计算机上文件夹中的文档集合,打开它们,去除标点符号,将所有内容都转换为小写,并为文档中的每个标记创建一个反向索引。索引将被存储为字典,其中键作为令牌,值存储在包含令牌的文档列表中。示例:在文档1,文档2和文档5中找到标记“æble”。然后,用户应该只能键入一个单词,然后程序应获取包含该单词的文档列表。

我使用os,编解码器和sys模块。

首先,我想定义我的功能。我从定义程序将用来打开文档并同时使其小写的功能开始。稍后将在该程序中通过raw_input指定路径。

def open_doc(path):
    docfile = codecs.open(path, 'r', encoding='utf-8')
    doclist = docfile.read().lower().split()
    docfile.close()
    return doclist

然后,我可以使用功能对单个单词进行标记化,然后将其应用于用户查询。

def tokenize(word):
    tokenword = word.strip(',.-?!=()')
    return tokenword

现在,更多的标记化。在这里,我尝试将我的标记化功能附加到将包含不同文档的字典中。

def tokedict(dict):
    tokenizeddict = {}
    for key in dict:
        tokenizeddict[key] = []
        for item in dict[key]:
            tokenizeddict[key].append(tokenize(item))
    return tokenizeddict

现在,我有了一个应该反转索引的函数。值将被转换为键,而键将被转换为值。

def invert_dict(d):
    inverse = dict()
    for key in d:
        val = d[key]
        if val not in inverse:
            inverse[val] = [key]
        else:
            inverse[val].append(key)
    return inverse

我认为这按预期工作。

因此,这是我的主程序必须调用的主要功能。当用户打开程序时,将提示用户选择到存储文档的文件夹的路径,以定义名为“ path”的变量。

path = raw_input('please specify the path to the folder you would like to search in: ')

然后,程序将为使用上述函数创建的索引创建字典。

一,空索引

index = dict()

然后该函数使用来自所选路径的文档填充索引。

for document in os.listdir(path):
    index[str(document)] = open_doc(path+document)

基本上,这就是我到目前为止的工作。我有点喜欢这个程序。我有搜索功能,由于某种原因,它甚至无法正常工作。

内容如下:

def User_search():
    searchword = raw_input('Please type 1 word to search for: ')
    searchword = searchword.lower()
    searchword = searchword.strip(',.!?()=')
    return searchword

因此,我现在的最后一个问题是:我如何连接这些零件并最终得到一个可以执行以下功能的程序:

通过用户Tokenize给定的路径扫描文件夹,并使文件夹中的文档内容小写-生成反向索引-让用户首先选择文件夹的路径;然后让用户输入搜索词-以正确的顺序调用函数-给出包含(包含某种形式的)包含搜索词的文档列表的结果。

我想最后一个功能将是这样的:

for key in inverse:
    if searchword in key
        print 'Your searchword' + searchword + 'has been found in the following documents' + value
    if searchword not in key
        print 'no documents have been found containing your searchword'

但这只是一个想法。

我期待收到任何形式的帮助。我花了一个多小时才输入这个问题,所以我希望对您来说很容易理解。如果没有,我将尽力澄清。

最亲切的问候

您的语法错误在这里:

tokenizeddict[key].append(tokenize(item)

是因为末尾缺少括号。应该:

tokenizeddict[key].append(tokenize(item))

另外,“ dict”是python类型,而不是适当的变量名-我一定会重命名。

您正builtin_function_or_method has no attribute 'strip'因为如此:

searchword = searchword.lower

您只是在访问方法,而不是实际调用它。您想做:

searchword = searchword.lower()

我希望这有帮助。仅供参考,将来将其分解为有关特定错误的单个问题会更合适。解决这些错误后,如果您想从整体上讨论程序,请查看CodeReview。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章