2010年7月28日 星期三

StarDict 字典檔之使用、規格及初步處理

請於StarDict網站下載字典檔 ,以下為繁體字典檔下載位置
http://www.huzheng.org/stardict-iso/stardict-dic/zh_TW/
假設我們要下載的檔案路徑如下
http://www.huzheng.org/stardict-iso/stardict-dic/zh_TW/stardict-oxford-big5-2.4.2.tar.bz2

stardict-oxford-big5-2.4.2.tar.bz2
附檔名 .bz2 可直接用WinRAR解壓縮,請注意解壓縮時,winrar對於有簡體的文字時,壓縮會產生錯誤,請先改回正體字

解壓縮後會產生三個檔案,如下
1. oxford-big5.ifo
2. oxford-big5.idx (字典索引檔)
3. oxford-big5.dict.dz (字典內容檔)

序號1不用管,只處理2. 3.即可。
3.oxford-big5.dict.dz,請再用7Zip這個免費軟體,解壓縮
會解出oxford-big5.dict這個檔案,接下來才可以用程式處理。

Stradict檔案格式如下

oxford-big5.idx
-------------------------------------------------------------------------------
檔案內容的排列格式如下,每個單字均依照以下格式編排。
utf8 charset

word_str + '\0' + word_data_offset(4bytes =>32bit) + word_data_size(4bytes =>32bit)

單字 + '\0' + 單字所在的資料起始位置 (4bytes =>32bit) + 單字所含的資料量 (4bytes =>32bit)

請注意,在讀取word_data_offset及 word_data_size必須注意Big Endian與Little Endian的轉換(兩個互為顛倒),取出值才會正確。
例如: ABCD ->DCBA

http://jyhshin.pixnet.net/blog/post/26587992
http://tw.myblog.yahoo.com/jw!oK9tZceCFQNXvuvgM5.r4fgC0css/article?mid=2052&prev=2053&next=2051
http://junxian-huang.blogspot.com/2008/10/big-endian-vs-little-endian.html

2的1次方=1
2的8次方=256
2的16次方=65536
2的32次方=16777216

位元往右移1,等於32

若用vb的BinaryReader的ReadByte方法,第一個讀取的位元
pos= Br.ReadByte() * 16777216 + Br.ReadByte() * 65536 + Br.ReadByte() * 256 + Br.ReadByte()

vb每執行ReadByte方法,讀取位置會自動往下一個Byte

oxford-big5.dict
-------------------------------------------------------------------------------
由oxford-big5.idx 取得相關的資料後,可以先存自定結構或類別中。
再逐byte去取得相關的內容

1 則留言:

追蹤者