接着剤の精進日記

競プロでの精進や研究に関係したことを書いていきます。

Macでassert.h: No such file or directoryと言われたときの対処法

はじめに

急にヘッダファイルがインクルードできなくなったので対処法を備忘録として残しておきます。
前にもアップデートしたときにあったが、完全に忘れていたので。

環境

Mojave 10.14.4
Xcode 10.2

対処法

Xcode10以降は/usr/include にヘッダファイルを置いてくれないみたいです。
以下のコマンドで/usr/includeにコピーしてくれます。

installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

おわりに

以前Mojaveにアップデートしたときにも起こりましたが、今回はなぜ起こったのかが不明…
前回どう直したのか完全に忘れていたので備忘録として残しておきます。

BERTを使ってみる

はじめに

最近流行りのBERTを使ってサンプルを動かしてみます。

参考ページ

techblog.nhn-techorus.com

環境

CentOS7
python3.6
tensorflow1.12

はじめに

最初に作業ディレクトリを作ります

mkdir bert_test
cd bert_test

公式リポジトリのクローン

git cloneで公式リポジトリからクローンします

git clone https://github.com/google-research/bert

学習済みのモデルをダウンロード

学習済みのモデルが公開されているので、ダウンロードしてから解凍します

wget https://storage.googleapis.com/bert_models/2018_10_18/uncased_L-12_H-768_A-12.zip
unzip uncased_L-12_H-768_A-12.zip

対象データのダウンロード

次にGLUEという対象となるデータをダウンロードします。
ダウンロードには公開されているスクリプトがあるのでこれを使います。

wget https://gist.githubusercontent.com/W4ngatang/60c2bdb54d156a41194446737ce03e2e/raw/17b8dd0d724281ed7c3b2aeeda662b92809aadd5/download_glue_data.py
python download_glue_data.py

環境変数の設定

以下のコマンドで環境変数を設定しておきます。

export BERT_BASE_DIR=uncased_L-12_H-768_A-12
export GLUE_DIR=glue_data/

BERTを実行

python bert/run_classifier.py   --task_name=MRPC   --do_train=true   --do_eval=true   --data_dir=$GLUE_DIR/MRPC   --vocab_file=$BERT_BASE_DIR/vocab.txt   --bert_config_file=$BERT_BASE_DIR/bert_config.json   --init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt   --max_seq_length=128   --train_batch_size=32   --learning_rate=2e-5   --num_train_epochs=3.0   --output_dir=/tmp/mrpc_output/

自分の環境だと1時間以上かかりましたが、GPUなどを使うと15分程度で終わるみたいです。
実行が終わると以下のような表示が出ます。
f:id:tkm-kyudo:20190404155335p:plain

終わりに

研究でBERTを使うにあたりまずはサンプルを動かしてみました。
動かすこと自体は比較的容易ですが、BERT単体でもかなり高い精度が出ているのがわかります。
今後は自分の研究にBERTを組み込んだり、改善したりしていきます。

Mac PythonでSeleniumを動かしてみる

はじめに

題名の通りMac上でpythonを使ってSeleniumを動かしてみます

参考ページ

qiita.com

環境

MacOS Mojave
Python 3.5

必要なもの

selenium
chrome driver

Seleniumのインストール

pipでSeleniumのインストールができます.

pip install selenium

chrome driverのインストール

brewが入っていればbrewでインストールできるそうです.

brew install chromedriver

しかし,以下のようなエラーがでる.

Error: No available formula with the name "chromedriver" 
It was migrated from homebrew/core to homebrew/cask.
You can access it again by running:
  brew tap homebrew/cask
And then you can install it by running:
  brew cask install chromedriver

コマンドが指示されたのでそのまま動かすと

brew cask install chromedriver

無事インストール完了.
これで必要なものは揃いました.

実際に動かしてみる

とりあえず,参考ページのプログラムをそのまま動かしてみる.

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep

# ブラウザを開く。
driver = webdriver.Chrome()
# Googleの検索TOP画面を開く。
driver.get("https://www.google.co.jp/")
# 検索語として「selenium」と入力し、Enterキーを押す。
driver.find_element_by_id("lst-ib").send_keys("selenium")
driver.find_element_by_id("lst-ib").send_keys(Keys.ENTER)
# タイトルに「Selenium - Web Browser Automation」と一致するリンクをクリックする。
driver.find_element_by_link_text("Selenium - Web Browser Automation").click()
# 5秒間待機してみる。
sleep(5)
# ブラウザを終了する。
driver.close()

ブラウザの起動はするものの,検索ができていない.
そこで,実際に検索画面にいって,要素を調べてみる.
デベロッパーツールを使うと,ページの様々な要素が確認できます.
検索するところを確認すると以下のようになっている.
f:id:tkm-kyudo:20181220024624p:plain

今回はCSSセレクタを使用し,指定してみる.
検索部分のCSSセレクタは".gLFyf"となっていることがわかる.
改良したプログラムを以下に示す.

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep

# ブラウザを開く。
driver = webdriver.Chrome()
# Googleの検索TOP画面を開く。
driver.get("https://www.google.co.jp/")
sleep(3)
# 検索語として「selenium」と入力し、Enterキーを押す。
element = driver.find_element_by_css_selector(".gLFyf")
#検索語を入力
element.send_keys("CSSセレクタとは?")
#検索ボタンをエンター
element.send_keys(Keys.ENTER)

sleep(5)
# ブラウザを終了する。
driver.close()

実行してみると・・・
f:id:tkm-kyudo:20181220024917p:plain

無事検索が行われている.

おわりに

今回はMac上でPythonを使ってSeleniumを動かしてみた.
CSSセレクタをうまく指定すれば比較的簡単に操作できることがわかった.
無事Seleniumを動かせたので,スクレイピングにも使ってみようと思う.

Wikipediaのあるカテゴリーに属する記事のタイトルを取得する方法

はじめに

Wikipediaのdumpデータを用いて,あるカテゴリに含まれる記事のタイトルを取得します.

環境

CentOS7
Python3.6

事前準備

まず,word2vec-wikification-pyをインストールします.pipでできます.
Wikificationをしてみよう ~Wikipediaを利用した情報抽出 & 曖昧性解消まで ~ - Qiita

pip install word2vec-wikification-py

Mysqlwikiのdumpデータの用意は他を参照してください.
(他の人が用意してくれたのを使ったのでわかりません)

記事のタイトルを出力する

以下のプログラムを動かすことであるカテゴリに属する記事のタイトルを全て出力します.

from word2vec_wikification_py.initialize_mysql_connector import initialize_pymysql_connector
import pymysql.cursors

mysql_username = 'username'
mysql_hostname = 'hostname'
mysql_password = 'password'
mysql_db_name = 'db_name'


serch_words = ['政府']


print("serch_words:" + str(serch_words))
for word in serch_words:
    try:
        mysql_connector = initialize_pymysql_connector(hostname=mysql_hostname,
                                               user_name=mysql_username,
                                               password=mysql_password,
                                               dbname=mysql_db_name)
        with mysql_connector.cursor() as cursor:
            sql = "SELECT cl_to AS parent, page_title AS child FROM page JOIN categorylinks ON categorylinks.cl_from=page.page_id WHERE categorylinks.cl_type != 'subcat' AND categorylinks.cl_to ='" + word + "'"
            cursor.execute(sql)
            results = cursor.fetchall()
    finally:
        mysql_connector.close()

for page_title in results:
    print(page_title[1].decode('utf-8'))

以下の部分は自分で用意したsqlに応じて変えてください

mysql_username = 'username'
mysql_hostname = 'hostname'
mysql_password = 'password'
mysql_db_name = 'db_name'

今回は政府というカテゴリに含まれる記事を出力します.
以下が結果です.
f:id:tkm-kyudo:20181113140042p:plain

取得した結果が右のターミナルに出力されています.
wikiのページと見比べると大丈夫そうですね.
使用するdumpデータによって結果は多少変わると思います.

まとめ

wikipediaのdumpデータを使用することで,wikipediaのあるカテゴリに属する記事のタイトルを取得できました.
Mysqlに関して丸投げしたので,自分でもやってみようと思います.

ライブコーディング環境を導入してみた(TidalCycles)

はじめに

ゼミでライブコーディングの話が出てたので,とりあえずやってみよう精神で導入して見ました.

環境

MacOS Sierra
Python 3.6
homebrew

tidal-bootstrapの導入

とりあえず公式サイトに行ってみる.
https://tidalcycles.org/getting_started.html#running

公式サイトのMac OS,Tidal-bootstrap - automated install on a macのところにある
"You can download tidal-bootstrap here." をクリック.
移動したら,Download .zipをクリックしてzipファイルをダウンロードする.
ここで,homebrewが必要らしいので,入っていない場合は導入してください.

zipファイルを解凍すると次のようになっていると思うので,tidal-bootstrap.commandを起動.
f:id:tkm-kyudo:20180706131517p:plain

ここで一つ目のエラー.どうやらpython2系で動いている(時代遅れ)スクリプトなので,

#!/usr/bin/env python

となっているところを

#!/usr/bin/env python2.7

に変更する.

もう一度tidal-bootstrap.commandを起動する.以下のように表示されれば無事完了.

[Process completed]

SuperDirtのインストール

先ほど解凍したzipファイルの中にある,install-superdirt-quark.scdをダブルクリックすると,
SuperColliderが起動して以下のように表示されます。

// Place your cursor on the line below and press Shift-Enter
include("SuperDirt")

二行目をクリックしてカーソルを移動させ,Shift + Enterを押すとSuperDirtがインストールされる.
結構時間がかかるので気長に待ちましょう.コンソールに

  • > SuperDirt

と表示されれば完了なので,SuperColliderを再起動する.

SuperDirtを起動する

SuperColliderで新規ファイルを開いて、以下のコマンドを入力し,Shift + Enterを押す。

SuperDirt.start

コンソールのところに以下の表示が出ていれば無事完了.

SuperDirt: listening to Tidal on port 57120

TidalCycles Atom pluginのインストール

Atomがインストールされているはずなので,Atomを起動する.
起動したら,上部のタグからPackages->Setting View->Install Packages/Themesをクリック.
tidalと検索するとtidalcyclesが出てくるのでインストールする.
f:id:tkm-kyudo:20180706134120p:plain

やってみる

pluginのインストールが終わったら,Atomで新しいファイルを開き,sample.tidalとして保存する.

d1 $sound "bd cp"

と入力し,command+Enterを押すと,うまく行っていれば音がなる.

しかし,音がならない.

エラー処理

エラーが起きたので,ログを見ると,ghciがないとあったので
brewにてghcをインストールする.

brew install ghc

再度トライ

ghcのインストールが無事終わったので,SuperDirtを起動し直す.
先ほどのsample.tidalファイルを開き,同様にcommand+Enterを押す.
しかし,うまくいかず,Could not find module.sound.tidalというエラーが発生.

再度エラー処理

色々調べて見るとどうも,tidalの導入がうまく行っていないみたいなので
manual installでやってみる.
ターミナルで以下のコマンドを入力.

cabal install tidal

これでtidalがインストールされたので,
同様に,SuperDirtを起動し直し,Atomでcommand+Enterを押すと……

無事音がなった!

やってみて

導入するにあたって,日本語の記事が少ない上に,自動化だと上手くいかなかった.
エラーを調べるも,数が少ないので手探り感がとても強かった.

時間はかかったが,無事導入できたので,ライブコーディングで遊んでみようと思う.
ライブコーディング導入に躓いている人の役に立てば幸いです.