做个自己用的英语词典

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官方是不推荐这种做法的,但我还是强行把它实现出来了。修改之后点击保存即可保存修改到数据库里。

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

posted @ 2016-07-01 23:21  schaepher  阅读(6713)  评论(6编辑  收藏  举报