Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python(django)创建英语词典应用程序?_Python_Django_Dictionary - Fatal编程技术网

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

如何使用python(django)创建英语词典应用程序?,python,django,dictionary,Python,Django,Dictionary,我想使用python(或django)创建一个在线词典应用程序 它将类似于 注:字典不存储在数据库中。它存储在文本文件或gunzip文件中。可以从以下URL下载免费英语词典文件:dicts.info/dictionaries.php 最简单的免费字典文件格式为: word1 explanation for word1 word2 explanation for word2 还有其他一些格式。但所有这些都存储在文本文件或text.gz文件中 我的问题是 (1) 是否有任何现有的开源pyth

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

它将类似于


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

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

word1 explanation for word1 

word2 explanation for word2 
还有其他一些格式。但所有这些都存储在文本文件或text.gz文件中

我的问题是

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

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


多谢各位

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

您更应该关注django“搜索”应用程序。许多人建议使用干草堆:

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

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

DictEntry.objects.get(keyword=`something`).definition
我想这一切都取决于你想要达到的复杂程度,但也可以有非常简单的解决方案

编辑:

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

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

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

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

class DictEntry(Model):
    keyword = CharField(max_length=100)
    definition = CharField(max_length=100)
2) 您提供的链接上的一些文件似乎是csv格式的(您也可以使用xml)。使用标准库中的模块,您可以将这些文件提取到python中

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


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

字典应该非常小(按IT标准)

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

好:

坏的


或者您可以使用pickle保存字典(以便更快地读入),或者将其全部放入数据库中。这取决于您。

您可能想退房 您可以获得大量单词及其定义,而不必担心数据库的实现细节。如果你对所有这些东西都不熟悉,至少让你开始工作会很有用,然后当你有了一个工作版本,开始放进一个数据库

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

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

注:字典不存储在数据库中。它存储在文本文件或gunzip文件中。可以从此URL下载免费英语词典文件:。最简单的免费字典文件的格式是:word1解释word1 word2解释word2还有一些其他格式。但是所有的文件都存储在文本文件或text.gz文件中,或者存储在json格式中,这种格式要轻得多。我对python和django还是比较陌生。非常感谢您的提示。:)亲爱的sebpiq,您能再解释一下如何将它们迁移到数据库吗?我对python还是新手。谢谢。非常感谢关于迁移到数据库的更多回复。:)我对python和django还是新手。非常感谢您的提示。:)好的,下面是一些快速提示:字典({}或dict())的查找速度非常快。列表([]或列表())搜索速度非常慢。您需要了解这两种数据结构。将内容放入模块名称空间意味着每次django进程运行时都要构建字典,这应该比调用函数的次数少。另外,pickle是在硬盘上存储python对象的一种好方法。谢谢你的新提示。我能再问一个关于查词的问题吗?正如您所提到的,python内置字典可以快速查找。使用内置字典和pickle进行单词查找足够快吗?它可以处理一个大的字数据库,例如:200MB或更多?还是使用Haystack+Xapian搜索引擎来完成sebpiq提到的查找工作更好?因为我在这方面没有太多的经验,这就是为什么我在这里问,我想知道我应该从哪里开始。选择正确的方向/方法将节省大量时间。^非常感谢。非常感谢您推荐这个python模块。非常有趣。我来看看。我想我可以查看他们的源代码,了解他们如何处理单词查找。
 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'
from nltk.corpus import wordnet
for word_meaning in wordnet.synsets('dog'):
    print word_meaning.definition
# 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