1

我有一个看起来像这样的人类字典文件eng.dic(该列表中有近十亿个单词的图像)。而且我必须经常运行不同的单词查询。

apple
pear
foo
bar
foo bar
dictionary
sentence

我有一个字符串让我们说“foo-bar”,是否有更好(更有效的方法)搜索该文件以查看它是否存在,如果它返回存在,如果它不存在,附加字典文件

dic_file = open('en_dic', 'ra', 'utf8')
query = "foo-bar"
wordlist = list(dic_file.readlines().replace(" ","-"))
en_dic = map(str.strip, wordlist)

if query in en_dic:
    return 1
else:
    print>>dic_file, query

python中是否有任何内置的搜索功能?或任何我可以导入以运行此类搜索而无需太多开销的库?

4

3 回答 3

2

正如我已经提到的,当文件的大小很大时遍历整个文件并不是一个好主意。相反,您应该使用已建立的解决方案,并且:

  1. 索引文档中的单词,
  2. 以适当的形式存储索引结果(我建议使用数据库),
  3. 检查文件中是否存在单词(通过检查数据库),
  4. 如果不存在,将其添加到文件和数据库中,

将数据存储在数据库中确实比尝试重新发明轮子要高效得多。如果您将使用 SQLite,数据库也将是一个文件,因此设置过程非常简单。

因此,我再次建议将单词存储在 SQLite 数据库中,并在您想要检查该单词是否存在于文件中时进行查询,然后在添加时更新它

要阅读有关解决方案的更多信息,请参阅此问题的答案:

索引文档中单词的最有效方法

于 2012-09-17T06:30:47.050 回答
0

最有效的方法取决于您将使用此字典执行的最频繁操作。

如果您每次都需要读取文件,您可以使用while循环读取文件逐行,直到结果是您在文件末尾的单词。如果您有多个可以同时更新文件的并发工作人员,这是必要的。

如果您不需要每次都读取文件(例如,您只有一个使用字典的进程),您绝对可以编写更有效的实现:1)将所有行读入set(而不是list),2)对于每个“新" word 执行两种操作 - 更新set操作add并将 word 写入文件。

于 2012-09-17T06:07:50.757 回答
0

如果它是“相当大”的文件,则按顺序访问这些行并且不要将整个文件读入内存:

with open('largeFile', 'r') as inF:
 for line in inF:
    if 'myString' in line:
        # do_something
于 2012-09-17T06:09:43.703 回答