快紀 | 網誌 | 討論區 | LDP | CLDP
CLE 論壇 首頁 CLE 論壇
任何跟中文化相關的議題都可在此討論
 
 CLECLE 首頁  常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 RDF 我的最愛我的最愛  個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

中文排序的問題

 
發表新主題   回覆主題    CLE 論壇 首頁 -> 文書排版
加到我的最愛 :: 上一篇主題 :: 下一篇主題  
發表人 內容
EdwardGJLee
工友


註冊時間: 2004-08-25
文章: 660
來自: 鄉下

發表發表於: 星期四 九月 13, 2007 12:24 am    文章主題: 中文排序的問題 引言回覆

中文排序一直有點頭疼。

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

Unicode 則是依部首排,部首相同的才依筆劃數來排,這也不符合我們的需求。例如『正』會排在『果』後面去。

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

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

我主要是要用在 makeindex/mkindex 的地方。
_________________
L.G.J.
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
EdwardGJLee
工友


註冊時間: 2004-08-25
文章: 660
來自: 鄉下

發表發表於: 星期四 九月 13, 2007 10:31 pm    文章主題: Re: 中文排序的問題 引言回覆

我暫時把一些不成熟(有的部份還沒有完成,有的部份寫得很爛)的小工具放在 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 比較一下排序的結果。
_________________
L.G.J.
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
EdwardGJLee
工友


註冊時間: 2004-08-25
文章: 660
來自: 鄉下

發表發表於: 星期五 九月 14, 2007 7:33 pm    文章主題: Re: 中文排序的問題 引言回覆

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

請更新
代碼:
bg5-sortb5.txt, bg5-sortu8.txt, chsort.rb
這三個檔,目前的芻型已經出來了(尚未完成)。

底下我說明一下 Big-5 環境的情形(UTF-8 環境一樣,程式會自動判斷 locale):
代碼:
edt1023@lgj ~/MyPro/ruby/strokes$ cat bg5-sortb5.txt

\LaTeX
\begin{document}
\end{document}
\documentclass
\linespread


another test.



% comments

strokes


$ math mode

This is a test.


Strokes

我們使用系統上的 sort 來排序的話,結果會是:
代碼:
edt1023@lgj ~/MyPro/ruby/strokes$ sort bg5-sortb5.txt
$ math mode
Strokes
This is a test.
\LaTeX
\begin{document}
\documentclass
\end{document}
\linespread
another test.
strokes












其中中文的部份,筆劃少的「万」反而排到後面去了,英文的部份,大小寫分開了(一般索引,大小寫是排在一起的)。現在我們用 chsort.rb 來排看看:
代碼:
edt1023@lgj ~/MyPro/ruby/strokes$ ./chsort.rb bg5-sortb5.txt
$ math mode
% comments
\LaTeX
\begin{document}
\documentclass
\end{document}
\linespread
another test.
strokes
Strokes
This is a test.












這才是我們要的,符號排在前,後面才是正常的英文字母,再來才是漢字。
_________________
L.G.J.
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
從之前的文章開始顯示:   
發表新主題   回覆主題    CLE 論壇 首頁 -> 文書排版 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票


Powered by phpBB 2.0.17 © 2001, 2002 phpBB Group
正體中文語系由 phpbb-tw 維護製作