再來個 ydict 附註 KK, DJ音標
- Posted by Beata on 八月 10th, 2007 filed in Software

幾個月前,我曾經製造過一份號稱附加上KK音標的 ydict,它的音標是從cdict 線上英漢字典那裡取下來的,可能因為我是使用 Hinet 的關係,連 giga 有時會耗去很多時間。而且由於這陣子字典使用頻率比較平常高,竟然意外發現,原來 cdict 字典的音標根本不是 KK 音標!難怪念一念總覺得哪裡怪怪的。
所以我又重改了一份附加 KK 音標的 ydict,不過這次則是直接根據奇摩字典的音標圖片去找相對應的文字輸出到終端機。所以不用再去拜訪等到老 giga 字典。
感謝Wiki,讓我找到國際音標的HTML實體名稱和通用名稱,不然我根本不知道那些奇妙文字該怎麼打。
一樣,我還是以好用又不手滑的的FourDollars Blog 出品 ydict為基礎,再動些手腳如此這般那樣…
Updated (2007-09-01):
非常感謝lancetw 的 提醒。
經過 lancetw 的指點後,已經順利解決了之前在查詢不到詞彙時所出現的 wide character 警告訊息。
-
# 找到第 8 行
-
use warnings;
-
# 後面加上
-
use Encode;
-
-
# 找到 150 行
-
# 取代掉它
-
# next if ($line =~ m{KK} && $line =~ m{DJ});
-
-
my $dir = ‘http://tw.yimg.com/i/tw/dictionary/pic’;
-
my $map = Encode::decode(‘utf8′, " æa: ɑ ʊɔɝəɚʌeɛŋ ʃʒ θð iɪuopbtdkfvszmnhlrwj`,g ḷṃṇ");
-
-
-
my $char = Encode::encode(’utf8′, substr($map, $1, 1));
-
my $fname = $1 < 10 ? "00$1" : $1 < 100 ? "0$1" : $1;
-
$line =~ s!<img[^>]*['"]$dir/$fname\.gif["'][^>]*>!$char!ig;
-
}
-
懶得改的話,這邊修改後的 ydict可以下載,不過因為 wordpress 不接受無副檔名的檔案上傳,所以看起來醜醜的,就要請各位自己修改一下檔名了。
註:
那個在terminal上看起來很像「ɚ」的其實是「ʊ」,就是通常與a合用為「aʊ」的那個字。如果覺得看不清楚容易誤解的話,或許可以考慮把它換成「u」,不過「u」這個字又有它自己的發音,真傷腦筋。
八月 22nd, 2007 at 10:51 上午
Hi:
我發現中文下去搜尋時,會一直查不到,
前一版的就沒這個問題。
不知道你會不會這樣呢?
感謝分享啦 : )
八月 24th, 2007 at 6:18 上午
恩,我沒有這樣的問題耶,還是能查得到。
倒是有個像這樣子的錯誤訊息一直沒辦法去除掉。
Wide character in print at /usr/share/perl5/LWP/Simple.pm line 169.
不過因為跟 perl 不是很熟的關係,只好放它去了…
八月 31st, 2007 at 11:54 下午
可以試試把 use encoding utf8; 去掉
九月 1st, 2007 at 12:53 上午
hi, lancetw
以我電腦的情況而言,如果沒加上 use encoding utf8; 的話,反而音標部份會出現亂碼導致看不清楚。
而加上之後,就只有在查詢不到該字時才會出現 wide character 訊息。
btw, 您網站的首頁真炫
九月 1st, 2007 at 3:39 上午
不加 use encoding utf8;
use warnings 改成 no warnings;
加個 use Encode;
157 行左右的 my $char = substr($map, $1, 1);
改成
$char = substr(Encode::decode(”utf8″,$map), $1, 1);
也許能修正亂碼問題
九月 1st, 2007 at 3:42 上午
最後一行的 $char 前頭少貼了 my
九月 1st, 2007 at 7:59 上午
It works!!
謝謝你幫我解決了那個刺目訊息。
果然高手就是高手,不一樣呀!:)
九月 1st, 2007 at 5:10 下午
剛發現只 decode 還是會有點問題 (ae 這個字顯示錯誤)
請在
$char = substr(Encode::decode(”utf8″,$map), $1, 1);
下方再加入一行
$char = Encode::encode(”utf8″,$char);
我不是高手,因為我不是很懂 perl 的寫法
九月 1st, 2007 at 5:24 下午
use warnings 改成 no warnings;
其實這行只是要不要顯示程式本身的警告,加入上面那行後,改回 use warnings 程式本身應該也不會出現警告,因為已經正確 encode 了。
九月 4th, 2007 at 4:51 下午
恩,的確是你說的那個方式比較好。
另外我發現把 decode $map 的部份提到迴圈之外會比較好,所以又改了…
my $map = Encode::decode('utf8', " ..map 的字串太長,在這省略...");
# ..... 省略一大段
my $char = Encode::encode('utf8', substr($map, $1, 1));
九月 4th, 2007 at 8:10 下午
的確改這樣比較好些
九月 13th, 2007 at 9:54 上午
太棒了,果然是高手!
這樣就多種需求,一次滿足了:p
九月 19th, 2007 at 1:02 下午
你好!!
看到你的WP Plugins有一个Comment-Reply,特别喜欢,可是已经没有继续开通留言,你自己也不会再继续更新了……
可是我还是想要安装这个插件,可是总是不得法,在option-discussion.php里面没有找到需要修改的第二段代码……
于是就乱了,不知道能不能帮忙???
谢谢谢谢!!!
十二月 12th, 2007 at 2:38 上午
台灣是世界上把英文當做必修外國語的國家裡,惟一「只使用」KK音標的國家。使得台灣人普遍不識另一個「萬國音標」系統。
在其他國家,萬國音標都是主流,KK音標雖不至於絕跡(部份紙本字典仍會標KK音標),但KK音標仍屬少見。
把KK音標引進台灣,且全面封殺其他音標的傢伙,是梁實秋。
一月 21st, 2008 at 2:24 上午
Can’t locate Term/ANSIColor.pm in @INC (@INC contains: .) at y.pl line 5.
BEGIN failed–compilation aborted at y.pl line 5.
>Exit code: 2
請問這要怎麼解決?
四月 18th, 2008 at 12:52 上午
thanks
十月 5th, 2008 at 3:06 下午
查中翻英的時候怪怪的耶,只會顯示到拼音和注音的部份
例如:
天氣
天氣 的查詢結果:
天氣
tian qi
ㄊㄧㄢ ㄑㄧˋ
–
這是PCMan的GNetDict用Yahoo!奇摩字典查詢的結果
天氣
tian qi
ㄊㄧㄢ ㄑㄧˋ
1. weather
–
可以發現少了英文解釋
十月 7th, 2008 at 9:13 下午
iosian,
謝謝你的提醒哦!
你不說我還真的不知道有建議詞彙的功能呢!
剛剛抽空修正完畢,果然更方便了!
十月 8th, 2008 at 1:48 上午
不客氣,可以分享出來嗎?小弟沒coding能力,只能伸手求檔,不好意思喔.
十月 16th, 2008 at 7:58 下午
已經直接在檔案裡更新了,重新下載那個檔案就可以了
二月 28th, 2009 at 9:22 上午
hi,我又來回報問題了。
近來發現您的附註音標版ydict並沒有音標顯示,可是其他語言寫的類似程式還是可以顯示音標,因此我亂try一通,發現問題在第174,yahoo改過圖片的網址了吧。
所以改成
my $dir = ‘http://l.yimg.com/f/i/tw/dictionary/pic’;
就可以正常顯示了。
另外我之前找不到您釋出的新版ydict,原來您檔案放錯位置,應該在
http://blog.nahoya.com/wp-content/uploads/2007/03/ydict.txt
三月 21st, 2009 at 8:53 上午
iosian 謝謝你的提醒
由於這陣子都沒作程式相關的事情
所以完全不知道yahoo改過網址….
現在已經把錯誤修正過來了
四月 1st, 2009 at 12:57 上午
這東西真有趣
不過我覺得有些地方可以稍微修一下
首先是音標圖片網址的問題
我覺得可以不用hard coded
把原本的
$line =~ m{]*['"]$dir/0+(\d+)\.gif['"][^>]*>}ig
改成
$line =~ m{]*['"].+?/0+(\d+)\.gif['"][^>]*>}ig
.+?的用法是perl regexp比POSIX regexp好用的地方啊
另外關於
Wide character in print的警告
我覺得正常的解決之道應該是把STDOUT設成utf8
binmode STDOUT, “:utf8″;
不過因為LWP下載下來的html code沒有被mark成utf8
所以要加上一行
utf8::decode($html);
這樣子所有的資料都在utf8下面動作了
感覺比較保險
我把改好的script放在我的server上
有興趣的話可參考
http://ku.myftp.org/~jackie/ydict