cht電腦資訊文書排版
adm Find login register

中文排序的問題

本人已不在此站活動
1 中文排序的問題
Promote 0 Bookmark 02007-12-19quote  

中文排序一直有點頭疼。

Big-5 碼是按筆劃排,但是次常用字會排在後面,也就是說筆劃少的次常用字,反而會排在筆劃多的常用字後面,例如『万』會排在『籲』後面去。

Unicode 則是依部首排,部首相同的才依筆劃數來排,這也不符合我們的需求。例如『正』會排在『果』後面去。 我們一般文書處理上,需要的是依筆畫數來排序。

這在什麼地方要用到呢?就是書籍索引及參考文獻要用到。

我目前已依 Unihan.txt 整理出各漢字的筆劃數(但不完整,只有 27921 個字的統計資料),目前可以針對漢字求得其筆劃後用來排序,效果還可以,只是我用 ruby + sqlite 來寫,速度上不是很快就是了。不知道大家有沒有現成的 solution?

我主要是要用在 makeindex/mkindex 的地方。

我暫時把一些不成熟(有的部份還沒有完成,有的部份寫得很爛)的小工具放在 CLE,有興趣的朋友,可以先玩看看:
ftp://cle.linux.org.tw/tex/cjk/tools/index

你要先安裝 ruby, rubygem-sqlite3(當然要先安裝 sqlite3), rubygem, ruby-iconv。

那個 cstrokes.db,是由 builddb.rb 從 Unihan.txt 來建立的,你也可以自行建立。adddb.rb/deldb.rb 可增刪這個資料庫內容。資料庫的結構可以參考原始碼的內容。放心,我是程式低能兒,不會寫複雜的東西。Very Happy

strokes.rb 可以計算某個字的筆劃數。chsort.rb 可以做中文排序(按筆劃數來排)。當然索引的部份尚需努力。

bg5-sortb5.txt/bg5-sortu8.txt 是一個排序的例子。你可以和系統上的 sort 比較一下排序的結果。

ps.由於我針對的是 LaTeX CJK 的中文索引,所以,將來完成後,可能無法用在一般的排序上,所以,目前先暫時放出來,大家來吐嘈一下。大笑

edited: 2
ychao
2
Promote 0 Bookmark 02007-10-31quote  

之前聽說「剎那工作坊」有個七萬字的筆劃組字字庫,據說來源是中研院。如果說License沒有問題的話,應該可以很容易轉出每個漢字的筆劃數,就可以做排序了。

本人已不在此站活動
3
Promote 0 Bookmark 02007-10-31quote  
ychao

之前聽說「剎那工作坊」有個七萬字的筆劃組字字庫,據說來源是中研院。如果說License沒有問題的話,應該可以很容易轉出每個漢字的筆劃數,就可以做排序了。

有問題的,可能是「部件」並非是一定一筆畫。所以,可能還是需要其他的統計資料才行。

我很早(應該近十年或出頭?)就有在接觸那些資料,但始終搞不清楚授權,所以,最後還是自己在土法練鋼。微笑

edited: 1
xaos2
4 中文排序的問題
Promote 0 Bookmark 02007-12-22quote  
LGJ

中文排序一直有點頭疼。

Big-5 碼是按筆劃排,但是次常用字會排在後面,也就是說筆劃少的次常用字,反而會排在筆劃多的常用字後面,例如『万』會排在『籲』後面去。

不知道這個有沒有用?

http://bbs.ecstart.com/viewthread.php?tid=15553&extra=page%3D1

看起來次、常用字的筆劃數,好像還是可以由 table 中查出來。

本人已不在此站活動
5 中文排序的問題
Promote 0 Bookmark 02007-12-22quote  
xaos2

 

不知道這個有沒有用?

http://bbs.ecstart.com/viewthread.php?tid=15553&extra=page%3D1

看起來次、常用字的筆劃數,好像還是可以由 table 中查出來。

針對 big-5 碼是有用,但目前應付的是整個 Unicode 的漢字,不容易找出好的規則來使用。
 

本人已不在此站活動
6 xindy
Promote 0 Bookmark 02007-12-22quote  

其實 index 的問題,終極辦法是去使用 xindy

不過這個程式有點龐大,而且是使用我不熟悉的  CLISP,所以,我目前的做法是在抄捷徑,土法練鋼。

CC: Ruby
cht電腦資訊文書排版
adm Find login register
views:30934