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

Posted

技术标签:

【中文标题】如何使用 python (django) 创建英语词典应用程序?【英文标题】:how to create english language dictionary application with python (django)? 【发布时间】:2011-02-21 17:50:34 【问题描述】:

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

类似于http://dictionary.reference.com/。

PS:字典没有存储在数据库中。它存储在文本文件或 gunzip 文件中。可以从这个 URL 下载免费的英语词典文件:dicts.info/dictionaries.php

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

word1 explanation for word1 

word2 explanation for word2 

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

我的问题是

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

(2) 如果第一个问题的答案是否定的。我应该遵循哪种算法来创建这样的 Web 应用程序?我可以简单地使用 python 内置字典对象来完成这项工作吗?这样字典对象的键就是英文单词,值就是解释。这在性能方面可以吗?或者我是否必须创建自己的树对象来加快搜索速度?或任何现有的可以正确处理这项工作的软件包?

非常感谢。

【问题讨论】:

PS:字典没有存储在数据库中。它存储在文本文件或 gunzip 文件中。可以从这个 URL 下载免费的英语词典文件:dicts.info/dictionaries.php。最简单的免费词典文件格式如下: word1 解释 word1 word2 解释 word2 还有一些其他格式。但所有内容都存储在文本文件或 text.gz 文件中。 或者是更轻量的json格式。 【参考方案1】:

您可能想查看http://www.nltk.org/ 您可以获得很多单词及其定义,而不必担心数据库的实现细节。如果您是所有这些东西的新手,那么至少让您上手并开始工作会很有用,然后当您有一个工作版本时,开始放入数据库。

下面是如何从该包中获取“狗”的所有可用含义的快速 sn-p:

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

【讨论】:

非常感谢您推荐这个 python 模块。很有意思。我会看看它。我想我可以查看他们的源代码,了解并了解他们如何处理单词查找。【参考方案2】:

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

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

What's the best Django search app?

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

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

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

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

编辑:

如果字典来自文件,那么很难说,你有很多解决方案。

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

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

1) 首先创建你的 Django models,这样你就会知道你需要什么数据,你的字段的名称等等......例如:

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

2) 您提供的链接上的某些文件似乎是 csv 格式的(您似乎也可以将它们放在 xml 中)。使用标准库中的csv 模块,您可以将这些文件提取到python。

3) 然后使用 json 或 yaml python 库,将这些文件转储回不同的格式(json 或 yaml),如 initial data for your model 中所述。 magic您的初始数据已准备就绪!

PS:python 的好处:你谷歌“python json”,你会找到官方文档,因为用于编写/读取 json 的库是标准 python 库的一部分! Idem 与 xml 和 csv ...

【讨论】:

我还是 python 和 django 的新手。非常感谢您的提示。 :) 亲爱的 sebpiq,你能解释一下如何将它们迁移到数据库吗?我还是python的新手。谢谢。 非常感谢关于迁移到数据库的额外回复。 :)【参考方案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来保存字典(这样读起来更快),或者把它全部放在数据库中。这取决于你。

【讨论】:

我还是 python 和 django 的新手。非常感谢您的提示。 :) 好的,接下来是一些快速提示:字典( 或 dict())的查找速度非常快。列表([] 或 list())的搜索速度非常慢。你需要知道这两种数据结构。将东西放入模块名称空间意味着每次 django 进程运行时都构建字典,这应该比调用函数的频率低。另外,pickle 是在硬盘上存储 python 对象的好方法。 感谢您的新提示。我可以再问一个关于单词查找的问题吗?正如您所提到的,python 内置字典的查找速度很快。使用带有pickle的内置词典进行单词查找是否足够且快速?它可以处理大型单词数据库,例如:200MB 或更多吗?或者使用 Haystack + Xapian 搜索引擎做 sebpiq 提到的查找工作会更好吗?由于我在这方面没有太多经验,这就是为什么我在这里问并想知道我应该从哪里开始。选择正确的方向/方法将节省大量时间。 ^_^ 非常感谢。【参考方案4】:
# importing pandas module  
import pandas as pd 

# reading csv file from url  
data = pd.read_csv("yourfilename.csv") 

# dropping null value columns to avoid errors 
data.dropna(inplace = True) 

# converting to dict 
data_dict = data.to_dict() 

# display 
data_dict 

【讨论】:

以上是关于如何使用 python (django) 创建英语词典应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 和 Python 中使用 JWT(JSON Web 令牌)来创建用于注册和登录的 REST API

python3.6下如何用Django1.9创建数据库报错

Day1-Python入门

博客基础_django_python从入门到实践_小结

编写你的第一个 Django 应用半成品

如何将py文件中的机器学习算法集成到django网站?