zoukankan      html  css  js  c++  java
  • 做个自己用的英语词典

    Github项目链接

    现在能下载到的英语词典软件,没有我想要的功能,而且不必要的功能一大堆。
    作为一个会敲代码的年轻人(惭愧,目前还不敢称自己是程序员),其优势在于碰到这种情况,可以定制一个自己用的英语词典!

    “毛主席说:没有条件,创造条件。”——考研数学老师说的(逃

    功能

    那么我想要的英语词典是什么样的呢?一个单词应该包括:

    • 单词本身(不需要词性的变化)
    • 音标(只要英音)
    • 柯林斯高阶的英英解释。这个英英解释可有学问了:
      • 每一个英英解释的句子都有一句中文翻译
      • 每一个英英解释对应一个能大致表达这个解释的中文单词
      • 每一个英英解释都有一个例句
      • 例句也有中文翻译
    • 可以修改单词的解释
      • 英英解释不能修改
    • 可以以单词卡片的形式快速浏览单词

    等把以上功能完善了,会补充网络功能。看看会不会有其他人用吧,毕竟那么多的词,总不能让我自己一个个翻译吧....
    目前想到的是:单词评论,单词修改提交到服务器词库,查看修改记录

    步骤

    如果要做的话,可以分为这几步:

    1. 找个地方获取柯林斯高阶的英英解释及例句
    2. 使用网络搜索把英英解释和例句翻译成中文。不知道那些在线词典们给不给力,能获取到的话就好了
    3. 获取对应中文词语
    4. 提供单词编辑功能
    5. 单词本导出功能

    过程

    1. 获取英英解释及例句:

    一开始的思路是获取数据包解析,看看能不能获取柯林斯官方网站的API。这个是很早之前的想法,那时候没获取成功,现在就跳过了。
    接着是下载应用商店里的词典软件,然后进入文件浏览器,把它的词库拿来用(有道词典的柯林斯释义不能下载到本地,悲伤= =)。但是我发现得到的词库不会用!它们使用的是一种文件系统,而不是简单的数据库。google了好久,未果,弃之。
    前几天,偶然之间发现柯林斯官网查单词时,其URL有特点。
    比如我要查 account 这个单词的时候,它的URL是这样的:
    http://www.collinsdictionary.com/dictionary/english/account
    这可把我乐坏了。只要把URL最后的那个单词换成我想查的单词,就能获取结果了。
    于是我赶紧的把我单词表中的考研单词取出前1000多个来实验。

    这些词本来是在Excel中的,因为之前为了把它导到有道单词本中,写了段脚本将其转成xml。

    从柯林斯官网获取的单词经过转换后的xml是这样的:

    <?xml version="1.0" encoding="utf-8"?>
    <wordbook>
      <item>
        <word>bribe</word>
        <pron>braɪb</pron>
        <def def_id="0">
          <en>A #bribe# is a sum of money or something valuable that one person offers or gives to another in order to persuade him or her to do something.</en>
          <cn />
          <cnword />
          <exmp>
    He was being investigated for receiving bribes.
    He was accused of bribing a senior bank official.
    The government bribed the workers to be quiet.
          </exmp>
        </def>
      </item>
    </wordbook>
    

    <cn>是英英解释的中文翻译,<cnword>是对应的中文词语。#包围起来的是柯林斯官方加粗的词,这里我打算在应用里面改变其颜色。

    匹配这些的正则式如下:

    • 单词:
      http://www.collinsdictionary.com/dictionary/english/(.+?)"

    • 发音:
      <span class=" pron".+?>(.+?)</?span

    • 所有解释:

          <div class="dictname">COBUILD Advanced British English Dictionary</div>(.+?)<div class="content-box
      
      • 柯林斯在解释中会对当前单词加粗,这里将其匹配出来以转换为用#包围:
        <span class=" hi" rend="b">(.+?)</span>
      • 获取单个解释:
        <span class=" def">(.+?\.)</span>(.+?)</div>
      • 获取例句:
        <span> ⇒ </span>(.+?)</span>
      • 去除剩余的标签:
        <.+?>

    以上使用了C#来操作

    2. Android端查询及显示释义

    本来想直接读取xml然后查询,后来发现几个xml库没有提供这种功能。是因为xml本来就不是这样使用的么= =
    于是,就将xml导入到数据库里面。用的是ORMLite框架。

    目前做单机版的,就这样处理了。以后如有可能,就搬到服务器上面去。

    建了一张表,包含以下内容:

    单词,英音,英英释义,中文释义,中文词语,例句

    想想数据量不会太大,就直接冗余英音这一列了。

    找了个卡片View,作为listview的item。

    最终做成在主页面输入要查询的单词,点击Search之后,进入单词显示页面。
    该页面上面是单词和发音,下面是Listview,每一个释义一个item。

    3. Android BaseActivity (跑偏了)

    之后就是做编辑功能。
    一开始考虑长按Listview的项,打开上下文菜单,但是觉得这样有点麻烦。长按 这个动作我不太喜欢,而且一次只能修改一个释义。
    干脆做个进入编辑状态的按钮吧。
    可是要把 编辑 按钮放哪里呢?
    一开始是想在页面底部做个工具栏,但是觉得太占位置了,就决定放在右上角菜单栏里面。
    做完右上角菜单后(还没实现功能),想着顺便把侧滑菜单(Navigation Drawer)一起做了。
    与此同时觉得在每个页面都写这两者太麻烦,干脆做个BaseActivity,让每个页面都继承这个Activity。
    这一步花了一个晚上的时间啊T^T 心累。

    4. 修改单词释义

    编辑的按钮虽然有了,但是点击之后要怎么处理,成了一个问题。

    • 直接在这个页面里,把TextView改成EditView。点击按钮后设置成可修改的状态。
    • 进入另一个专门用于编辑的页面。

    第一个稍微尝试了一下,好像实现起来有点麻烦。
    第二个应该会简单点,但是又多了个页面。
    如果可以的话,还是希望能在原来的界面上进行编辑。但是如果实在不行,就创建个新页面吧。

    ^^
    20160829
    之前把修改释义的问题解决了。拖了好久才来更新。
    我是实现了点击按钮之后,可以直接修改的功能。在stackoverflow上查了不少资料。Android官方是不推荐这种做法的,但我还是强行把它实现出来了。修改之后点击保存即可保存修改到数据库里。

    [ ##先写到这,明天继续]

  • 相关阅读:
    Django_rest_framework
    Django之FBV / CBV和中间件
    数据库之MySQL补充
    数据库之Python操作MySQL
    数据库之MySQL进阶
    数据库之初识MySQL
    2-3、配置Filebeat
    2-2、安装Filebeat
    2-1、FileBeat入门
    5、Filebeat工作原理
  • 原文地址:https://www.cnblogs.com/schaepher/p/5634529.html
Copyright © 2011-2022 走看看