としおの読書生活

田舎に住む社会人の読書記録を綴ります。 主に小説や新書の内容紹介と感想を書きます。 読書の他にもワイン、紅茶、パソコン関係などの趣味を詰め込んだブログにしたいです。

PXL_20220116_041721312

筒井康隆さんの旅のラゴスを読みました。

人生という旅にはいつまでも終わりがないということを教えてくれる作品でした。

普通とは少し違うSF要素があったのも面白かったです。

以下、あらすじと感想になります。



『旅のラゴス』のあらすじ


その世界の人々たちは、私たちが日常的に利用している自動車や電車などの高度な文明を失った代わりに壁抜けや集団転移などの超能力を得た。

そんな世界で旧文明の知識を得るために北から南へ、南から北へ旅をする男がいた。

その男の名はラゴス。

ラゴスは集団転移や壁抜けなどの体験や様々な人たちとの出会いと別れを繰り返して旅を続ける。

旅の途中で奴隷の身に落とされることもあったがそれでもラゴスは自分の目的を達成するために旅を続ける。

ラゴスが障害をかけた旅の目的を果たした後に見つけるものは何なのか。

一人の男の一生を描いた、SF旅小説。



感想(ネタバレあり)


説明されない世界感


一般的なSFとは物語の途中で世界観の説明があるのが一般的である。

例えばハリーポッターなら魔法が使える人々が存在するんだなと物語の冒頭を読めば小説の世界観を掴むことができる。

しかし、この『旅のラゴス』ではそういった世界観の説明が一切ない。

私たち読者はなんの知識ももたないままラゴスが生きている世界に投げ出されるのだ。

まず私が読んでいてこの世界はなんだと感じた最初の存在はスカシウマである。

ウマという名前がつくのだから我々の世界にいるウマのような生き物だとは想像できるがどんなウマかまでは詳細に描かれておらず、物語を読み終えてもスカシウマの正体を想像することができない。

ラゴスの生きる世界はこうした知らない生物たちばかりが現れる私たちが生きる世界とは違う世界なのだなと思いながら物語を読んでいると一気に現実に戻される場面がある。

それはラゴスたちがマテ茶を飲むシーンだ。

日本人でマテ茶をよく飲むという人は少ないかもしれないが、現実に存在するお茶だ。

このマテ茶を飲むシーンを読んで私たちは初めてこの世界が、現代の文明が滅びた後の世界なのだと知ることができる。

このように物語を読み進めていくにつれてこの物語の世界観を知ることができるため、小説を読んでいるだけでまるで私もラゴスと同じように旅をしているような気分を味わうことができるのが本作の面白いところだ。





人生の目的とは


有名企業に就職すること、お金持ちになることなどを人生の目的としている人は多いと思う。

そうした目的を持つことは悪いことではないが、『旅のラゴス』を読んで人生の目的というものは常に更新されて終わりがないのだということを感じさせられた。

ラゴスの当初の目標は、南の旧文明の情報が隠されている地に向かうことだった。

彼はバドスの町で奴隷狩りに会い、一時は奴隷に身を落としたがそれでも何十年もかけて南の地に到達した。

もちろん南の地に到着しただけでもすごいことなのだが、ラゴスのすごいところはそれだけではない。

彼は自分の人生の終点をその地とせずに旧文明の知識を自分の住んでいた地に持ち帰ろうと新しく目標を持つのだ。

さらにその目標を達成すると彼は何十年も前に愛していた女性デーデに会うため再び旅へと出る。

『旅のラゴス』を読んで人生という旅は自分が死ぬまで終わりがないのだということを再度認識することができてよかった。

自分も今の現状に満足せずに常に旅を続けなければならないという風に感じさせられた。



まとめ


『旅のラゴス』はSF小説ではあるものの、世界観の説明が少ないどこか変わった作品だった。

また、旅小説としてもラゴスの落ち着いた性格のおかげか物語に起伏はあるものの落ち着いて読むことができる。

これらの二つの要素のおかげで自分をラゴスという人物に投影することがしやすくまるでラゴスのように自分が旅をしている気分を味わうことができる作品だった。

『旅のラゴス』を読んで皆さんも未知の世界にでかけてみませんか。








PXL_20211229_070317417.MP

『52ヘルツのクジラたち』で本屋大賞を受賞した町田そのこさんの受賞後第一作目の『星を掬う』を読みました。

親と子のつながりを描いた作品で、個人的には『52ヘルツのクジラたち』より『星を掬う』の方が好みの作品でした。

以下、あらすじと感想になります。



『星を掬う』のあらすじ


千鶴は小学校1年生の夏休みに母に捨てられた。

母との最期の思い出は母と二人で夏休みに色々なところに旅行をしたところだ…。

30歳手前になった千鶴は、元夫のDVが原因で金銭的にも身体的にも苦しい状況にある。

千鶴は賞金ほしさに、母との最期の思い出をとあるラジオ番組に投稿してみた。

するとそのラジオを聞いた、恵真という母の娘を名乗る人物から会いたいという連絡がきた。

恵真に会ってみると彼女は母とは血がつながっているわけではないが、母に育ての親として感謝をしているようだ。

恵真に一緒に住もうと言われた千鶴は、元夫のDVから逃げたいということもあり、恵真と母が住む「さざめきハイツ」に向かいそこで千鶴を捨てた母と再会することになる。

自分の記憶とは違う母と出会い戸惑う千鶴であったが、彼女たちと暮らしを通して、千鶴は母が自分を捨てた理由の真実を知ることとなる。

普通の母親と娘の関係を気づくことができなかった、女性たちの物語。



感想(ネタバレあり)


人生は誰のものか


『星を掬う』を読んでいると人生は誰のためのものなのかということを常に考えさせられました。

主人公の千鶴は小学校のころに母から捨てられたことが原因で、自分の人生は上手くいっていないという風に考えていました。

このような考え方は自分の選択に責任をとるのが難しい、小学生や中学生なら許されるかもしれません。

しかし、大人になってまでこのような考えを持っていた千鶴は、人生の悪かった原因を母である聖子に責任転嫁していただけでしかありませんでした。

千鶴はさざめきハイツに来てからもそのことになかなか気づけませんでしたが、美保を見て彩子に対して自分と同じような態度をとっていたことから、自分の選択の失敗の原因を聖子に押し付けていただけだと気づきます。


また、聖子も聖子の母(千鶴の祖母)がなくなるまで人生を母に支配されながら生きていました。

しかし、聖子は母が亡くなったことをきっかけに、今までの全てを否定してでも自分らしい人生を送ることを決意しました。


彼女たちを見ていて「人生は誰のもの」という質問を問われたら、「人生は自分のものだ」と堂々と答えることができる人間になりたいと感じさせられました。





行動することで、つかめる幸せ


千鶴を見ていると幸せをつかむために行動することが大切だということを伝えられました。

千鶴は賞金目的とはいえラジオに自分の思い出を投稿するということがきっかけで自分の人生を大きく変化させることになりました。

もし、千鶴がラジオに投稿しなかったり、恵真と会わなかったり、いつまでたっても聖子と向き合おうとしなければ千鶴は幸せを掴めなかったに違いありません。

彼女は行動したからこそ、母が自分を捨てた真の理由を知ることができ、人として成長することができました。


親や先生の言う通りのことをする人間は世間から見たら良い子に見えるのかもしれません。

しかし、そのようなしつけを行っていると自分の行動に責任をとることができない人間が育ってしまいます。

子どもの幸せを願うのであれば、自分で行動することができて自分で幸せをつかめるような教育をする必要があるのだなと感じました。



まとめ


『星を掬う』は自分の人生に責任を持つことと行動することの大切さを教えてくれる作品でした。

また、物語をとおして人の暖かい心というものが常に感じることができました。

本屋大賞受賞作家の作品として申し分ない作品ですので未読の方はぜひ読んでみてください。







22082805_s

ベストセラーとして有名なジェリー・ミンチントンさんの『うまくいっている人の考えかた』を読みました。

この本では全100個のうまくいっている人が自尊心を高めるために取り入れている考え方が紹介されています。

この記事では、その中で私がすぐにでもとりいれたいと感じた考え方を5個紹介していきます。



うまくいっている人の考え方


地位や財産で人を判断しない


私たちは子どものころから、〇〇先生は〇〇大学出身だから偉いなどとその人の持つ能力ではなく地位や名声が高い人は優秀であると思うように教育されてきました。

もちろん地位や名声が高い人が優秀だというのは間違いないが、あくまでそれはうわべだけのものです。

うわべだけでその人を判断するのは間違いで、もしかしたら内面をみれば自分の方がその人より能力が高い可能性があります。

そのため、自尊心を高めるためにはうわべだけではなく内面をみて自分と比べるということが重要です。

私は友人が大企業に勤めていることを羨ましがることがありましたが、この考えをみてそのようなことを羨ましがっているなんてあほらしいということに気づくことができました。


自分のしたいことをする


自分のしたいことをするなんて生きていて当たり前だと思う人が多いかもしれません。

しかし、実際は私たちは子どものころから「人からどう思われるか気にしなさい」と親や先生に言われて育ってきました。

そのため、人の目を気にするあまり意外と自分のしたいことはできていません。


例えば今自分が安定した企業に勤めていたとします。

その仕事をやめてベンチャー企業などで新しい仕事に挑戦しようとしても、周りの多くの人からは今の会社を辞めるなんてもったいないと思われるでしょう。

人からどう思われるか気にしている人は、それが原因で安定した企業に残ってしまうでしょう。

しかし、自分の意見を他人の意見よりも優先することができれば、自分のしたいこともできるし、新しく働き始めたベンチャー企業で新しい発見ができるかもしれません。

こうしたことから自分の生き方を自由に選んでしたいことをするのは人生を楽しむために大切なんだなと気づくことができました。


批判を余裕を持って受け入れる


他人から批判されたときどうしても自分の人格が否定されたと思いその人の意見を素直に受け入れることができません。

しかし、実際はあくまで自分に批判した他人の多くはアドバイスをくれるつもりで批判してくれる人が多いです。

そこで他人から批判されたときは、その批判から何か学べることがあるかもしれないとプラスに受け入れるようにしましょう。

そうすることで自分をより成長させることができます。

私も他人から批判されるとついつい反論してしまうことが多いのですが、これを読んで他人から批判は勉強の機会として受け取ろうと思うようになりました。






今が幸せだと気づいている


うまくいっている人たちは現在の状態に幸せを感じている人が多いです。

それとは違い、うまくいっていない人は転職すれば幸せになるなどまだ手に入れていないものを求めて、それが手に入れば幸せになれると感じています。

しかし、現実ではその目標が達成できない場合などが多々あります。

そもそも何かを得るのを待たないと幸せを手に入れることができないという考え方が間違っています。

もちろん目標が達成できれば幸せですが、それに向かって努力している今も幸せだと考えるようにしましょう。

目標を達成するまでは苦しい期間だと私も良く感じてしまっていたのですが、これを読んでそれに向かって努力できていることが幸せだと思うようになりたいと感じました。


自尊心を高める


これまで自尊心を高めるための様々な考え方を紹介してきました。

ここでは自尊心がなぜ低くなるのか考えていきます。

自尊心が低いのには考え方に原因があります。

私たちの多くは子どものころから私たちを育ててくれた親の影響が強く、親からつまらない人間だと言われたらそれを素直に受け入れてしまいます。

そのため自尊心を高めるためには、一度そのネガティブな考え方を捨てる必要になります。

自尊心を高めるためにはこの本を含めて自尊心を高めるための本を多く読み、昔の考え方を捨てるしかありません。


これを最初に読んだときなんだそれはと私は思ってしまいましたが、確かに自分の考え方を見直してみたら親からの影響が強いことが分かりました。

そのため、自分の自尊心を高めるためには本当に考え方をがらりと変える必要があるのだということを認識しました。



まとめ


本記事では『うまくいっている人の考えかた』で紹介されている考え方の一部を紹介しました。

この本で書かれている他の考え方もとても参考になるので、本記事を読んで興味を持ってくださった人は読んでみたらいかがでしょうか。






3884509_s

陰キャITエンジニアであるとしおが雑談力を鍛えたいと思い、

五百田達成さんの『超雑談力 人づきあいがラクになる 誰とでも信頼関係を築ける』という本にのっていた雑談テクニックを1ヶ月ほど実践してみました。

個人的に1ヶ月実践してみたなかで特に役にたったというテクニックを紹介していきます。


ちなみにこの本での雑談とは、

「微妙な間柄の人と、適当に話をしながら、なんとなく仲良くなる」

という繊細な会話の方式のことです。

仲の良い友人とかと話す場合とは、また違うテクニックであるということに注意してください。



雑談力を上げるテクニック3選



否定とアドバイスは絶対にしない


人というものは相手から意見を否定されてしまったりすると、どうしても心の壁を作ってしまいます。

そこで見知らぬ人と仲良くなるためには、相手の意見を否定したりせずとにかく肯定することが大切です。

これを実践するようになってから相手との会話が以前に比べると途切れにくくなり、会話相手からどんどん話を広げてくれるようになり雑談をするのがとても楽になりました。

自分の本心では否定したり、アドバイスしたい場合でもとにかく肯定することで心の壁を取り除きましょう。


共通の知人の話をせず、共通の興味を探す


仕事関係で知り合った人と話すときに、相手と仲良くなるために共通の知人の話をしてしまいがちでした。

しかし、これはお互い共通の知人の話をしているだけで、お互いの話をしていないため表面的に盛り上がっていても次につながりません。

このような失敗をしないために自分と会話相手の共通の話題を探すようにしましょう。

例えば子どもが最近生まれたなら子どもが生まれた話でもいいです。

共通の興味がある話題を見つけることで、お互いに会話が弾み雑談が盛り上がりやすくなり、知人の話をしているときよりも関係が深まります。

これを実践してみて、知人の話をしているだけよりも次にであったときにお互いのことを覚えていて会話が盛り上がりやすくなりました。





「なぜ」と尋ねるのではなく、「どう」と尋ねる


雑談をしているとついついなぜ(Why)と理由を尋ねがちです。

雑談って意味のない話をしていることが多いので、正直理由を尋ねられても困ることが多いです。

そこで質問で話を盛り上げたい場合は、どう(How)を尋ねるようにしましょう。

例えば、マヨネーズが嫌いな人と雑談をしているときに、

「どうしてマヨネーズが嫌いなの」ではなく、「どのぐらいマヨネーズが嫌いなの」といった風に訪ねてみましょう。

このようなHowの質問ってWhyの質問と違って深く考えなくてよいのでテンポよく雑談が進みます。

質問するときにこれを意識するだけで沈黙の時間が少なくなり、以前より雑談が楽になりました。



まとめ


今回紹介したテクニックはあくまで私自身が役にたったテクニックですので人によって役に立たないかもしれません。

そういう人はぜひ『超雑談力 人づきあいがラクになる 誰とでも信頼関係を築ける』を読んでみてはいかがでしょうか。

この本には今回紹介したテクニックも含めて全部で36個の雑談テクニックが紹介されています。

その中できっと自分が使いやすい雑談テクニックを見つけることができるに違いません。

ぜひ雑談力を上げて、他人と話すのを苦痛と感じるのではなく楽しい時間にしてみましょう。





PXL_20211225_135232052_1

森見登美彦さんの『熱帯』を読みました。

帯に売り文句として「あなたが思うより不可解です。」と書かれていたが、その売り文句通り本当に不可解な物語でした。

物語中で奇妙な小説として登場した熱帯に、本書を読み進めていくにつれて自分もどんどんとらわれていきました。

この記事では私なりの熱帯の考察を書いていきます。



『熱帯』のあらすじ


森見登美彦が学生時代に読んでいた「熱帯」という本がある。

その本は、「汝にかかわりなきことを語るなかれ しからずんば汝は好まざることを聞くならん」という謎めいた文章で始まる奇妙な小説だ。

内容もとにかくなんだかよく分からない小説なのだが、森見はその本に心を惹かれ大事に毎日少しずつ読んでいた。

森見がその本を読み始めてから三日目に熱帯は森見の手元から忽然と消えてしまう。

その本を買い直せばいいと思っていた森見であったがいくら書店を探せどその本は森見の前に二度と現れることはなかった。

そのため森見は熱帯の結末を知らない…。

それから数十年後、有名作家となった森見は再び熱帯を東京へとでた。

東京にはすでに熱帯に夢中になった一団がいたが、彼らもみな熱帯を読んでいる途中にその本が消失してしまい熱帯の結末を知らない。

熱帯を読んだものはみんな物語にでてくる摩訶不思議な光景に心をとらわれている。

熱帯とはどのような小説なのか、そして森見たちは熱帯の結末を知ることができるのか。

一つの物語を追いかけた摩訶不思議な物語がここにはじまる。


感想(ネタバレあり)


熱帯を読了した直後の私の感想はけっきょくどういうことだというものだった。

佐山尚一が書いた熱帯を追う物語を読んでいたと思っていたのだが気づいたら、佐山尚一が不可思議な世界で書いた熱帯という物語に出会って物語はしめられていた。

読んでいる途中は場面が最初の森見さんが熱帯を探しているシーンに戻ってくるとばかり思っていたため正直衝撃的な終わり方すぎて言葉を失ってしまった。

白石さんに手紙を残した池内氏は、京都で消息不明となった千夜さんは、熱帯という物語を残して消えていった佐山尚一は…自分の頭のなかを整理することができない。

熱帯という不可思議な物語の真実を見つけ出す作品を読んでいたと思ったら、いつの間にか物語の中で物語が語られていく、千夜一夜物語のような作品となっていき、いつしか自分が熱帯という世界に囚われていたのだ。

熱帯の不気味さに正直冷汗が止まらない…。

とりあえず落ち着いてもう一度熱帯を読み直して自分なりに熱帯を考察してみることにした。





自分なりの考察


よく分からない考察ではあるが、私たちは熱帯を探す物語ではなく、熱帯を途中まで読んだ森見さんが書いた熱帯という物語を読まされていたのだ。

自分で文章を書いていてもよく分からないがここで熱帯という物語について整理してみたい。

熱帯という物語が複数個あるとしよう。

一つは森見さんや白石さん、池内さんが追っていた熱帯。これを熱帯1としよう。

この熱帯1は佐山尚一が5章の最後で一人書き続けていた手記だと思ってよいだろう。

彼らの世界で佐山尚一なる人物が存在を消しているのは、おそらくその世界に存在していた佐山尚一という人物が別の世界線に飛ばされてしまったからではないのだろうか。

後記の佐山の言葉から佐山が別の世界線で生きていることがなんとなくだが想像できる。


二つ目は、千夜さんが持っていた熱帯だ。

作中で千夜さんが消えたときに手紙に残した「私の『熱帯』だけが本物なの」という言葉は印象的だ。

これは恐らく熱帯という物語に登場した人物はそれぞれの熱帯の世界で感じた熱帯という作品を持っているという意味だと私は解釈した。

千夜さんは佐山が体験した熱帯という物語の中で一人の登場人物として現れた。

おそらく千夜さんの持っていた熱帯は物語の途中で、千夜さんの視点に切り替わって進められていっているのではないのだろうか。

千夜さんが持つ熱帯を熱帯2としよう。


そして最後は私たちが読む、森見登美彦が書いた熱帯だ。これを熱帯3としよう。

我々は物語の途中で熱帯1を読んでいたと思っていたのだが実際読んでいたのは森見さんが書いた熱帯3だったのだ。

おそらく森見さんは物語を読んだ人がその物語を書いても同じ物語を作ることはできないということを伝えたかったのではないのだろうか。

物語が終わったように感じなかった熱帯を参考に私が熱帯を書いたら部分的には元の熱帯という作品に似たような小説になるかもしれないが、それはあくまで私の解釈によって自由に書かれた熱帯になるに違いない。

人によって物語の解釈は千差万別だということを森見さんは読者に伝えたかったのではないのだろうか。

ここまで読んでいるとよく分からない考察だが、自分が理解しているつもりになっていたらそれでいいのだろう。



まとめ


この物語をどう感じるかは人によってかなりの差があるだろうが私的には非常に満足できる作品であった。

千夜一夜物語を知っていたらこの作品をより楽しめたのかもしれないので、いつかは千夜一夜物語を読んで再び熱帯を読んでみたい。







本記事ではVSCodeでターミナル起動時に自動的にconda activateを行う方法を紹介していきます。




ターミナル起動時にconda activateさせる


VSCodeを起動して左下にある歯車アイコン→設定の順でクリックしていきます。

キャプチャ

キャプチャ2

設定画面が開けたらユーザの検索ボックスにterminal.integrated.profiles.windowsと入力して検索を行います。

見つかったらsetting.jsonで編集をクリックします。

キャプチャ

Command Promptのargsを以下のように設定してください。

Anaconda3までのパスは各自の環境によって合わせましょう。

"terminal.integrated.profiles.windows": {

        "PowerShell": {
            "source""PowerShell",
            "icon""terminal-powershell",
        },
        "Command Prompt": {
            "path": [
                "${env:windir}\\Sysnative\\cmd.exe",
                "${env:windir}\\System32\\cmd.exe"
            ],
            "args": [
                "/K",
                "~\\Anaconda3\\Scripts\\activate.bat",
                "\\Anaconda3"
            ],
            "icon""terminal-cmd"
        },
        "Git Bash": {
            "source""Git Bash"
        }
    },

書き換えれたら、settings.jsonを保存してVSCodeを再起動します。

これでPythonコードを開いている状態で新しいターミナルを起動すれば自動的にActivateされるようになります。





C++で微分を実装してみたので忘備録として記録しておきます。


数値微分を実装する


f(x)=f(x+Δx)f(x)Δx

まずは典型的な上記の式の前進差分近似を使った方法で微分をしてみます。

#include <iostream>

double func(double x){
    return x*x;
}

double numericalDiff(double (*f)(double), double xdouble eps=0.001){
    return (f(x + eps) - f(x)) / eps;
}

int main(void){
    double (*pfunc)(double);
    pfunc = func;
    printf("%lf"numericalDiff(pfunc2));
    return 0;
}

4.001000

多少は誤差があるものの微分ができました。

関数ポインタを使ってnumericalDiffに微分したい関数を渡しているため、他の式に対しても微分を行うことが可能です。

また、引数epsの値を小さくすることでより精度の高い微分を多なうことができます。



誤差の少ない数値微分


前進差分近似を使うよりも中心差分近似を使った微分の方が誤差が少なくなるみたいですのでそちらも実装していきます。

先ほどのコードからnumericalDiff関数だけ以下の式に合わせて変更していきます。

f(x)=f(x+Δx)f(x - Δx)x


double numericalDiff(double (*f)(double), double xdouble eps=0.001){
    return (f(x + eps) - f(x - eps)) / (2*eps);
}

4.000000

中心差分近似を使うことで上記のサンプルに対しては誤差なく微分を行うことができました。



livedoorブログにソースコードを載せるときに途中でソースコードが見切れてしまうことがあります。

そこで今回はpreタグにoverflowプロパティを設定して、ソースコードが見切れた時にスクロールバーを表示させるようにしていきます。

livedoorブログのマイページから「プログ設定」を選択します。

キャプチャ

デザイン/ブログパーツ設定から「PC」を選択します。

キャプチャ

カスタマイズを選択します。

キャプチャ

/* 記事本文
----------------------------------------------- */

というコメントがある部分の下に以下のコードを追加します。

.article-body-inner  blockquote
, .article-body-inner  pre {
    white-space: nowrap;
    overflow: auto;
    background-color: #303030;
    padding: 5px 15px;
    margin: 5px 0;
    color: #595d68;
}

このコードは以下の記事を参考に作成したのですが、white-space: nowrap;という記述が抜けているとスクロールバーが正しく表示されないようです。



cssが記述できたら保存をクリックしてください。

これで設定完了です。

「<pre><code>ソースコード</code></pre>」といった感じに記述すると以下のようにソースコードが見切れているときにスクロールバーが表示されるようになります。

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa


4267000_s

自然言語処理関連のソフトを作る機会があり、最近のメジャーな日本語自然言語処理ライブラリとしてGiNZAというものがあるという話を聞いたので試しに使ってみました。


GiNZAとは


GiNZAとはリクルートが国立国語研究所との共同研究成果をもとに開発した日本語自然言語処理ライブ来です。

形態素解析器であるSudachiPyと機械学習部分であるspaCyを合わせたライブラリのようです。

特徴は従来のspaCyは日本語に対してはMeCabをバックエンドに形態素解析ができる程度でした。

しかし。GiNZAの登場により最先端の機械学習技術を用いた日本語自然言語処理が簡単にできるようになったようです。



GiNZAのインストール


今回は2021年9月現在GiNZAの最新バージョンであるGiNZA v5.0をインストールしていきます。

GiNZA v5はインストール時に解析モデルのパッケージを指定する必要があるようで、解析度重視の場合は以下のコマンドでインストールしましょう。

pip install -U ginza ja-ginza-electra

速度重視の場合は以下のコマンドでインストールしてください。

pip install -U ginza ja-ginza

両方使い分けたい場合は、両コマンドとも実行してください。

インストールができたら動作を確認してみましょう。

ginza
すもももももももものうち。

# text = すもももももももものうち。
1       すもも  すもも  NOUN    名詞-普通名詞-一般      _       3       nsubj   _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading=スモモ|NE=B-OTHERS|ENE=B-Flora
2       も      も      ADP     助詞-係助詞     _       1       case    _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading=モ
3       もも    もも    NOUN    名詞-普通名詞-一般      _       5       nsubj   _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading=モモ|NE=B-OTHERS|ENE=B-Animal_Part
4       も      も      ADP     助詞-係助詞     _       3       case    _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading=モ
5       もも    もも    NOUN    名詞-普通名詞-一般      _       7       nmod    _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading=モモ|NE=B-OTHERS|ENE=B-Color_Other
6       の      の      ADP     助詞-格助詞     _       5       case    _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading=ノ
7       うち    うち    NOUN    名詞-普通名詞-副詞可能  _       0       root    _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=ROOT|NP_B|Reading=ウチ
8       。      。      PUNCT   補助記号-句点   _       7       punct   _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=CONT|Reading=。




PythonでGiNZAを操作する


インストールができたろころでPythonでGiNZAを操作していきましょう。

1.文境界解析


文境界解析は文章から文の境界を検出する処理です。

import spacy

nlp = spacy.load('ja_ginza_electra')
doc = nlp('銀座でランチをご一緒しましょう今度の日曜日はどうですか。')

# 文境界解析
for sent in doc.sents:
    print(sent)

銀座でランチをご一緒しましょう
今度の日曜日はどうですか。

"。"がなくても文の境界が判断できていますね。


2.形態素解析


形態素解析は文章を単語に分割すると同時に単語の品詞などを推測する処理です。

import spacy

nlp = spacy.load('ja_ginza_electra')
doc = nlp('銀座でランチをご一緒しましょう。')
for sent in doc.sents:
    for token in sent:
        print(token.i, token.orth_, token.lemma_, token.pos_, token.tag_, token.dep_, token.head.i)
    print('EOS')

0 銀座 銀座 PROPN 名詞-固有名詞-地名-一般 obl 5
1 で で ADP 助詞-格助詞 case 0
2 ランチ ランチ NOUN 名詞-普通名詞-一般 obj 5
3 を を ADP 助詞-格助詞 case 2
4 ご ご NOUN 接頭辞 compound 5
5 一緒 一緒 VERB 名詞-普通名詞-サ変可能 ROOT 5
6 し する AUX 動詞-非自立可能 aux 5
7 ましょう ます AUX 助動詞 aux 5
8 。 。 PUNCT 補助記号-句点 punct 5
EOS






3.係り受け解析


係り受け解析は単語間の関係を解析する処理です。

以下のサンプルは係り受け木をSVG形式で保存しています。

# -*- coding: utf-8 -*-
# 文境界解析

import spacy
from spacy import displacy
from pathlib import Path

nlp = spacy.load('ja_ginza_electra')
doc = nlp("銀座でランチをご一緒しましょう。")
for sent in doc.sents:
    svg = displacy.render(sentstyle="dep")
    file_name = "kakari.svg"
    output_path = Path("./" + file_name)
    output_path.open("w"encoding="utf-8").write(svg)

キャプチャ


4.固有表現抽出


固有表現抽出は国名、人名などの固有表現を抽出する処理です。

import spacy
from spacy import displacy

nlp = spacy.load('ja_ginza_electra')
doc = nlp("山田さんと銀座でランチをご一緒しましょう。")
for ent in doc.ents:
   print(
       ent.text+','# テキスト
       ent.label_+','# ラベル
       str(ent.start_char)+','# 開始位置
       str(ent.end_char)) # 終了位置

山田,Person,0,2
さん,Title_Other,2,4
銀座,City,5,7



5.単語の分散表現


GiNZAでは学習済みの単語分散表現(word2vec)も使用できるみたいです。

分散表現は300次元ですが今回は最初の2次元だけ表示します。分散表現が学習されていない単語はALL 0になるみたいですね。

また、L2ノルムも取得することができます。

分散表現はja_ginza_electraでは学習済みモデルがないみたいなので、ja_ginzaを使用しています。

import spacy

nlp = spacy.load('ja_ginza')  
doc = nlp("銀座でランチをご一緒しましょう。")
for token in doc:
    print(token.text, token.vector[:2], token.has_vector, token.vector_norm)

銀座 [ 0.55935055 -0.02516028True 3.8992517
で [-0.09195102 -0.10327693True 1.8796002
ランチ [ 0.23565347 -0.08456942True 3.8218849
を [-0.19509408 -0.13202968True 2.0958433
ご [0.33537257 0.21526141True 2.8017106
一緒 [-0.1381576  -0.10699644True 2.5291438
し [ 0.00739705 -0.32393304True 2.2611105
ましょう [0. 0.] False 0.0
。 [ 0.12551211 -0.1708449 ] True 2.4466825

また、以下のように書くことで文のベクトル表現なども簡単に表現できます(各単語のベクトルを足して平均を求めている)。

import spacy

nlp = spacy.load('ja_ginza')  
doc = nlp("銀座でランチをご一緒しましょう。")
print(doc.vector[:2]) 

0.09312034 -0.08128325]





まとめ


GiNZAの基本的な処理について一通り触れてみましたが正直むちゃくちゃ便利です。

spaCyに関する知識が少ないのでGiNZAを有効活用できるようにそのあたりも勉強していこうと思います。





以前、OpenCVを使って顔認識をしたのですが、dlibというライブラリを使うと顔の細かいパーツのランドマークが検出できると聞いたので試しに動かしてみました。




dlibのインストール


まずは事前準備をしていきます。

dlibのインストールは以下のコマンドで行うことができます。

pip install dlib

dlibのインストールができたら、dlibの公式サイトから学習済みモデルをダウンロードしましょう。



「shape_predictor_68_face_landmarks.dat.bz2 」というファイルが顔から68個のランドマークを検出する学習済みモデルです。

また、上記の物の他に処理が軽い学習済みモデルとし「shape_predictor_5_face_landmarks.dat.bz2 」という顔から68個のランドマークを検出するモデルがあります。

今回は「shape_predictor_68_face_landmarks.dat.bz2 」を使用していきます。





写真から顔のランドマークを検出する


dlibの準備ができたところで顔のランドマークを検出してみましょう。

今回学習済みモデルは実行ファイルと同じパスにおいています。

import dlib
from imutils import face_utils
import cv2

# 顔検出ツールの呼び出し
faceDetector = dlib.get_frontal_face_detector()

# 顔のランドマーク検出ツールの呼び出し
facePredictor = dlib.shape_predictor('shape_predictor_5_face_landmarks.dat')

# 検出対象の画像の呼び込み
img = cv2.imread('検出したい画像のパス')

# 顔検出
faces = faceDetector(img1)

# 検出した全顔に対して処理
for face in faces:
    # 顔のランドマーク検出
    landmark = facePredictor(imgface)
    # 処理高速化のためランドマーク群をNumPy配列に変換(必須)
    landmark = face_utils.shape_to_np(landmark)

    # ランドマーク描画
    for (i, (xy)) in enumerate(landmark):
        cv2.circle(img, (xy), 1, (25500), -1)

# 顔検出ファイルを出力
cv2.imwrite("dLibSample-output.PNG"img)

以下の画像を今回は入れてみました。

woman-1274056_1280

分かりにくいので顔部分をアップしますが確かにランドマークが検出されていますね。

キャプチャ

顔のランドマークの番号は以下のように1~68番まで割り当てられているみたいです。

figure_68_markup

https://ibug.doc.ic.ac.uk/resources/facial-point-annotations/より


ちなみに「shape_predictor_5_face_landmarks.dat.bz2 」のモデルを使用した場合は以下のような出力になりました。

キャプチャ



まとめ


dlibを使って顔のランドマークを検出してみました。

ランドマーク検出って論文など見ていたら難しそうだというイメージがあったのですが今はこんなに便利なライブラリがあるんですね。

せっかくだからこのdlibを使ってなにかおもしろいソフトを作ってみたいですね。

OpenCVではうまくいかなかったface swapでも試してみようかな。






↑このページのトップヘ