Archive for the 'プログラミング' Category

漢字を注音符号にするWebサービス(4)

Posted by onaneetX.Q on 2月 6 2010 Add Comments

かなり雑なデザインだけどとりあえず完成。Webデザインはおいおいやることにします。追記:Googleで”漢字 注音符号 変換”を検索するとトップなので、たぶん唯一のサービスなんでしょう。

漢字→注音符号変換

サンプル

台湾のyahooあたりで適当なニュース記事を拾ってきてテスト。

入力「冬天針織款單品絕對不能錯過。草寫英文字母圖騰搭配合身的設計。不管是搭配襯裙或牛仔褲都很好看」
出力

ㄉㄨㄥ1
ㄊㄧㄢ1
ㄓㄣ1
ㄓ1
ㄎㄨㄢ3
ㄉㄢ1
ㄆㄧㄣ3
ㄐㄩㄝ2
ㄉㄨㄟ4
ㄅㄨ2/ㄅㄨ4
ㄋㄥ2
ㄘㄨㄛ4
ㄍㄨㄛ4
?
ㄘㄠ3
ㄒㄧㄝ3
ㄧㄥ1
ㄨㄣ2
ㄗ4
ㄇㄨ3
ㄊㄨ2
ㄊㄥ2
ㄉㄚ1
ㄆㄟ4
ㄏㄜ2
ㄕㄣ1
/ㄉㄧ2
ㄕㄜ4
ㄐㄧ4
?
ㄅㄨ2/ㄅㄨ4
ㄍㄨㄢ3
ㄕ4
ㄉㄚ1
ㄆㄟ4
ㄔㄣ4
ㄑㄩㄣ2
ㄏㄨㄛ4
ㄋㄧㄡ2
ㄗ1/ㄗ3
ㄎㄨ4
ㄉㄡ1
ㄏㄣ3
ㄏㄠ3/ㄏㄠ4
ㄎㄢ4/ㄎㄢ1

中国語でなくても問題なく処理できます。もちろん注音符号はありませんので”?”が表示されます。

入力「年が明けて1ヶ月ほど経ったため、ぼちぼち各地の大学のサマープログラムの案内が来るようになりました。」
出力

ㄋㄧㄢ2
?
ㄇㄧㄥ2
?
?
1 ?
?
yㄨㄜ4
?
?
ㄐㄧㄥ4
?
?
?
?
?
?
?
?
?
ㄍㄜ4
ㄉㄧ4
?
ㄉㄚ4
ㄒㄨㄜ2
?
?
?
?
?
?
?
?
?
?
ㄢ4
ㄋㄟ4
?
ㄌㄞ2
?
?
?
?
?
?
?
?
?
?

まだバグがありますね。月:yueが上手く変換できていない。直しておこう。

置き場について

Onaneet & Companyドメインに置くかネオニート商会にするか考えたけど、今後中国語関係を増やしていくなら卑猥なイメージのあるオナカンよりもネオニート商会か(株)自宅警備員の方がいいと思って暫定的に置きます。

ネオニート商会のWebサービス(というほど立派じゃないけど)には他にもいくつかあり

イートレードランキング

なんかは日常的に自分で使っています。これは近日中にもう少しマシなものにしたいと思っています。なんせ、イートレランキングってSBIランキング以前から使っているもので、よくこんなコードで動作するなと感心するほど汚いコードです。でも短くて案外合理的だったりする。新しいのはRuby + mechanize + Nokogiri + xpathを使ったモダンな設計になっています。mysqlにガシガシ記録していく方式なので時系列的な分析もできたり機能は飛躍的に向上するはず。

phaさんのトップページに色々Webサービスのリンクが張ってあるので、ああいう感じでそのうちまとめたい。

簡単な解説

前回までに作った漢字と注音符号の対応表(CSVファイル)をPHPで読んで、単に二分検索でごりごり計算しているだけの簡単なものです。文字が約20,000文字あるから、頭から探していくと文字数によっては大変なことになりそうなので、二分検索にしました。2^15 = 32,768なのでたかだか10回ちょっとの探索で全部の漢字を調べ尽くすことができるはずです。

PHPは久しぶりに使うから案外手こずった。PHPの文字列がどうなっているかとか知らないからね。C言語だと単なるcharの配列で、つまり数字の羅列だとわかっているから比較をするのも簡単です。

ランキング

東大生ブログランキング登録しました。ぽちしていただけると喜びます。

東大生ブログランキング

漢字を注音符号にするWebサービス(3)

Posted by onaneetX.Q on 2月 5 2010 2 Commented

まずはコメントのお返事から。

POSTED BY 嘉門JOSUA ON 2010年2月4日
なかなか面白そうなことをやってますね。
自分は以前Flex+actionscriptやjavascript,php等使ってスペイン語学習アプリを作ろうとして挫折した経験があります。
話は変わりますがなかなか興味深い(といってもまぁ内容的にonaneetさんにとってはいまさらですが)記事を見つけたんで紹介します
http://gendai.ismedia.jp/articles/-/172
自分は東大2年で間違いなく「東大まで」の方にカテゴライズされちゃいそうな人間なので
少し耳が痛くなるような記事ですが…

示唆に富んだ記事を紹介してくれてありがとうございます。本題がしょぼいので、本題をさっさと書いてこっちにツッコミを入れていくことにします。

語学学習のソフトあるいはWebサービスがどのくらい需要があるかはわからないのですが、今は自分が語学に関心があるので自分が使えればいいやくらいの気持ちでやっています。ただ、比較的しょぼいものでも、もしかすると世界初?(たぶん探せばあるんだろうけどね)ということをやっているのは案外楽しいものです。楽しいだけじゃ生きていけないから、事業化できるといいなあなんて思っています。

2年生で「東大まで」と決めてしまうのは早計だと思いますよ。記事の中にもあったけど(あとで引用付きで書きます)気持ちが負けている人がいるなあと感じました。だから、今は多少自惚れくらいの感じで色々やってみるとよいのではないでしょうか。

注音符号表ができた

バグあるかも知れないけど、一部抜粋。

一,yi1,yi1,ㄚ1
丁,di1ng,ding1,ㄉㄧㄥ1
丂,yu2,yu2,yㄨ2
七,qi1,qi1,ㄑㄧ1
丄,sha4ng,shang4,ㄕㄤ4
丅,xia4,xia4,ㄒㄧㄚ4
万,wa4n,wan4,ㄨㄢ4
丈,zha4ng,zhang4,ㄓㄤ4
三,sa1n,san1,ㄙㄢ1
上,sha4ng,shang4,ㄕㄤ4
下,xia4,xia4,ㄒㄧㄚ4
丌,ji1/qi2,ji1/qi2,ㄐㄧ1/ㄑㄧ2
不,bu2/bu4,bu2/bu4,ㄅㄨ2/ㄅㄨ4
与,yu3,yu3,yㄨ3
丏,mia3n,mian3,ㄇㄧㄢ3
丐,ga4i,gai4,ㄍㄞ4
丑,cho3u,chou3,ㄔㄡ3
丒,cho3u,chou3,ㄔㄡ3
专,zhua1n,zhuan1,ㄓㄨㄢ1
且,qie3,qie3,ㄑㄧㄝ3
丕,pi1,pi1,ㄆㄧ1
世,shi4,shi4,ㄕ4
丗,shi4,shi4,ㄕ4
丘,qiu1,qiu1,ㄑㄧㄡ1
丙,bi3ng,bing3,ㄅㄧㄥ3
业,ye4,ye4,ㄧㄝ4
丛,co2ng,cong2,ㄘㄨㄥ2
东,do1ng,dong1,ㄉㄨㄥ1
丝,si1,si1,ㄙ1
丞,che2ng,cheng2,ㄔㄥ2
丟,diu1,diu1,ㄉㄧㄡ1
丠,qiu1,qiu1,ㄑㄧㄡ1
両,lia4ng,liang4,ㄌㄧㄤ4
丢,diu1,diu1,ㄉㄧㄡ1
丣,yo3u,you3,ㄧㄡ3

台湾式の発音練習をしている人なら読めると思うけど、左から漢字、ピンイン(声調の付く位置に声調番号)、ピンイン(変換の都合で声調番号を最後に持ってきた)、注音符号+声調番号となっています。全部で20,913文字の注音符号の表がこれで生成できたことになります。さて、これをどう使おうか。今日も宿題しないといけないので、この辺で切り上げにします。まだ置換の過程でバグが混入しているかも知れない。

余談

Googleのクロールの早さは驚くほどで、つい先ほど投稿したエントリがもうGoogleに拾われています。で「オナニート」で検索するとトップが

超意欲的にぃと
一,yi1,yi1,ㄚ1 丁,di1ng,ding1,ㄉㄧㄥ1 丂,yu2,yu2,yㄨ2 七,qi1,qi1,ㄑㄧ1 丄,sha4ng ,shang4,ㄕㄤ4 丅,xia4,xia4,ㄒㄧㄚ4 万,wa4n,wan4,ㄨㄢ4 丈,zha4ng,zhang4,ㄓㄤ4 三, sa1n,san1,ㄙㄢ1 上,sha4ng,shang4,ㄕㄤ4 下,xia4,xia4,ㄒㄧㄚ4 …
ニート – ばいお – ばいお巡礼の旅(3) 仙台編 – 就職活動
www.onaneet.org/blog/ – キャッシュ – 類似ページ

知らない人が見たら文字化けでしかないよね、これ。

本題はさておき

紹介していただいた記事は入れ子構造になっているように思います。まず「東大までの人」と「東大からの人」に分けていて、そういう話が続くのかなと思うといったん海外の話に移ります。他に雑多な理系は使い捨てみたいな話もあります。で「東大までの人」と「東大からの人」に戻って締めくくり。

確かに東大は青天井に能力の高い人がいます。記事の例だと数学オリンピックの全問正解の人なんかは余裕合格だったと思うし、一方で0.1点低かったら不合格だった滑り込みの人もいるでしょう。入試なんて受かっちまえばどうでもいいんですけど、東大は日本屈指の大学であるために、もし東大よりよい大学があったらそっちに行っているはずの人と、東大止まりの人が混在している不思議な空間を作り出します。

周りに優れた人がたくさんいるのは明らかに恵まれた環境であるので、うまいこと優秀な人の爪の垢でも煎じて飲ませていただければいいかな。あんまり東大負け組みたいにネガティブになると多分いいことないです。どっかのブログにあったけど、妬みの感情は動物にとって非常に重要な物だけど、社会がここまで大きくなってしまうと役に立たなくなります。社会の変化の方が遺伝子にある優秀な人を妬む気持ちが変化するより速いのかも知れません。

さて

日本はこの先も科学技術で生きていく覚悟はあるのか

もう中国には負けている

海外ニート氏も言及していますが、日本の閉塞感というか人の足を引っ張るのが大好きというか、妬み、嫉み、ネガティブな感情は国外に出るとあまり感じなくなります。人間の社会だからまったくないわけではないんだろうけど、日本ではあまりにドロドロした感情の密度が高いので、他の国に行くとさっきまで土砂降りだったのに突然青空が見えたような感覚に襲われます。

日本でいま何が一番嫌かというと、足の引っ張り合いです。2chとかで相手を叩いたりそういうことに人生の貴重な時間を使っている人がたくさんいて、あの人たちははたして自己研鑽を積んだりしているのだろうかと気になります(上しか見ていない人はそんなことしないと思うけど)。妬みの感情が渦巻いているから何かをやったとしてもやっかまれる。

それに対して海外なら優秀ならちゃんと評価もしてくれますし。日本のように新卒でこけたらゴミみたいな感じはあまりありません。能力のある人は大切にされます。

海外と言ってもひどいところも多いですけど、わざわざ移住するのならよいところを選ぶでしょう。

「事業仕分けでスパコンが問題になりましたが、どれだけ低次元の議論をしているんだと、頭がクラクラしました。スパコンを押さえれば、CPU、メモリ、LSIなど、多くの産業への波及効果が生まれる。だから、各国がしのぎを削って競争しているんです。

 日本がこうしている間に、中国や韓国、台湾は、もう日本以上に力をつけてきています。たとえばGPUコンピューティングという次世代の技術で、最速のものを作ったのはなんと中国です」

 世界規模で死ぬか生きるかという戦いをしている中で、「日本には国として、科学と技術でどんな戦略を採るかというビジョンすらない。このままでは本当に後進国になってしまいかねない」と危惧していた。

 東大理系の学生の中にも、国家戦略が欠如した日本行政への違和感や、中国、韓国の追い上げを心配している学生がいた。たとえ給料が少なくてもモノづくりを支えたいと、堂々と語る学生もいた。比較的楽な学科にいるため、勉強が不足していると危機感を持っている学生もいた。取材に答える姿勢も含め、きわめてまっとうな学生ばかりだった。

 東大に入れば安泰(あんたい)、などという時代はとうの昔に終わっている。「東大までの人」ではなく「東大からの人」が溢れるよう期待したいし、それを生み出す戦略がますます必要になってきているのは間違いないだろう。

さて「東大からの人」はどうすればいいのか、あるいは「東大からの人」になりたいならどうすればいいのかです。一つの解は日本に引きこもらないことはあると思います。この記事からも感じますし、自分自身もそう思っています。

今の政権は知的弱者が知的強者に復習する構図で成り立っている節がありますので、他の国が技術的に追い上げてきても対抗しようという気概を感じません。あの野蛮な事業仕分けを賞賛する人がたくさんいるというのには驚きました。これから先も日本が科学技術立国でやっていく覚悟がない感じです。他の案があるならいいのですが。例えば金融立国にするとか(日本人の金融リテラシーは低いので絶対に無理だと思いますが)観光立国にするとか(これはあるかも、でも現在の巨大なGDPを支えるのは無理だろうな)、あるいは文化・コンテンツでやっていくとか(現実的な線)代替策があるならいいんだけど、多分ないでしょう。

国家全体が技術志向でなくなったのに、技術系を選んでしまった人はどうすればいいのか、そこのところは現在の最大の関心事です。アメリカとかシンガポールあたりで就職したいものです

気持ちが腐ってしまうとどうしようもない

 経済学部の2年生(20歳)も、東大生というイメージからの脱却を図るべく、麻雀に呆(ほう)けているという。

「入学当初は積極的に授業に出ていましたが、ある日、世界金融危機の構造について他大学の友達に説明していたら『難しい話をするな』と言われたんです。あげくに『お前は勉強ばっかりして、偉くなって、庶民感覚をなくしていくんだろう』と憐(あわ)れむような目で見られた。その時、勉強している東大生は嫌われると気づいて、『それなら、勉強はやめよう』と。いまは週に一度も授業に出ないで、毎日、友達と麻雀ばかりしています」

色々な譬喩が使えるでしょうが我々はタイタニック号(縁起でもないな)のような一般的には絶対に安全であろうと思われている立派で巨大な船にみんなで乗っている構図です。ところが目の前にどでかい氷山がある。激突したらタイタニック号でも沈んでしまう。そのことを告げても「難しい話をするな」とか「お前は勉強ばっかりして、偉くなって、庶民感覚をなくしていくんだろう」と憐れんだ目で見られたわけです。もう自分だけ逃げちゃえばいいのに。わかっている人は被害が少なく済み、わからなかった人は気づいたら会社が倒産して年金も保証されないとかでひどい目に遭うだけのことです。

目の前の氷山に関心のない人に何か言われたくらいで気持ちを腐らせてしまうのはもったいない。

「僕は、“負け組”東大生の代名詞です」

 こう言うのは、東大文学部を卒業後、現在はテレフォンアポイントメントなどのアルバイトでフリーター生活を送るT氏(28歳)だ。現在の月収は20万円弱。外資や商社に行った友人から「飲もう」と誘われても、「忙しい」と嘯(うそぶ)いて断っている。バイトのない日は、カネも行く当てもないから、家にひきこもるという。

身近にもこういう人が何人もいるのでわかるけど、こういう気持ちでいるのは本人にとっても損なことです。せっかく基礎能力が高いのに日本のつまんねー新卒主義だか、やり直し利かない主義だか《醜活》だかで心が折れてしまっているわけだけど、これは気持ちの持ちようで結構変わる。世の中は面白いことに満ちていて、正社員より不安定だけど自由の効く身分をポジティブに行かしたらどうだろうかって思うのです。アルバイトならキリのいいところですっぱり辞めてしまうことも可能です。

1割しかいない「東大から」になる

あまり大学名は気にしないのがよいと思います。東大のいいところというと、卒業して箔が付くことではなく、周りに優秀な人がたくさんいること、あと理科系なら研究資金が潤沢にあることもあるかな。とにかく、その環境にいることが恵まれていると前向きに考えれば、現在持っているものを土台に次の一歩を踏み出せるでしょう。

おいらにはまだ足りない物がたくさんあります。ビジネスをやるには経営とか営業のできる人が足りないし、自分一人では困難なことです。でも、それでも色々と積極的に作ったり提案したりしていると、面白いやつがいると興味を持ってくれることがあります。そうした人脈がたぶん大学とか恵まれた環境で一番大事な物ではないかなと思います。留学先でもそうでした。いい友人に恵まれたことは単に英語の練習ができたことよりずっと大事なことです。てなわけで、宙ぶらりんな身分ではあるけど、日本社会に渦巻くネガティブな感情とか、負け組会みたいな自己嫌悪に陥って気持ちを腐らせることなく色々なことに手を出して人脈を作っていきたいなってのが今の抱負です。

ランキング

東大生ブログランキング登録しました。ぽちしていただけると喜びます。

東大生ブログランキング

漢字を注音符号にするWebサービス(2)

Posted by onaneetX.Q on 2月 4 2010 one Commented

まずはコメントから。

POSTED BY 匿名 ON 2010年2月4日
とても面白そうですね。
DUOのような例文集の形も良いと思います。
労力がすごそうですが^^;
大学に進学したら中国語を学びたいと思っていたんで
完成の暁にはぜひ使わせていただきます。

ずいぶん幅広い層の方に読んで貰えているのですね。シーボの日記は受験生も読んでいるらしいけど。

はい、例文を作っていこうとするとかなり大変だと思います。それができたら、ちょっとした自慢になりそうですね。最初はフリーのWebサービスあたりから始めて、ちょっとした事業化できたらいいなと思っています。

メモがわり

まずUnicodeのどのあたりに中国語の文字があるかをここで調べる。

Chinese (All)なら簡単でいいのだけど、Traditional Chinese – Level 1だとずいぶん複雑になる。Traditional Chinese – Level 1というのは、Adobeのサイトによると基本的な5,000文字のセットらしい。これを手で処理すると面倒臭いので正規表現を使う。

.*?U\+([0-9A-F]{4,4})-U\+([0-9A-F]{4,4}).*?

for( int i = 0x$1; i <= 0x$2; i++ )

に置き換えればOK。これでC言語のfor文の形になったので、あとはUnicodeからUTF-8に変換するプログラムを書く。仕様を調べると

「こ」の例

「こ」の Unicode はコード表より 3053。
16 bit であらわすと 0011|0000|0101|0011。(ただし 4 bit 毎に | を記入。)
16 bitを 4, 6, 6 bit に分割すると 0011|000001|010011。(ただし分割する所に | を記入。)
4, 6, 6 bit の前にそれぞれ1110, 10, 10 を挿入すると 11100011|10000001|10010011。
16 進数であらわすと E3 81 93 という 3 bit になります。
HexEdit で開いたテキストファイルの最初の 3 バイトは「こ」の字をあらわしています。

そんなに難しくないので、ささっとコードを書く。

static void PutUnicode( int code, FILE *out )
{
	/**
	 「こ」の例

	 「こ」の Unicode はコード表より 3053。
	 16 bit であらわすと 0011|0000|0101|0011。(ただし 4 bit 毎に | を記入。)
	 16 bitを 4, 6, 6 bit に分割すると 0011|000001|010011。(ただし分割する所に | を記入。)
	 4, 6, 6 bit の前にそれぞれ1110, 10, 10 を挿入すると 11100011|10000001|10010011。
	 16 進数であらわすと E3 81 93 という 3 bit になります。
	 HexEdit で開いたテキストファイルの最初の 3 バイトは「こ」の字をあらわしています。

http://www.unicode.org/charts/

	 */

	static int counter = 0;
	int a, b, c;

	c = (code & 0x3f) | 0x80;
	code >>= 6;
	b = (code & 0x3f) | 0x80;
	code >>= 6;
	a = (code & 0x0f) | 0xe0;

	fputc( a, out );
	fputc( b, out );
	fputc( c, out );

	if( counter++ > 100 )
	{
		fputc( '\n', out );
		counter = 0;
	}
}

これで中国語に使われる文字が全て得られる。

一丁丂七丄丅丆万丈三上下丌不与丏丐丑丒专且丕世丗丘丙业丛东丝丞丟丠両丢丣两严並丧丨丩个丫丬中丮丯丰丱串丳临丵丶丷丸丹为主丼丽举丿乀乁乂乃乄久乆乇么义乊之乌乍乎乏乐乑乒乓乔乕乖乗乘乙乚乛乜九乞也习乡乢乣乤乥
书乧乨乩乪乫乬乭乮乯买乱乲乳乴乵乶乷乸乹乺乻乼乽乾乿亀亁亂亃亄亅了亇予争亊事二亍于亏亐云互亓五井亖亗亘亙亚些亜亝亞亟亠亡亢亣交亥亦产亨亩亪享京亭亮亯亰亱亲亳亴亵亶亷亸亹人亻亼亽亾亿什仁仂仃仄仅仆仇仈仉今介

(略)

黢黣黤黥黦黧黨黩黪黫黬黭黮黯黰黱黲黳黴黵黶黷黸黹黺黻黼黽黾黿鼀鼁鼂鼃鼄鼅鼆鼇鼈鼉鼊鼋鼌鼍鼎鼏鼐鼑鼒鼓鼔鼕鼖鼗鼘鼙鼚鼛鼜鼝鼞鼟鼠鼡鼢鼣鼤鼥鼦鼧鼨鼩鼪鼫鼬鼭鼮鼯鼰鼱鼲鼳鼴鼵鼶鼷鼸鼹鼺鼻鼼鼽鼾鼿齀齁齂齃齄齅齆齇
齈齉齊齋齌齍齎齏齐齑齒齓齔齕齖齗齘齙齚齛齜齝齞齟齠齡齢齣齤齥齦齧齨齩齪齫齬齭齮齯齰齱齲齳齴齵齶齷齸齹齺齻齼齽齾齿龀龁龂龃龄龅龆龇龈龉龊龋龌龍龎龏龐龑龒龓龔龕龖龗龘龙龚龛龜龝龞龟龠龡龢龣龤龥龦龧龨龩龪龫龬龭
龮龯

あとはどっかで漢字とピンインの変換テーブルでも探してきて、そこから注音符号にすればいい。

宿題やらないといけないので今日はここまで。

ランキング

東大生ブログランキング登録しました。ぽちしていただけると喜びます。

東大生ブログランキング