再來個 ydict 附註 KK, DJ音標

ydict + kk音標

幾個月前,我曾經製造過一份號稱附加上KK音標的 ydict,它的音標是從cdict 線上英漢字典那裡取下來的,可能因為我是使用 Hinet 的關係,連 giga 有時會耗去很多時間。而且由於這陣子字典使用頻率比較平常高,竟然意外發現,原來 cdict 字典的音標根本不是 KK 音標!難怪念一念總覺得哪裡怪怪的。

所以我又重改了一份附加 KK 音標的 ydict,不過這次則是直接根據奇摩字典的音標圖片去找相對應的文字輸出到終端機。所以不用再去拜訪等到老 giga 字典。

感謝Wiki,讓我找到國際音標的HTML實體名稱和通用名稱,不然我根本不知道那些奇妙文字該怎麼打。

一樣,我還是以好用又不手滑的的FourDollars Blog 出品 ydict為基礎,再動些手腳如此這般那樣…

Updated (2007-09-01):
非常感謝lancetw提醒
經過 lancetw 的指點後,已經順利解決了之前在查詢不到詞彙時所出現的 wide character 警告訊息。

perl · [高亮] · [原始]

  1. # 找到第 8 行
  2. use warnings;
  3. # 後面加上
  4. use Encode;
  5.  
  6. # 找到 150 行
  7.             next if ($line =~ m{KK} && $line =~ m{DJ});
  8. # 取代掉它
  9. #         next if ($line =~ m{KK} && $line =~ m{DJ});
  10.  
  11.             my $dir = ‘http://tw.yimg.com/i/tw/dictionary/pic’;
  12.             my $map = Encode::decode(‘utf8′, " æa:   ɑ       ʊɔɝəɚʌeɛŋ ʃʒ θð   iɪuopbtdkfvszmnhlrwj`,g ḷṃṇ");
  13.  
  14.             $line =~ s/\s+(DJ)/\n$1/g;
  15.  
  16.             while ($line =~ m{<img[^>]*[‘"]$dir/0+(\d+)\.gif['"][^>]*>}ig) {
  17.                 my $char = Encode::encode(’utf8′, substr($map, $1, 1));
  18.                 my $fname = $1 < 10 ? "00$1" : $1 < 100 ? "0$1" : $1;
  19.                 $line =~ s!<img[^>]*['"]$dir/$fname\.gif["'][^>]*>!$char!ig;
  20.             }
# 找到第 8 行
use warnings;
# 後面加上
use Encode;

# 找到 150 行
			next if ($line =~ m{KK} && $line =~ m{DJ});
# 取代掉它
#			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 ḷṃṇ");

			$line =~ s/\\s+(DJ)/\\n$1/g;

			while ($line =~ m{<img[^>]*[\'"]$dir/0+(\\d+)\\.gif[\'"][^>]*>}ig) {
				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」這個字又有它自己的發音,真傷腦筋。


16 Responses to “再來個 ydict 附註 KK, DJ音標”

  1. ajer001 Says:

    Hi:
    我發現中文下去搜尋時,會一直查不到,
    前一版的就沒這個問題。
    不知道你會不會這樣呢?

    感謝分享啦 : )

  2. Beata Says:

    恩,我沒有這樣的問題耶,還是能查得到。
    倒是有個像這樣子的錯誤訊息一直沒辦法去除掉。

    Wide character in print at /usr/share/perl5/LWP/Simple.pm line 169.

    不過因為跟 perl 不是很熟的關係,只好放它去了…

  3. lancetw Says:

    可以試試把 use encoding utf8; 去掉

  4. Beata Says:

    hi, lancetw

    以我電腦的情況而言,如果沒加上 use encoding utf8; 的話,反而音標部份會出現亂碼導致看不清楚。

    而加上之後,就只有在查詢不到該字時才會出現 wide character 訊息。

    btw, 您網站的首頁真炫

  5. lancetw Says:

    不加 use encoding utf8;
    use warnings 改成 no warnings;
    加個 use Encode;
    157 行左右的 my $char = substr($map, $1, 1);
    改成
    $char = substr(Encode::decode(”utf8″,$map), $1, 1);

    也許能修正亂碼問題

  6. lancetw Says:

    最後一行的 $char 前頭少貼了 my

  7. Beata Says:

    It works!!

    謝謝你幫我解決了那個刺目訊息。
    果然高手就是高手,不一樣呀!:)

  8. lancetw Says:

    剛發現只 decode 還是會有點問題 (ae 這個字顯示錯誤)
    請在
    $char = substr(Encode::decode(”utf8″,$map), $1, 1);
    下方再加入一行
    $char = Encode::encode(”utf8″,$char);

    我不是高手,因為我不是很懂 perl 的寫法 :P

  9. lancetw Says:

    use warnings 改成 no warnings;
    其實這行只是要不要顯示程式本身的警告,加入上面那行後,改回 use warnings 程式本身應該也不會出現警告,因為已經正確 encode 了。

  10. Beata Says:

    恩,的確是你說的那個方式比較好。
    另外我發現把 decode $map 的部份提到迴圈之外會比較好,所以又改了…


    my $map = Encode::decode('utf8', " ..map 的字串太長,在這省略...");
    # ..... 省略一大段
    my $char = Encode::encode('utf8', substr($map, $1, 1));

  11. lancetw Says:

    的確改這樣比較好些 :)

  12. ajer001 Says:

    太棒了,果然是高手!
    這樣就多種需求,一次滿足了:p

  13. Sherry Says:

    你好!!
    看到你的WP Plugins有一个Comment-Reply,特别喜欢,可是已经没有继续开通留言,你自己也不会再继续更新了……
    可是我还是想要安装这个插件,可是总是不得法,在option-discussion.php里面没有找到需要修改的第二段代码……
    于是就乱了,不知道能不能帮忙???
    谢谢谢谢!!!

  14. Kai-shao Says:

    台灣是世界上把英文當做必修外國語的國家裡,惟一「只使用」KK音標的國家。使得台灣人普遍不識另一個「萬國音標」系統。

    在其他國家,萬國音標都是主流,KK音標雖不至於絕跡(部份紙本字典仍會標KK音標),但KK音標仍屬少見。

    把KK音標引進台灣,且全面封殺其他音標的傢伙,是梁實秋。

  15. 路人甲 Says:

    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

    請問這要怎麼解決?

  16. d4mnphr34k3r Says:

    thanks

Leave a Comment