| 加到我的最愛 :: 上一篇主題 :: 下一篇主題 |
| 發表人 |
內容 |
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 可增刪這個資料庫內容。資料庫的結構可以參考原始碼的內容。放心,我是程式低能兒,不會寫複雜的東西。
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: 中文排序的問題 |
|
|
請更新 | 代碼: | | 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. |
|
| 回頂端 |
|
 |
|