【问题标题】:Python 2.7: Persisting search and indexingPython 2.7:持久搜索和索引
【发布时间】:2014-10-23 15:59:56
【问题描述】:

我编写了一个小型“搜索引擎”,用于查找目录及其子目录中的所有文本文件 - 我可以在其中编辑代码,但我认为这对我的问题没有必要。

它通过以如下格式创建字典来工作:

term_frequency = {'file1' : { 'WORD1' : 1, 'WORD2' : 2, 'WORD3' : 3}}
                 {'file2' : { 'WORD1' : 1, 'WORD3' : 3, 'WORD4' : 4}}
                 ...continues with all the files it has found...

根据收集到的信息,它会创建第二个字典,如下所示:

document_frequency = {'WORD1' : ['file1', 'file2'....],
                      'WORD2' : ['file1',............],
                        ....every found word..........]}

term_frequency dictionary 的目的是保存某个单词在该文件中使用了多少次的数据,document_frequency 表示该单词在多少文档中已被使用。

然后,当给定一个单词时,它会通过tf/df 计算每个文件的相关性,并以文件的相关性降序列出non-zero 值。

例如:

file1 : 0.75
file2 : 0.5

我知道这是 tf-idf 的一个非常简单的表示,但我是 python 和编程的新手(2 周)并且对这一切都很熟悉。

对于冗长的介绍感到抱歉,但我觉得它与问题相关......这让我明白了:

如何制作一个将这些字典保存在文件中的索引器,然后让“搜索器”从文件中读取这些字典。因为现在的问题是,每次您要查找不同的单词时,都必须再次读取所有文件并一遍又一遍地制作相同的 2 个字典。

【问题讨论】:

  • 我想你正在寻找pickle你的字典。
  • @will 啊,我不知道为什么,但我无法访问 'docs.python' 上的任何页面,我的互联网运行良好,它只是讨厌 wesbite ......真令人沮丧:/
  • 糟糕。好吧,看来我被打败了。对不起。
  • @Phillammon dw,非常感谢您的帮助,我会在其他计算机上尝试一下
  • 如果有帮助的话,我已经为我的答案添加了一个实际答案。

标签: python search dictionary indexing


【解决方案1】:

The pickle (and for that matter cPickle) library 是你的朋友。通过使用pickle.dump(),您可以将整个字典变成一个文件,稍后可以通过pickle.load() 读取。

在这种情况下,你可以使用这样的东西:

import pickle
termfile = open('terms.pkl', 'wb')
documentfile = open('documents.pkl', 'wb')
pickle.dump(term_frequency, termfile)
pickle.dump(document_frequency, documentfile)
termfile.close()
documentfile.close()

然后像这样读回来:

termfile = open('terms.pkl', 'rb')
documentfile = open('documents.pkl', 'rb')
term_frequency = pickle.load(termfile)
document_frequency = pickle.load(documentfile)
termfile.close()
documentfile.close()

【讨论】:

  • 我已经实现了该代码,第一部分运行良好,但是当我尝试在另一个脚本中加载字典时,它返回一个 EOF 错误,我不知道为什么
猜你喜欢
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 2019-03-05
  • 1970-01-01
相关资源
最近更新 更多