【Python3】文字列変数をraw文字列で出力する

変数の中身のエスケープシーケンスは自動的に解釈されてしまいます。
例えば下記のようになります。

>>> s = '1\n2\n3\n'
>>> print(s)
1
2
3

変数に対してPythonのraw string記法は使用できません。
そこでreprを使用すると、

>>> print(repr(s))
'1\n2\n3\n'

このようになります。

参考

How to print raw string data from a variable - Python

6ヵ月間Netflixを契約した結果を残しておく

明日が更新日だから解約しなきゃ……

そう思いつつも、毎度解約を忘れてしまい、無駄にお金を払った結果を残しておこうと思います。

俺、不労所得者になったらまた契約するんだ……。

オススメのドラマシリーズ

ハウス・オブ・カード

f:id:taka_say:20160524191453j:plain
恐らくNetflix契約中に見た作品で一番気に入った作品。 Netflixオリジナル。
現在シーズン5まで公開中で、続編は制作中。 ホワイトハウス入りを目指す男の復讐心と野心を描いた力作。
ネット配信で公開されたドラマシリーズで初めてエミー賞を受賞したとか。
フランシスから視聴者への語りかけが段々とツボになってくる。

NARCOS

f:id:taka_say:20160524191532p:plain
実在の麻薬王パブロ・エスコバル麻薬取締官の戦いを描いた作品。 Netflixオリジナル。
現在シーズン1が公開されており、シーズン2も制作進行中である。
独特のテンポが好きだったシリーズ。
麻薬戦争の激しさを体感できる。

Breaking Bad

f:id:taka_say:20160524191653j:plain
ガンで余命宣告された化学教師のドラッグ売買物語。
シーズン4の6話まで視聴。
歯車が狂っていく様が面白い。

オススメの映画作品

WINTER ON FIRE

f:id:taka_say:20160524191708j:plain:w600
ウクライナ国民のデモから発展した革命運動を追ったドキュメンタリー作品。Netflixオリジナル。
生々しい運動の様を見て取れる。
この映像を見て色々と考えることもあるように思われる。

ビューティフル・マインド

f:id:taka_say:20160524191734j:plain:w300
実在のノーベル賞受賞数学者であるジョン・ナッシュを描いた作品。
前情報なしで見たほうが恐らく楽しめるだろう。

インターネットの申し子 天才アーロン・シュウォルツの軌跡

f:id:taka_say:20160524191746j:plain
インターネットの時代に生きた天才を追ったドキュメンタリー作品。
エンジニアはもちろん、それ以外の人たちが見ても楽しめると思う。
思考への良い刺激を体感するだろう。

フルメタル・ジャケット / プライベート・ライアン / ローン・サバイバー

f:id:taka_say:20160524191800j:plain:w300
ミリタリー系作品のオススメ群。
フルメタル・ジャケットプライベート・ライアンはやはり定番だし、比較的新しめのローン・サバイバーの映像も素晴らしい。

キャッチ・ミー・イフ・ユー・キャン

f:id:taka_say:20160524191819j:plain:w450
実在人物の自伝を基に制作された作品。
「天才詐欺師」とそれを追うFBI捜査官の物語である。。

ヒトラー ~最期の12日間~

f:id:taka_say:20160524191835j:plain
おっぱいぷるんぷる〜んで有名なあの映画。
ヒトラー役の鬼気迫る演技はやはり見所。

その他見た作品

レッドバロンは比較的面白かった印象。
U・ボートは長い。

割とドキュメンタリー系を多く見ていたことに書き出して気付いた。
この中だとグレート・ディベーターがオススメ。

STEVE JOBS 1995の中では、日本という言葉がジョブズから出てくるシーンもあるため必見。

  • アルゴ
  • BEAST OF NO NATION
  • 鋼の錬金術士 嘆きの丘の聖なる星
  • ゴッドタン キス我慢選手権 THE MOVIE

キス我慢選手権は少しユーモアが足りない感じがした。

見ようと思ってた作品

時間の関係で見られなかった種々の映像作品たち。
ドキュメンタリーとミリタリーが多めか。

まとめ

意外とたくさん見ていたような気もするし、大した数を見なかったような気もする。
映像作品を見るのは楽しいけど、やはり読書なんかと比べると時間あたりに得られるものが少ない。
趣味としてある程度はいいけど、見放題を無尽蔵に、という楽しみ方はやはりいけないなと感じた6ヵ月間でした。

余談

後から気が付いたけど、先に解約申し込んでおいても、契約終了日まで動画閲覧できるような……。

黒い家と青の炎を読んだ

久しぶりに小説を読了し、余韻に浸っている。
無性に気分を述べたくなったので殴り書き。

そもそものきっかけは、ゴールデンウィーク中にKindleで開催されていた角川フェアであった。 50%引き+20%のポイント付与ということで、何か面白い本は無いだろうかと探していた。

齋藤孝著の大人のための読書の全技術をはじめとして、反応しない練習 あらゆる悩みが消えていくブッダの超・合理的な「考え方」ペンタゴン式 ハードワークでも折れない心のつくり方といった、興味の惹かれる書籍をいくつか購入した。

そんな折、セール一覧の中に、貴志祐介の著作がかなりの数含まれていることに気付いた。
貴志祐介といえば、近年(というほど近年ではないが)アニメ化した新世界よりの著者という印象が強かった。 それと同時に、人伝に聞いたクリムゾンの迷宮の印象があり、一度読んでみたいと思っていた作家だった。

ようするに、Kindleセールで貴志祐介の作品が売られているというのは、私にとって幸運であった。

どのタイトルを購入するかで少し悩んだものの、結局黒い家と青の炎を選択した。 特筆する理由は無かったが、これらの本を読めば、貴志祐介の作品を感じられそうだと考えたからだ。

結果からいうと、この選択は成功だったように思う。まあ、どの作品を選んでも成功だった可能性は極めて高いように思われるが。

はじめに、黒い家を読んだ。
読書感想文などというものに熱心に取り組んだことがない経験上、的確な感想を述べることは難しい。 ただ、一言で表すなら、面白い、それに尽きる。 自分のイメージの中で暴れまわる登場人物の姿に、自分自身でハラハラするという現象に、我ながら胸躍った。

作中で恵が述べる、

問題は、あの人たちが共通して持っている病的なペシミズムなの。人生や世界に対して抱いている、底知れぬ絶望よ。彼らは、自分たちの見るものすべてに、その暗い絶望を投影するの。人間の善意や向上心が世の中を良くするなんていう可能性は、決して認めようとしないの。(中略)社会に大きな害毒を流しているのは、わかりやすい人格障害を持った人よりも、むしろ、そうした一見普通の人間なんだと思うわ

という箇所が特に印象に残った。
なんというか、ペシミズムという単語が頭に残る終わり方であった。

次に、青の炎を読んだ。
黒い家とは打って変わって、高校生が主人公の、少し甘酸っぱさを覚える作品である。
途中、思わず読み進めることが困難になる程に、主人公秀一の視点に同調してしまった。

西欧が『罪の文化』で日本が『恥の文化』を持っているとすれば、日本では、露見しない犯罪は、犯罪ではないことになるではないか。つまり、日本人は、民族的に、世界で最も完全犯罪に向いているのかもしれない。

という秀一の考えは、一見すると説得力がある。
しかし最終的には、単なる事実という重責に押しつぶされることとなる。
秀一がパラレルワールドの可能性を考えている時、私もまたその可能性を強く願ってしまった。 他人事とは思えない、切迫した感情の揺れ動きを感じた作品であった。
紀子かわいい。

個人的に好きな文章は以下。

良い曾根隆司とは、死んだ曾根隆司だけだが、今週のように、ほとんど意識を失った状態の曾根隆司も、ましな部類だとは言えた。

秀一が想像した未来。
回避するために選んだ道。
最期まで、ある種秀一らしさが一貫していた幕引きであったように思う。

どちらの作品にも共通して夢やロードバイクが頻繁に出てくる点は、連続で読んだこともあってか、印象深かった。


長々とあまり内容のないことを書き連ねてしまったが、難しいことは抜きにして、この週末を愉快なものにしてくれた二つの作品とその著者に感謝の意を表したい。
情景の想像がこんなに胸躍る行為になるとは。
映像作品では味わえない充足感に浸りながら、今夜は休むとする。

【Python】日本語Wikipediaのダンプデータから本文を抽出する

日本語Wikipediaのダンプデータ中の本文を利用したい。
ただ、単純にパースするだけではWiki記法の記号等が邪魔である。
というわけでWikipedia Extractorを利用して本文だけテキストとして抽出します。

Wikipedia Extractorの他にもパースするためのライブラリはいくつかあるようなので、用途によっては別のライブラリを使用したほうが良さそう。

Alternative parsers - MediaWiki

環境

Mac OSX Yosemite
Python v2.7.11
Wikipedia Extractor v2.4
20GB程度のディスク空き容量

出力結果例

抽出処理後に生成されるXMLファイルは下記のようなdoc要素の集まりになります。

<doc>...</doc>
<doc>...</doc>
...
<doc>...</doc>

具体的な例としては下記のようになります。

<doc id="20612" url="https://ja.wikipedia.org/wiki?curid=20612" title="カブ">
カブ

カブ(蕪)はアブラナ科アブラナ属の越年草。代表的な野菜(根菜類)の一つで、別名はカブラ、カブナ、カブラナ、スズナ(鈴菜、菘)など数多い。
「カブ」の語源は諸説あり、頭を意味する「かぶり」、根を意味する「株」、またはカブラの女房詞である「オカブ」からとされている。
江戸時代は漢語で蕪菁(ブセイ、wuqing)、蔓菁(マンセイ、manqing)、扁蘿蔔(ヘンラフク、bianluobo)などと呼ばれていた。
かった。
(中略)
ロシアでは『おおきなかぶ』のように民話の題材になるほど馴染みのある野菜である。
一方、カブがあまり好まれないフランスでは、大根役者に相当する「カブ役者」という言い回しがある。
</doc>

ここで、doc要素の属性idおよびurlは、

  • id:ユニークシリアルナンバー
  • url:オリジナルのWikipediaページURL

となります。

準備

日本語Wikipediaダンプデータ

まずは日本語Wikipediaのダンプデータを下記から入手します。

Index of /jawiki/latest/

jawiki-latest-pages-articles.xml.bz2が記事本文を含むダンプデータですね。
当然ですがファイルサイズが大きいので注意。

Wikipedia Extractor

下記サイト内のDownloadsからWikipedia ExtractorのPythonスクリプトを直接ダウンロードします。

Wikipedia Extractor - Medialab

抽出作業

WikiExtractor.pyjawiki-latest-pages-articles.xml.bz2を同一ディレクトリに置き、下記のコマンドを実行するのみで基本的には終了です。

WikiExtractor.py -b 500K -o extracted jawiki-latest-pages-articles.xml.bz2

これで、extractedディレクトリ下に、500KB毎に区切られた抽出後ファイルが生成されていきます。
公式では-cオプションを設定して圧縮していました。
私はとりあえずそのままで構わないので、このオプションは外しました。

次に、このままではファイルが分割状態で使用が面倒なため、一つのファイルにまとめます。

find extracted -name 'wiki*' -exec cat {} \; > text.xml

これで全ての本文データがtext.xmlファイル内に格納されました。
私の試行時では、およそ2.5GBくらいのファイルになりました。

まとめ

というわけで、無事日本語Wikipediaのダンプデータから本文のパースおよび抽出が完了しました。
偉大なライブラリ製作者に感謝。

参考

GitHub - attardi/wikiextractor: A tool for extracting plain text from Wikipedia dumps

実行時のオプション等はこちらから。

【Python】matplotlib.pyplotインポート時にPython is not installed as a frameworkのRuntimeError

実践機械学習システムで手を動かしていたところ、import matplotlib.pyplot実行時に下記のようなエラーに遭遇したため解決策のメモ。

RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are Working with Matplotlib in a virtual enviroment see 'Working with Matplotlib in Virtual environments' in the Matplotlib FAQ

環境

Python 2.7.11
matplotlib 1.5.1

解決策

~/.matplotlib下にmatplotlibrcを作成し、

backend : TkAgg

と書き込んで保存。

対話環境を再起動してmatplotlib.pyplotを読みこめば上手くいくはず。

USキーボードの配列を英語用に切り替え

USキーボードをPCに接続すると、英語用の配列(101/104)ではなく、JIS用の配列(106/109)で認識されてしまいます。
このままではUSキーボードの意味がないので、きちんと英語用配列として認識するようにします。

注意
レジストリを編集するため、全ての作業は自己責任で行ってください。

環境

Windows7

方法

はじめに、[スタート]-[コントロールパネル]-[デバイスマネージャー]から接続中のキーボードデバイスを探し、該当キーボードの[プロパティ]-[詳細タブ]から[ハードウェアID]を選び、ハードウェアのIDを確認します。

f:id:taka_say:20160226194450j:plain

次に、[スタートメニュー]-[プログラムとファイル検索ボックス]にregeditと入力し、レジストリエディターを実行します。

f:id:taka_say:20160226194520j:plain

レジストリエディター上でHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HIDまで展開し、その中から先ほど確認したハードウェアIDを探します。
該当するディレクトリを発見したら、Device Parametersのあるディレクトリまで展開し、Device Parametersに新しく下記のDWORDを追加します。

値の名前
KeyboardTypeOverride 4
KeyboardSubtypeOverride 0

f:id:taka_say:20160226202721j:plain

自分の場合は既に上記二つのパラメータがあったので、値の修正のみ行いました。

f:id:taka_say:20160226201454j:plain

変更後、PCを再起動すれば英語配列になっていることが確認できるかと思います。
以上で配列の変更は完了です。

ちなみに、英語配列での日本語入力切り替えはAlt + `となります。
非常に切り替えづらいため、変更することをオススメします。

参考

配列の異なるキーボードを同時に使う方法 - forPCActionGamer Wiki*
WindowsでBTキーボードだけをUS配列で使う - るびゅ備忘録
Windows 8.1にBluetooth英語キーボードの設定 | netanote.com

【openFrameworks】Windows環境でofxFaceTrackerのビルド時にエラーが起こる

Windows環境でopenFrameworksとofxFaceTrackerを用いたアプリケーションを作成しようとしたところ、ビルドに失敗してだいぶ困ったのでメモ。
主なエラーメッセージは下記。

ContourFinder.obj : error LNK2019: 未解決の外部シンボル "float __cdecl ofxCv::trackingDistance(class cv::Rect_<int> const &,class cv::Rect_<int> const &)" (?trackingDistance@ofxCv@@YAMABV?$Rect_@H@cv@@0@Z) が関数 "public: virtual class std::vector<unsigned int,class std::allocator<unsigned int> > const & __thiscall ofxCv::Tracker<class cv::Rect_<int> >::track(class std::vector<class cv::Rect_<int>,class std::allocator<class cv::Rect_<int> > > const &)" (?track@?$Tracker@V?$Rect_@H@cv@@@ofxCv@@UAEABV?$vector@IV?$allocator@I@std@@@std@@ABV?$vector@V?$Rect_@H@cv@@V?$allocator@V?$Rect_@H@cv@@@std@@@4@@Z) で参照されました。
ObjectFinder.obj : error LNK2001: 外部シンボル ""float __cdecl ofxCv::trackingDistance(class cv::Rect_<int> const &,class cv::Rect_<int> const &)" (?trackingDistance@ofxCv@@YAMABV?$Rect_@H@cv@@0@Z)" は未解決です。

環境

Windows 8.1
Visual Studio Community 2015
openFrameworks 0.9.2
ofxFaceTracker 1.1

解決策

はじめに、プロジェクトのプロパティを開く。

f:id:taka_say:20160224200251p:plain

構成プロパティ → C/C++ → 出力ファイル

を選び、オブジェクトファイル名の値を、

$(IntDir)

から

$(IntDir)/%(RelativeDir)/

に書き換える。

f:id:taka_say:20160224200256p:plain

これで無事実行できるようになるはず。

参考

ofxFaceTracker error on windows - beginners - openFrameworks

Many thanks!

USキーボードはAmazon.comで買おう

MacBookでUSキーボードを使用しており、Windows用にもUSキーボードを使用したくなったためメモ。

Amazon.co.jpを探してみたところ、どうにも種類が少なかった(上にぼったくりのような価格だった)のでAmazon.comで購入することにしました。

購入方法

事前の注意点として、Amazon.comのアカウントを作成しておく必要があります。
Amazon.co.jpとは別アカウント扱いですね。

とりあえずAmazon.comにアクセスし、購入したいキーボードの商品名とかメーカー名とかを入力します。
今回自分はLogitech(日本名Logicool)社製のキーボードを購入したかったため、logitech keyboardで検索。

f:id:taka_say:20160213231841j:plain

検索結果の左の枠内にあるShip to Japanを選択すると、日本への輸送が可能な製品が残ります。
あとはいつも通りカートに入れて、購入手続きを行えばOK。
物によると思いますが、輸送費はだいたい10ドルちょっとくらいでしょうか。

一点注意しなければいけない点として、日本円とUSドルのどちらで決算を行うかがあります。
自分が購入した際のそれぞれの価格を参考までに載せておきます。

f:id:taka_say:20160214002349j:plain
こちらが日本円の場合。

f:id:taka_say:20160214004551j:plain
そしてこちらがUSドルの場合。

画像の下の方にAmazon Currency Converterでのドル円レートが表記されています。
これによると、1 USD = 117.6646888395 JPYで決算されるようです。
この記事を書いている2016年2月14日現在の一般的なドル円レートが1 USD = 113.2 JPYくらいですので、かなり割高です。
日本のクレジットカードで購入する場合は、クレジットカード会社が通貨換算時に手数料を取得するので、それを併せたドル円レートを算出する必要があります。

自分はMasterカードで決算を行うため、MasterCard Currency Conversion Toolからドル円の換算レートを取得して、手数料を上乗せしたレートを算出します。
この手数料ですが、大手のカード会社ですとおよそ2%程度だそうです(Masterは1.63%らしい)。

というけでUSドルで決算した場合の予想レートを計算したところ、1 USD = 113.9 JPYとなりました。
Amazonが指定するレートよりもだいぶ良いので、USドルで決算することにしました。

ここまで長々と書いてきましたが、基本的にはUSドルで決算したほうが安い場合が多いそうです。

あとはPlace your order in USDを押せば注文確定です。
輸送に時間がかかるため注文した品が届くのは2週間後くらいになります。気長に待ちましょう。


ちなみに、今回自分が注文したキーボードはこれです。
無線の機種から選びました。

f:id:taka_say:20160214010529p:plain
Amazon.com: Logitech Wireless Wave Combo Mk550 With Keyboard and Laser Mouse: Electronics

マウスはいらなかったんですが、キーボード単品でも値段が変わらなかったためマウス付きにしました。

Wireless Desktop Keyboard & Mouse Combo MK710 - Logitech
Logitech - Wireless Illuminated Keyboard K800

この二つと迷ったんですが、前者は価格面、後者は充電式ということで今回は見送りました。

輸送費込みでも日本で買うのとほぼ変わらない値段か、安い場合もあるくらいなので、積極的に利用していくと良いのではと思います。

まとめ

  • Ship to Japan
  • 決算時の通貨
  • 配送期間

以上3点にさえ気をつければ、通常のお買い物と変わりありません。
ぜひAmazon.comでUS配列キーボードを購入してみてください。

参考

Logitech製US配列キーボード「k750」をAmazon.comで買った - always one step forward
為替レートの良いクレジットカードでお得に海外旅行 - クレジットカード完全比較

【Python3】大文字小文字に関わらず文章中に指定したワードがあるか調べる

Python正規表現を使えば簡単に調べることができます。
re.searchの第三引数にre.IGNORECASEを指定してあげればOK。

import re

word = 'Python'
description = 'pythonが恋しい'

if re.search(word, description, re.IGNORECASE):
    # 実行したい処理

PYthonpyTHoNなど、どのような形でもワードが存在するかの判定が可能です。

参考

perl - How to match a substring in a string ignoring case in Python - Stack Overflow