做个自己用的英语词典


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"?>

  
    bribe
    bra?b
    
      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.
      
      
      
He was being investigated for receiving bribes.
He was accused of bribing a senior bank official.
The government bribed the workers to be quiet.
      
    
  

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

匹配这些的正则式如下:

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

  • 发音:
    (.+?)

  • 所有解释:

        
    COBUILD Advanced British English Dictionary
    (.+?)
    • 柯林斯在解释中会对当前单词加粗,这里将其匹配出来以转换为用#包围:
      (.+?)
    • 获取单个解释:
      (.+?\\.)(.+?)
  • 获取例句:
    (.+?)
  • 去除剩余的标签:
    <.+?>
  • 以上使用了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官方是不推荐这种做法的,但我还是强行把它实现出来了。修改之后点击保存即可保存修改到数据库里。

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