如何用python(Django)创建英语词典应用程序?

2024-04-26 13:25:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用python(或django)创建一个在线词典应用程序。

它将类似于http://dictionary.reference.com/

注:字典不存储在数据库中。它存储在文本文件或gunzip文件中。免费英语词典文件可以从以下网址下载:dicts.info/dictionaries.php。

最简单的免费字典文件格式如下:

word1 explanation for word1 

word2 explanation for word2 

还有其他一些格式。但它们都存储在文本文件或text.gz文件中

我的问题是

(1)是否有任何现有的开源python包、模块或应用程序实现了我可以使用或学习的功能?

(2)如果第一个问题的答案是“否”,那么创建这样的web应用程序应该遵循哪种算法?我可以简单地使用python内置的dictionary对象来完成这项工作吗?这样,dictionary对象的键将是英语单词,值将是解释。从性能上来说可以吗?或者我必须创建自己的树对象来加快搜索速度?或者任何处理这项工作的现有包?

非常感谢。


Tags: 文件对象djangocom应用程序httpfordictionary
3条回答

字典应该很小(按IT标准)。

为了提高性能,请确保字典构建在模块命名空间中:

好的:

 # build the dictionary
 english_dict = dict()
 for line in open(dict_file):
     # however you process the file:
     word,def = line.split(',')

     # put it in the dictionary
     english_dict[word] = def

 def get_definition(word):
     # should use english_dict.get(word,'undefined')
     if word in english_dict:
         return english_dict[word]
     else:
         return 'no definition'

坏的

 def get_definition(word):

     # build the dictionary
     english_dict = dict()
     for line in open(dict_file):
         # however you process the file:
         word,def = line.split(',')

         # put it in the dictionary
         english_dict[word] = def

     if word in english_dict:
         return english_dict[word]
     else:
         return 'no definition'

或者可以使用pickle保存字典(这样读起来更快),或者将其全部放入数据库。这取决于你。

您可能想签出http://www.nltk.org/ 你可以得到很多单词和它们的定义,而不必担心数据库的实现细节。如果你对这些东西都不熟悉,那么至少让你振作起来,继续前进是很有用的,然后当你有了一个有效的版本,就开始建立一个数据库。

以下是如何从该软件包中获取“dog”的所有可用含义的快速片段:

from nltk.corpus import wordnet
for word_meaning in wordnet.synsets('dog'):
    print word_meaning.definition

我不知道你在说什么功能。如果您的意思是“从数据库中记录的词汇中搜索关键字”,那么python dictionnary不是一个可能的解决方案,因为您必须反序列化整个数据库才能进行搜索。

你应该关注一下django的“搜索”应用程序。很多人建议使用haystack

What's the best Django search app?

并使用此搜索引擎在数据库中查找一些关键字。

如果不想支持复杂的搜索,那么还可以在数据库中查询确切的关键字

DictEntry.objects.get(keyword=`something`).definition

我想这完全取决于你想要达到的复杂程度,但可能有非常简单的解决方案。

编辑:

如果这些措辞来自文件,那么很难说,你有很多解决方案。

如果文件很小,您确实可以在启动服务器时将其反序列化为字典,然后始终在同一实例中搜索(这样就不必对每个请求再次反序列化)。

如果文件真的很大,可以考虑将它们迁移到数据库中。

1)首先创建Django模型,这样您就知道您需要什么数据、字段的名称等等。。。例如:

class DictEntry(Model):
    keyword = CharField(max_length=100)
    definition = CharField(max_length=100)

2)看起来你提供的链接上的一些文件是csv格式的(看起来你也可以用xml格式)。使用标准库中的csv模块,可以将这些文件提取到python中。

3)然后使用json或yaml python库,将这些文件转储回initial data for your model中描述的不同格式(json或yaml)。并且魔术您的初始数据已经准备好了!

PS:python的好处是:你在google上搜索“python json”,你会找到官方文档,因为用于编写/读取json的库是标准python库的一部分!!!使用xml和csv的Idem。。。

相关问题 更多 >