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

时间:2010-05-20 07:39:11

标签: python django dictionary

我想使用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内置字典对象来完成这项工作吗?这样字典对象的键就是英文单词,值就是解释。在性能方面这样可以吗?或者我是否必须创建自己的树对象以加快搜索速度?或任何正确处理此工作的现有包裹?

非常感谢你。

4 个答案:

答案 0 :(得分:9)

您可能需要查看http://www.nltk.org/ 您可以获得大量单词及其定义,而无需担心数据库的实现细节。如果你是所有这些东西的新手,至少可以让你上去,然后当你有一个工作版本时,开始加入数据库。

以下是如何从该套餐中获取“狗”的所有可用含义的快速摘录:

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

答案 1 :(得分:3)

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

你应该选择django'搜索'应用程序。很多人建议使用haystack

What's the best Django search app?

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

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

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

我想这一切都取决于你想要达到的复杂程度,但可以有非常简单的解决方案。

编辑:

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

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

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

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

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一样好:你google'python json'你会找到官方文档,因为用于写/读json的库是标准python lib的一部分!同意使用xml和csv ...

答案 2 :(得分:1)

字典应该非常小(按照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来保存字典(因此读取速度更快),或者将其全部放在数据库中。这取决于你。

答案 3 :(得分:1)

import React, { useState } from 'react';
import {
  Collapse,
  Navbar,
  NavbarToggler,
  NavbarBrand,
  Nav,
  NavItem,
  NavLink,
  UncontrolledDropdown,
  DropdownToggle,
  DropdownMenu,
  DropdownItem } from 'reactstrap';



const Menu = (props) => {
  const [isOpen, setIsOpen] = useState(false);

  const toggle = () => setIsOpen(!isOpen);

  return (
    <div>
      <Navbar color="light">
        <NavbarBrand href="/">reactstrap</NavbarBrand>
        <NavbarToggler onClick={toggle} />
        <Collapse isOpen={isOpen} navbar>
          <Nav className="ml-auto" navbar>
            <NavItem>
              <NavLink href="/components/">Components</NavLink>
            </NavItem>
            <NavItem>
              <NavLink href="https://github.com/reactstrap/reactstrap">GitHub</NavLink>
            </NavItem>
            <UncontrolledDropdown nav inNavbar>
              <DropdownToggle nav caret>
                Options
              </DropdownToggle>
              <DropdownMenu right>
                <DropdownItem>
                  Option 1
                </DropdownItem>
                <DropdownItem>
                  Option 2
                </DropdownItem>
                <DropdownItem divider />
                <DropdownItem>
                  Reset
                </DropdownItem>
              </DropdownMenu>
            </UncontrolledDropdown>
          </Nav>
        </Collapse>
      </Navbar>
    </div>
  );
}

export default Menu;