文章出處

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官方是不推薦這種做法的,但我還是強行把它實現出來了。修改之后點擊保存即可保存修改到數據庫里。
$$

先寫到這,明天繼續


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()