2013-08-26

中国のサイトを使う時に新規登録とログインがややこしい。

タオバオをはじめとして、中国のサイトを使う時に日本人が間違えやすい典型的なものがアカウントを新しく作ろうと思って「登录(dēnglù)」をクリックしてしまうことです。

日本語の漢字で何となく「登録」と読めるので、新規登録する際についクリックしてしまいがちですが、これはログインを意味します。

新規登録する時にクリックしなければならないのは「注册(zhùcè)」です。

「注册」は日本語の漢字ではとても登録とか新規登録みたいな事を連想できないので気づきませんよね。

ちなみにブログは中国語で「博客(bókè)」と言います。

百度一下なんかで検索するとたくさん出てきます。

中国のブログを使おうと思っている人の多くはSEOのためだと思いますが、グーグルのSEO対策として有効かどうかは分かりません。

一度実験してみますので、何か進展があれば報告します。

2013-08-16

東郷平八郎の戦艦三笠に乗ってきた。

横浜に行ったついでに前から行きたいと思っていた戦艦三笠を見に行ってきた。

戦艦三笠は日露戦争の日本海海戦で、バルチック艦隊に対して海戦史上でも珍しいほどの圧倒的勝利を収めた日本海軍の連合艦隊の旗艦である。

日本海海戦は東郷ターンや下瀬火薬の使用、東郷平八郎司令長官や秋山真之参謀などの大活躍などそれだけで1つの映画になるような壮大な海戦でした。

その伝説的な戦艦三笠が横須賀の三笠公園というところに記念艦として保存されている。

戦後に荒らされて水族館とかダンスホールが甲板に作られたりしたけど、三笠という世界的に有名な戦艦を何としてでも元の勇壮な姿に戻したいという世界中の志ある人たちの活動によって復元された。

記念艦「みかさ」が凄いのは、甲板上の建造物は一部を除きほとんどがレプリカであるもののそれ以外は当時のまま保存されているという事だ。

甲板の一部も当時の木材やタイルがそのまま残っている部分が一部あり、東郷平八郎長官などの乗組員たちが当時歩いていたものと全く同じ所を歩く事ができるのである。

私も最初は全く気付かなかったが、記念写真を撮影できる所にいたおじさんに教えてもらった。

言われたとおりによく見てみると、甲板に使われている木材が確かに一部分明らかに他と事なっている。

↓これが新しく作られた甲板。奇麗すぎますよね。

↓これが当時の甲板のまま残っている部分。新しく作り直された部分と比べると使われている木材の質や大きさが異なるのがよく分かる。この甲板の上を東郷平八郎はじめ乗組員が実際に歩いていたらしい。

また、当時は溶接技術がなくリベットを打ち込み鉄板を繋ぎ合わせていたらしい。レプリカの部分は溶接が使われているが、一部リベットで接合してある部分がある。

その部分が当時のまま保存されている箇所だそうだ。

↓これがレプリカの部分。当時は無かった溶接の技術が使われている。

↓これが当時のまま残っている部分。リベットで結合してあるので注意深くみればすぐに分かる。

私も含めて多くの人がそんな事も気付かず通り過ぎていたが、話を聞いてそれに気付くと、東郷さんや秋山さんの残影を感じずにはいられず、また命をかけて戦ってくれた全乗組員の諸先輩たちの心境ひ思いを致し、目頭が熱くなった。

もし戦艦三笠に乗る機会があれば、よく注意して見て下さい。当時のみんなと全く同じ甲板を歩いていると思うだけで何か感じる事でしょう。

戦艦の高い所にある操縦室の前くらいにあるむき出しの部分に立って東郷長官は指揮を取り続けたらしいのですが、その立ち位置がプレートで表されていました。

敵艦の集中砲火を浴びながらも戦いが終わるまで一歩も動かずに指揮を取り続けたそうです。爆発などの水しぶきで甲板全部が海水を浴びていたらしいのですが、戦いが終わって東郷長官が持ち場を離れると、立っていた靴の形の部分だけが海水に濡れずに乾いていたそうです。

日本海軍の軍服を着て記念撮影できるスポットがあったので記念に1枚。そこのおじさんからいろいろと熱いお話を聞かせていただきました。

子供たちもおじさんに「勉強して立派に偉くなれよ!」と声をかけていただきました。

タオバオで知っておくと便利な単語(女装 レディースファッション)

タオバオで最も人気のあるカテゴリーである女装 レディースファッションの上位階層の単語。

中国語 日本語 発音
连衣裙 ワンピース Liányīqún
T恤 Tシャツ T xù
裤子 パンツ(ズボン) Kùzi
衬衫 ワイシャツ、ブラウス Chènshān
蕾丝衫 レースのシャツ Lěisī shān
牛仔裤 ジーンズ、ジーパン Niúzǎikù
针织衫 ニットシャツ(編物のシャツ) Zhēnzhī shān
短外套 ジャケット Duǎn wàitào
半身裙 スカート Bànshēn qún
商品目录 カタログ Shāngpǐn mùlù

 

タオバオで知っておくと便利な単語(第1階層)

最近、タオバオにどっぷりはまっていて朝起きたらタオバオでいろんな商品と値段をチェックするのが日課になっています。

日本人は漢字が理解できるのでけっこう意味が分かるし、グーグル翻訳などを使えばさらに簡単に意味を理解する事ができるのですが、やっぱり限界もあります。

そこで、タオバオ100%楽しむために覚えておくと便利な重要単語を少しずつご紹介します。

まずはタオバオのカテゴリー第1階層から。

中国語 日本語 発音
流行女装 レディーファッション Liúxíng nǚzhuāng
男装精品 男性高級品 Nánzhuāng jīngpǐn
女鞋 女性の靴 Nǚ xié
男鞋 男性の靴 Nán xié
箱包 バッグ Xiāngbāo
配件 部品、付属品 Pèijiàn
珠宝 ジュエリー Zhūbǎo
饰品 アクセサリー Shìpǐn
食品 食品 Shípǐn
百货 雑貨 Bǎihuò
数码 デジタル機器 Shùmǎ
3C配件 デジタル機器アクセサリー 3C pèijiàn
母婴用品 ベビー用品 Mǔ yīng yòngpǐn
其它 その他 Qítā

 

2013-08-14

入門自然言語処理(オライリー)の演習問題 解答Part3 [第1章21〜29]

入門自然言語処理の演習問題を解くシリーズの最後です。Part1Part2はこちらです。

第21問

print text2[-2:]

第22問

print FreqDist([w for w in set(text4) if len(w) == 4]).keys()

第23問

    for w in set(text6):
        if w.isupper():
            print w

第24問

以下の条件に合うすべての単語を探し出す式を書く。

  • a.「ize」で終わる
  • b.「z」で終わる
  • c.「pt」という文字を含む
  • d.先頭が大文字で後が全て小文字(つまりタイトルケース)
  • 【a】

    print [w for w in set(text6) if w.endswith('ize')]

    【b】

    print [w for w in set(text6) if 'z' in w]

    【c】

    print [w for w in set(text6) if 'pt' in w]

    【d】

    print [w for w in set(text6) if len(w) > 1 and w.istitle()]

    第25問

    似たような事を何度もしているのでパス。

    第26問

    sum([len(w) for w in text1])このPythonコードは何を意味するか?

    text1に含まれている全単語の文字数の和を意味する。

    これを使ってテキスト中の単語帳の平均を求められるか?

    例えば、以下のようにすると単語の平均文字数を求める事ができる。

    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    
    from __future__ import division
    from nltk.book import *
    
    def main():
        print sum([len(w) for w in text1]) / len(text1)
    
    if __name__ == '__main__':
        main()

    ちなみに結果は「3.83041112802」でした。よく使われる英語の単語って以外と文字数少ないんですね。

    第27問

    語彙サイズという言葉の意味が分からないので、とりあえず単語の数っていう意味として考える。

    def vocab_size(text):
        text = text.split()
        return len(text)

    第28問

    textをsplitしないと単語の数ではなく文字数になってしまうので注意。

    def percent(word, text):
        return 100 * text.count(word) / len(text.split())

    第29問

    set(sent3) < set(text1)を実行。また他のテキストでも実験せよ。この処理の実用的な応用には何があるか?

    語彙数の多さを比較していることになるから、あるデータの中から語彙数の多いものや少ないものを抽出できる。

    【入門自然言語処理解答(第1章)】

    2013-08-12

    入門自然言語処理(オライリー)の演習問題 解答Part2 [第1章9〜20]

    前回の入門自然言語処理の解答の続きです。

    第9〜14問

    自然言語処理とは関係なくPythonの問題なのでパス。

    第15問

    print sorted([w for w in set(text5) if w.startswith('b')])

    第16問

    自然言語処理とは関係なくPythonの問題なのでパス。

    第17問

    「sunset」という単語の添字番号をtext9.index()探して、sunsetを含む完全な1文を見つけて取り出せ、という問題。

    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    
    from nltk.book import *
    
    def main():
        # sunsetの添字番号
        number = text9.index('sunset')
    
        # 文頭と末尾の変数を初期化
        start = end = 0
    
        # sunsetの番号から1つずつ前に戻っていってピリオドを探す。
        i = number # 文頭の添字番号
        while 1:
            if text9[i] == '.':
                start = i
                break
            i -= 1
    
        # sunsetの番号から1つずつ後ろに進んでいってピリオドを探す。
        i = number # 文末の添字番号
        while 1:
            if text9[i] == '.':
                end = i
                break
            i += 1
    
        # sunsetの含まれている1文を出力
        print ' '.join(text9[start+1:end+1])
    
    if __name__ == '__main__':
        main()

    ピリオドが文の区切りと考えて、sunsetを基点に1ずつ前後に移動してピリオドが見つける。これで文頭と文末の添字番号が分かるので、その部分だけをtext9から抜き出す。その結果がこれ。

    CHAPTER I THE TWO POETS OF SAFFRON PARK THE suburb of Saffron Park lay on the sunset side of London , as red and ragged as a cloud of sunset .

    「CHAPTER I」とかなってるしたぶん間違えてると思う。これは章のタイトルだから最後にピリオドが付いてないんだと思う。

    CHAPTER 1 INTRODUCTION
    This book is ~......

    みたいな感じだと思う。この章タイトルの部分にかぶらなければこれで抜き出せたと思うけど・・・。なかなかいやらしい問題だわ。

    第18問

    print len(sorted(set(sent1 + sent2 + sent3 + sent4 + sent5 + sent6 + sent7 + sent8)))

    第19問

    以下の2つの違いは何か?どちらが大きな値を得る事ができるか?

    len(sorted(set([w.lower() for w in text1])))
    len(sorted([w.lower() for w in set(text1)]))

    最初ぱっと見たときは同じ事をしてるだけと思ったんだけど、実際に実行してみると上が17,231で下が19,317とかなり違いが出た。

    でよく考えてみると、上は全て小文字化した後でsetdで重複を取り除いているのに対して、下はsetで重複を取り除いてから小文字化している。

    例えば、dog Dogという単語が入っていたとすると、上の方では先に小文字化するのでdog dogとなってsetするので1つになってしまう。

    下の方は先にsetするのでその段階ではdog Dogと2つ残っており、それから小文字化するのでdog dogと2つの単語が残ったままになる。

    したがって下の方が値が大きくなる。

    別の言い方をすると上と下の値の差は、同じ単語が小文字と大文字の両方で記述されている数という事になるんだろう。

    第20問

    w.isupper()とnot w.isupper()の違いは?

    前者はwが全て大文字なら真、それ以外は偽。

    後者はwが全て大文字なら偽、それ以外は真。

    【入門自然言語処理解答(第1章)】

    入門自然言語処理(オライリー)の演習問題 解答Part1 [第1章1〜8]

    オライリーから出版されている入門自然言語処理をコツコツ読んでいる。

    これからこの分野は確実に伸びるだろうし、何より夢がある。完全なリアルタイム自動翻訳、完全に会話の成り立つ人工知能、自分の心を癒してくれる心理カウンセラーのようなロボットなど。

    今、自分に関係のある領域で言えばグーグルの検索アルゴリズムが進化するキーポイントとなる技術も自然言語処理だと思う。

    もしグーグルのコンピュータがあるページに書かれている内容を完全に理解できるとすると、今みたいに被リンクに頼るアルゴリズムを使う必要性が全く無くなる。

    検索ユーザーの意図を読み取って、その人の求めている情報が掲載されているページを検索結果に返せばいいだけ。

    そのページがどこからリンクを貰っているとか、どれだけの数のリンクを貰っているかなんて完全に二次的なスコア付けに過ぎなくなる。

    ということで自然言語処理という技術にすごく興味がある。

    入門自然言語処理がいいのは、各章の終わりに演習問題が付いていることだと思う。本を読んで知識を入れるだけでも本当の理解には至らず、自分で考えて手を動かしたりして出力(アウトプット)してはじめて理解が深まる。

    ただ、答えがどこにも書かれてない。仕方ないから他の人がブログなんかに書いてたりするのを参考にしながらやっています。

    他にも同じような人がいるかもしれないので、僕も自分の解いた答えをブログに載せることにする。合っているかどうかは全く分からないし自信もありません。あくまでも参考という事にしていただいて間違いなどがあればコメント貰えると嬉しいです。

    【第1章演習問題】

    第1問

    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    
    from __future__ import division
    
    def main():
        print 12 / (4 + 1)
    
    if __name__ == '__main__':
        main()

    第2問

    print 26 ** 100

    第3問

    >>> ['Monty', 'Python'] * 20
    ['Monty', 'Python'] * 20
    ['Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python']

    第4問

    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    
    from nltk.book import *
    
    def main():
        print len(text2)
        print len(set(text2))
    
    if __name__ == '__main__':
        main()
    

    結果としてはtext2に含まれている単語の数は141,576個。重複を省くと6,833個。

    第5問

    ---------------------------------------------------------------------------------
    |ジャンル                 | トークン数 | 異なりアイテム数 | 語彙の多様性 |
    ---------------------------------------------------------------------------------
    |ユーモア(humor)    |     21,695|                  5,017|                 4.3|
    ---------------------------------------------------------------------------------
    |ロマンス(romance) |     70,022|                  8,452|                8.3|
    ---------------------------------------------------------------------------------

    トークン数/異なりアイテム数=語彙の多様性という計算式だからスコアが低い方が語彙は多様性に富んでいるという事。

    もしトークン数が100で、現実的には不可能だろうけど全て異なる語彙を使えば異なりアイテム数も100になり語彙の多様性は1になるから。

    したがって、ユーモアの方が語彙の多様性に富んでいる。

    第6問

    Sense and Sensibility(分別と多感)という本はtext2の事なのだがマリアンのスペルが分からないので検索した。

    print [w for w in set(text2) if w.startswith('M')]

    これらが抽出されたけど、当てはまりそうなのはMarianneだけかな。

    ['Mansion', 'Magna', 'Me', 'Ma', 'Mr', 'My', 'ME', 'MY', 'Michaelmas', 'Midsummer', 'Monday', 'May', 'M', 'Many', 'MADAM', 'Madam', 'MIND', 'MAY', 'Mind', 'Mine', 'Misses', 'Mary', 'Marlborough', 'Mama', 'Most', 'Mrs', 'MUST', 'Music', 'MONTH', 'Must', 'Middletons', 'Misery', 'Margaret', 'Men', 'Mab', 'Mistress', 'Middleton', 'Mamma', 'Much', 'Martha', 'Marianne', 'Mid', 'Morton', 'Master', 'March', 'More', 'Mall', 'Miss', 'Months']

    これら4人の名前を配列に入れてdispersion_plotメソッドに渡す。

    print text2.dispersion_plot(['Elinor', 'Marianne', 'Edward', 'Willoughby'])

    以下のようなプロットが表示された。

    この小説の中で男性と女性の演じる役割の違いを何か発見できるか?という問いがあるんだけど、男性はエドワードだけっぽい。

    エリナとマリアンが主人公的な役割でエドワードとウィロビーが少し脇役的な役割というのはすぐに分かる。すぐに思いつくのはこれくらいなので女性が中心的な役割で男性が女性を引き立てるための脇役としての役割を果たしているという事にしておこう。

    さらに、この情報から「カップルを特定せよ!」との質問がある。

    一般的に考えて異性のカップルとするとエドワードを中心に残りの3人を考える事になる。

    エドワードとウィロビーはほとんど同じ時間に登場していないのでおそらく違うだろう。

    エリナかマリアンかはこの情報だけでは特定できないよね。

    もし同性のカップルという事であれば万遍なく登場しているエリナとマリアンだろう。

    エリナとマリアンがエドワードを巡って恋敵の状態になっていて、でも実はエドワードにはウィロビーという恋人がいるという設定もあり得る。

    結論としてはこれだけでははっきりとは分からない。

    【追記】Wikipediaでこの小説の事を調べてエリナとエドワードが恋人だという事が分かりました。ちなみにエリナとマリアンが姉妹でウィロビーも男性だそうです。Willoughbyで画像検索すると圧倒的に女性が多く出てきたんですけどね。

    第7問

    これは何も難しくない。

    print text5.collocations()

    第8問

    len(set(text4))という式の目的と意味は?

    目的は、text4の中に含まれている単語の種類の数を調べる事。

    set関数で2回以上登場する単語を1つにまとめてlen関数で単語の数を数える。

    【入門自然言語処理解答(第1章)】