かんちゃんの備忘録

プログラミングや言語処理、ゲームなど知的好奇心のための備忘録(個人の感想)です。

研究室の計算機管理者のススメ(2)OS

土台をつくろう!

今回は計算機環境の土台作りということで、以下の三点についてお話します。

これにより、ユーザー情報およびファイルを共有することができます。

おっと、導入を読んでいないかたは、↓からどうぞ kanji.hatenablog.jp

続きを読む

研究室の計算機管理者のススメ(1)導入

計算機管理は辛くて楽しい

f:id:kanjirz50:20170216004304p:plain

研究をしながらの計算機管理は辛いですが、楽しいものでもあります。

計算機管理(Linuxを用いるもの)に興味がある人や、計算機管理初心者向けの内容になります*1

計算機管理は大変ですが、Linuxに関する知識が山ほど身につきます。

最初は分からないことだらけで、不安ばかり生まれます。 でも、怖じけず、力まず、着実にステップアップしましょう。

数回の記事に分けて、計算機管理について説明します。 今回は計算機管理者とは何かについてと、計算機の選定についてです。

目次

*1:研究室の次期計算機管理者向けに、口頭や資料で伝えていることをまとめとして書いているつもりです

続きを読む

Bloggerからの引っ越し

お引っ越し

Bloggerからはてなブログへ引っ越した。 理由は、Markdownが楽に使えるから。

確かにBloggerでもStack Editを使えば書けたけれど、回りくどいのとファイル管理がややこしい。

作業の備忘録などを手軽に書きたいため、はてなブログへ移行した。

移行の手間

google-blog-converters-appengineを使えば、コマンド一発だった。

ダウンロードしたファイルを解凍して、

cd google-blog-converter-r89
./bin/blogger2movabletype.sh \
  ./bloggerのエクスポートからダウンロードしたファイル.xml \
  > はてなブログにインポートするファイル.xml

出力したファイルをインポートするだけだった。 簡単だった。

zshで引数に指定したファイルの絶対パスを取得

引数の相対パス絶対パスに展開する

「ls test.txt」みたいに相対パスで指定することは良くあるかと思います。
後から別ディレクトリで似た作業をやろうとして、過去ログを参考にするのですがパスが違うとよく分からないことがちらほら・・・
本当はログに絶対パスで残って欲しいのですが分からないので、実行時に一手間加えて絶対パスに展開します。

方法

至って単純です。
zshの機能を使います。

ls test.txt(:a)
と入力します。

(:a)
にカーソルを合わせて、TABを2,3回押下すると絶対パスへと展開されます。

おわりに

zshは便利なコマンドやショートカットが眠っています。
あまりにも膨大なので把握はできませんが、zshのマニュアルをたまに読んでみると新しい発見があります。
ぜひぜひ、快適なzshライフを!!

シェルスクリプトでスクリプトのパスを取得

シェルスクリプトスクリプト自身のパスを取得

シェルスクリプトを書くときに、cd シェルスクリプトがあるディレクトリというようにカレントディレクトリをスクリプト自身のパスに変更したいときがあります。
こうすることで、シェルスクリプト内ではそのシェルスクリプトを基準とした相対パスで処理を記述することができます。

やりかた

$(コマンド)もしくは`コマンド`(バッククォート)でコマンドを実行し、その標準出力を文字列として扱えます。
$0には実行したシェルスクリプトの名前が入ります。
#!/bin/sh

cd $(dirname $0)
コマンドは、実行するシェルスクリプトがあるディレクトリの位置を相対パスで取得し、そこに移動するという意味です。

Pythonの正規表現でカタカナやひらがなを引っかける

perlだとUnicodeプロパティで\p{Hiragana}とするところです。
しかし、PythonUnicodeプロパティをサポートしていない?ようですので、正規表現で獲得します。


前提

Unicodeが対象です。

ひらがなの獲得

reモジュールで正規表現コンパイルして、fullmatchで全一致かどうかを判定します。
\u3041は「ぁ」、\u3093は「ん」を表します。
# -*- coding: utf-8 -*-
import re

re_hiragana = re.compile(r'[\u3041-\u3093]')
print(re_hiragana.fullmatch('ひらがな'))
# Trueが返ってくる

カタカナの獲得

ひらがなと同様です。
\u30A1は「ァ」、\u30F4は「ヴ」を示します。
# -*- coding: utf-8 -*-
import re

re_katakana = re.compile(r'[\u30A1-\u30F4]+')
print(re_katakana.fullmatch('カタカナ'))
# Trueが返ってくる

Unicodeの確認

上記正規表現は、厳密に言うとすべてのカタカナやひらがなを満たしていません。
これらは使用用途に応じて、Unicode表を見る必要があります。
図書館員のコンピュータ基礎講座さんにUnicode表が、きれいにまとまっています。
閉鎖中ですが、まだサイトは当面維持されるようです。
- カタカナの表
- ひらがなの表

NaiveBayse、SVMによる文書分類を試す

NaiveBayesによる文書分類、SVMによる文書分類を試しました。




NaiveBayse, SVMによる文書分類

文書分類とは与えられた文書をあるカテゴリに分類することです。
例えば、ニュース記事がスポーツか政治社会かということを分類します。
ここではフリーで入手可能なコーパスを用いて、文書分類の代表的な手法であるNaiveBayseとSVMを使います。
文書分類に用いる素性は、文書中の名詞のTF・IDF値としました。
TF・IDFは単純に説明すると、様々な文書で使われる語の重みは小さく、一部の文書でのみ使う語の重みを大きくするような、語に対する重みです。
もう少し踏み込むと、TF(語の頻度)とIDF(出現する文書数の逆数)の積となります。
以上の素性を用いて、NaiveBayseおよびSVMで分類を行います。
NaiveBayseの理解のためにgihyo.jpの記事を写経して作ったものがここにあります。(今回利用した訳ではありません。)
SVMはパターン識別器を与えられた正解データから作成する機械学習器です。
詳細は割愛します(というよりも詳しくはっきりは理解できていません。)

ソースコード

一部、独自の単語分割器が使用されています。
MeCabを用いる際は、名詞の表層形を取り出します。
xmlの読み込みは適当にパースします。

結果

ナイーブベイズよりSVMのほうが4ポイントほど良い結果を示しました。

感想

Scikit-learnを用いると意図も簡単に文書分類を試すことができました。
手軽に実験するために、Scikit-learnを使いこなさねばと思いました。