現在能下載到的英語詞典軟件,沒有我想要的功能,而且不必要的功能一大堆。
作為一個會敲代碼的年輕人(慚愧,目前還不敢稱自己是程序員),其優勢在于碰到這種情況,可以定制一個自己用的英語詞典!
“毛主席說:沒有條件,創造條件。”——考研數學老師說的(逃
功能
那么我想要的英語詞典是什么樣的呢?一個單詞應該包括:
- 單詞本身(不需要詞性的變化)
- 音標(只要英音)
- 柯林斯高階的英英解釋。這個英英解釋可有學問了:
- 每一個英英解釋的句子都有一句中文翻譯
- 每一個英英解釋對應一個能大致表達這個解釋的中文單詞
- 每一個英英解釋都有一個例句
- 例句也有中文翻譯
- 可以修改單詞的解釋
- 英英解釋不能修改
- 可以以單詞卡片的形式快速瀏覽單詞
等把以上功能完善了,會補充網絡功能。看看會不會有其他人用吧,畢竟那么多的詞,總不能讓我自己一個個翻譯吧....
目前想到的是:單詞評論,單詞修改提交到服務器詞庫,查看修改記錄
步驟
如果要做的話,可以分為這幾步:
- 找個地方獲取柯林斯高階的英英解釋及例句
- 使用網絡搜索把英英解釋和例句翻譯成中文。不知道那些在線詞典們給不給力,能獲取到的話就好了
- 獲取對應中文詞語
- 提供單詞編輯功能
- 單詞本導出功能
過程
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官方是不推薦這種做法的,但我還是強行把它實現出來了。修改之后點擊保存即可保存修改到數據庫里。
$$
先寫到這,明天繼續
文章列表