CUI超お手軽英語辞書
巷で「すごいH本」と話題の「すごいHaskell楽しく学ぼう」をAmazonで購入しようと思ったのですが、思いの外人気らしくて、入手に時間がかかりそうでした。
- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 25人 クリック: 580回
- この商品を含むブログ (73件) を見る
そんなわけで、思い切って原書を買ってしまったのです。
Learn You a Haskell for Great Good!: A Beginner's Guide
- 作者: Miran Lipovaca
- 出版社/メーカー: No Starch Press
- 発売日: 2011/04/15
- メディア: ペーパーバック
- 購入: 1人 クリック: 1,024回
- この商品を含むブログ (7件) を見る
どもども、英語が読めないのに洋書に手をつけ始めたちゅーんです。
今のところ5章の高階関数まで読み進めたところです。まだサンプルコードが単純なので、なんとなーく、何が書いてあるのか解る気がします。気がするだけです。はい。
まぁ、とにかく、この後FunctorとかApplicativeとかMonadとかの説明も出てくるようなので、わりとワクワクしながら読み進めてる所です。
ちゃんとした感想は、読み終わったらいずれ。
さて、そんなこんなで、この頃英語辞書のお世話になる事が多くなりました。
和英/英和サイトなんかもあちこちありますし、翻訳サイトも便利なのですが、どうも手軽に使える英語辞書ソフトって、ありそうで無いんですよね。
CUI画面で、単語を入力したらその訳をペロンと表示してくれるようなのが理想です。
見つから無いので、作ります。
APIを公開してるような辞書サイトがあれば、それを使ってなんかの言語で作っちゃうのが手っ取り早いかなぁと思ったのですが、それも見当たらないのでcURLでweblioのHTMLを取得して、その内容を読みに行くようにしましょう。
weblio和英英和事典のHTMLの中を覗いてみます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>learnの意味 - 英和辞典 Weblio辞書</title> <meta name="description" content="learnの意味や和訳。 【動詞】 (音節learned 発音記号/lːnd,lːnt|lːnd,lːnt/,音節learnt 発音記号/lːnt|lːnt/) 音声を聞く→《★【語形】 《主に米国で用いられる》 では lea... - 約891万語ある英和辞典・和英辞典。発音・イディオムも分かる英語辞書。"> <meta name="keywords" content="learn,意味,辞書,英和,とは,和訳,翻訳,用例,発音,英和辞典"> <link rel="stylesheet" type="text/css" href="http://www.westatic.com/css/ejje/content.css?sd=ejje&tst=2012060912"><link rel="stylesheet" type="text/css" href="http://www.westatic.com/css/dict.css?tst=2012060912" title="Main"> <link rel="shortcut icon" href="http://www.westatic.com/img/favicon/ejje.ico" type="image/x-icon"> <link rel="alternate" media="handheld" href="http://m.weblio.jp/e/c/learn"> ...
実際にHTMLを読むのはHaskellを使います。
最初はParsecモナドでHTMLを解析して・・・とか色々こむずかしく考えていたのですが、見てのとおり、weblioの最初の方にメタタグとして簡単な内容が埋めこまれているんですね。
簡単な単語について簡単に意味を知りたいだけならこれを取得するだけで良さそうですし、詳細が見たければ取得したファイルをw3mでも使って開けば良いでしょう。
「name="description"」を探し、その直後の「content="」から「"」までの文字列を取得すれば良いので、ちょっとした文字列操作ですみそうです。
こういう処理を手続き言語で書くとループを回しつつ文字のインデックスを保持しながら書かなきゃいけないので、わりと頭を使うんですが、関数型言語なら再帰処理を使って簡単に書けます。
JaEg.hs:
module Main where import System --argからmatchを検索して、見つかった所から後ろを返す matchToDrop :: String -> String -> String matchToDrop match arg | arg `leftMatch` match = drop (length match) arg | otherwise = matchToDrop match (tail arg) where --(´・ω・`)似たようなのあったかな? leftMatch :: Eq a => [a] -> [a] -> Bool leftMatch s1 s2 = take (length s2) s1 == s2 takeToEnd :: String -> String takeToEnd ('"':xs) = "" takeToEnd (x:xs) = x : (takeToEnd xs) ------------------------------------------------- main :: IO () main = do fname <- getArgs readFile (head fname) >>= putStrLn.discription where discription :: String -> String discription = takeToEnd . matchToDrop "content=\"" . matchToDrop "name=\"description\""
これで全部です。
Haskellのプログラムについては、コンパイルして実行ファイルにするほどでも無いでしょうからrunghcで走らせてやります。(配布するわけでも、そんなに重い処理でも無いですし)
あとはbash+cURLでHTMLを取得して、runghcで実行してやればOKです。取得したファイルは /tmp 直下にでも放りこんでおけば良いでしょう。
je.sh:
#!/bin/bash WEBLIO_URL="http://ejje.weblio.jp/content/$1" TMP_FILENAME="/tmp/cuijaegdect.html" echo "${WEBLIO_URL//' '/%20} から取得中..." curl ${WEBLIO_URL//' '/%20} > $TMP_FILENAME echo "------------------------------------------------------------------------------------------" runghc JaEg.hs $TMP_FILENAME echo "------------------------------------------------------------------------------------------"
試してみます。
$ ./je.sh "learn" http://ejje.weblio.jp/content/learn から取得中... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 152k 0 152k 0 0 85633 0 --:--:-- 0:00:01 --:--:-- 101k ------------------------------------------------------------------------------------------ learnの意味や和訳。 【動詞】 (音節learned 発音記号/lːnd,lːnt|lːnd,lːnt/,音節learnt 発音記号/lːnt|lːnt/) 音声を聞く→《★【語形】 《主に米国で用いられる》 では lea... - 約891万語ある英和辞典・和英辞典。発音・イディオムも分かる英語辞書。 ------------------------------------------------------------------------------------------ $ ./je.sh "you" http://ejje.weblio.jp/content/you から取得中... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 208k 0 208k 0 0 88066 0 --:--:-- 0:00:02 --:--:-- 98191 ------------------------------------------------------------------------------------------ youの意味や和訳。 【代名詞】 《★【語形】 所有格 your,目的格 you,所有代名詞 yours,複合人称代名詞 yourself; 《複数形》 所有格 your,目的格 you,所有代名詞 yours,複合人称代... - 約891万語ある英和辞典・和英辞典。発音・イディオムも分かる英語辞書。 ------------------------------------------------------------------------------------------
肝心の和訳がブツ切れてますやん。
(´・ω・`)<サンプルが悪かった・・・
えっと・・・
大抵の単語はちゃんと意味まで入ってます。入ってますから大丈夫です、そんな目で見ないでください。
$ ./je.sh "delete" http://ejje.weblio.jp/content/delete から取得中... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 126k 0 126k 0 0 81878 0 --:--:-- 0:00:01 --:--:-- 96757 ------------------------------------------------------------------------------------------ deleteの意味や和訳。 【動詞】 【他動詞】〈…を〉〔…から〕削除する,消す 〔from〕《★【用法】 校正用語として del. または と略す; cf. dele》.[ラテン語「消す」の意; 【名詞】 deletion] - 約891万語ある英和辞典・和英辞典。発音・イディオムも分かる英語辞書。 ------------------------------------------------------------------------------------------ $ ./je.sh "group" http://ejje.weblio.jp/content/group から取得中... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 220k 0 220k 0 0 61594 0 --:--:-- 0:00:03 --:--:-- 66596 ------------------------------------------------------------------------------------------ groupの意味や和訳。 【名詞】【可算名詞】1[集合的に] 群れ 《★【用法】 集合体と考える時には単数,構成要素を考える時には複数扱い; 【類語】 group は動物や物の群れ・集まりの最も一般的な語; herd は一緒に... - 約891万語ある英和辞典・和英辞典。発音・イディオムも分かる英語辞書。 ------------------------------------------------------------------------------------------ $ ./je.sh "smile" http://ejje.weblio.jp/content/smile から取得中... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 140k 0 140k 0 0 95352 0 --:--:-- 0:00:01 --:--:-- 116k ------------------------------------------------------------------------------------------ smileの意味や和訳。 【動詞】 【自動詞】1(声をたてないで)笑う 《★【類語】 ⇒laugh》:a〈人・顔・目などが〉微笑する,ほほえむ,にっこりする.用例smile sweetly [bitterly, cynical... - 約891万語ある英和辞典・和英辞典。発音・イディオムも分かる英語辞書。 ------------------------------------------------------------------------------------------ $ ./je.sh "haskell" http://ejje.weblio.jp/content/haskell から取得中... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 58036 0 58036 0 0 57509 0 --:--:-- 0:00:01 --:--:-- 85347 ------------------------------------------------------------------------------------------ haskellの意味や和訳。 人名苗字 ハスキル;ハスケル - 約891万語ある英和辞典・和英辞典。発音・イディオムも分かる英語辞書。 ------------------------------------------------------------------------------------------ $ ./je.sh "すごい" http://ejje.weblio.jp/content/すごい から取得中... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 130k 0 130k 0 0 99k 0 --:--:-- 0:00:01 --:--:-- 133k ------------------------------------------------------------------------------------------ すごいを英語に訳すと 1〈恐ろしい〉terrible; dreadful; horrible〈気味悪い〉uncanny; unearthly; weird; ghastly; gruesome; grim用例あれはすごい事... - 約891万語ある英和辞典・和英辞典。発音・イディオムも分かる英語辞書。 ------------------------------------------------------------------------------------------ $ ./je.sh "ハスケル" http://ejje.weblio.jp/content/ハスケル から取得中... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 50341 0 50341 0 0 27117 0 --:--:-- 0:00:01 --:--:-- 37595 ------------------------------------------------------------------------------------------ ハスケルを英語に訳すと 人名苗字 Haskell - 約891万語ある英和辞典・和英辞典。発音・イディオムも分かる英語辞書。 ------------------------------------------------------------------------------------------
うん、こう見えてわりと便利ですよ、はい。
Twitterで言われて知ったのですが、Bing TranslateがAPIを提供しているそーです。
「辞書」サイトのAPIは見当たらないですけど、「翻訳」サイトのAPIはあるみたい・・・
今回の目的とはちょっと違う気もしますが後々役に立ちそうです。