FrontPage / Learning Programming

概要

  • Unix環境でのプログラミング方法,研究室の実験環境を学ぶ
  • 自然言語処理で頻繁に使われる処理を題材としてプログラミング演習を行うことで,スムースに研究に取り組める力を養います

内容

  1. Unix環境でのプログラミング方法
  2. 研究室の実験環境
  3. Pythonプログラミングのチュートリアル
    • Pythonの基本的な使い方.ipythonの使い方,pipの使い方など
    • 分からないことはどう調べれば良いのか
  4. 言語処理100本ノック 2015
    • 自然言語処理に関するプログラムを実際に作ってもらい,互いにコードレビューを行います。
    • 問題に対する答えは一つではありません。どんな方法でも,無理矢理でも解いてみてください。

2017年度

日時
金曜日 14:40-16:10
参加者
阿部,伊藤,栗林,田上,吉成,王, 白井, 中村
書いたコード
https://github.com/cl-tohoku/100knock-2017

scalaで書いてみた 000-059(松林) ソースコードの場所はこのページの編集コメントに書いてあります。

記録のとり方

  • やったことだけ書く
  • 以前の記録と同じことを書いても良い
    • 何度も書かれているということは,それだけ重要だということを意味する

予定・記録

  • 5/9(火) 13:00-14:30
  • 4/25(火) 13:00-14:30
    • 閉じ角括弧`]`と閉じ中括弧`}`は前方に対応するエスケープされてない括弧がない限りはメタ文字ではない
    • match.end()
      • マッチした部分の末尾のインデックスを返す
    • match()は前方一致
    • cutコマンド
      • 疑問:delimiterがないのに2番目のフィールドが取れる
    • grepコマンドのオプション
      • `-P` Perl Compatible Regular Expression
      • `-e` 正規表現パターン(複数指定可)
      • `-o` マッチした部分だけ出力
    • 通常後読みする文字列は固定長でなければならない
    • pcregrep
    • pip
    • regex パッケージ
      • re よりも文法が潤沢
    • 言語=文字列の集合
    • 正規言語では表現できない処理
      • 後方参照,再帰,後読みアサーション
      • 基本的に重い
    • まとまった処理は関数にまとめる
    • collections.OrderedDict
      • 追加順を記憶する辞書型
    • pprintで見やすく出力
    • リダイレクションを左に書いても良い
      • 全て等価
      • command < filename
      • < filename command
      • cat filename | command
    • re.DOTALL
      • 本来.(ドット)に含まれない文字も.(ドット)に含むようにする
    • sedによる行の削除
      • sed -e '1d'で1行目を削除
    • 宿題:(25)のryo-tさんのコード を読み解いてくる
    • 余力のある人はitertoolsの公式ドキュメントを読む
  • 4/18(火) 13:00-14:30
    • (22) - (23)
    • ジェネレータとイテレータの違い
    • re
    • 肯定/否定 の 先読み/後読み
    • str.strip(), lstrip(), rstrip() は引数に文字集合を取る
    • マッチの一部のグループ化とキャプチャ
    • 控え目な量指定子
    • 後方参照
    • プロセス置換・コマンド置換
  • 4/11(火) 13:30-14:30
    • (21)
    • GNU とは
    • UNIX
      • macOS は BSD 派生
    • 書庫化と圧縮
      • tar, gzip, bzip2
    • 正規表現 HOWTO https://docs.python.jp/3/howto/regex.html
    • re.
      • compile()
      • search()
      • finditer()
      • findall()
    • print() の end 引数
    • 任意の文字にマッチするメタ文字とその任意回の繰り返し ".*" の多用に注意せよ
    • sed -n '/regex/p'
    • 正規表現の方言
      • POSIX BRE(grep, sed)(基本使わない)
      • POSIX ERE(grep -E, sed -r, sed -E)
      • PCRE(grep -P)
    • tee
    • パイプ,標準入力,標準出力,標準エラー出力
    • dir()
  • 4/6(木) 14:30-16:00
    • (9), (20)
    • ジェネレータ
    • Typoglycemia
    • 乱数生成アルゴリズム
      • 線形合同法
      • メルセンヌ・ツイスタ -- Python や他の多くのプログラミング言語で使われる
      • xorshift -- メルセンヌ・ツイスタに比べてより良い
    • Python の三項演算子
    • random.shuffle() は破壊的メソッド
      • cf. 副作用
    • list はミュータブル,tuple はイミュータブル
    • 研究のコードでは再現性確保の観点から乱数のシード値を必ず指定するべき
    • gzip ファイル
      • 圧縮: gzip,展開: gunzip
      • Python では gzip.open() で読む
    • デカいファイルを処理する時は head コマンド等で様子を見よ
    • Python での JSON の読み書き
      • json.{load, loads, dump, dumps}
    • 文字コード
      • ユニコード
      • utf-8
      • ascii
    • JSON Lines
      • 一行一 JSON なファイル
      • 標準化はされてない
    • jq コマンド
      • コマンドラインで JSON を扱う際のスタンダード
    • 正規表現とは
      • 正規表現の典型的な用途
    • 正規表現を書く時は online simulator と syntax diaglam を表示するツールを使うと良い
  • 3/31(金) 14:40-16:10
    • (5) - (8)
    • Jupyterlab
    • n-gram とは何か,なぜ使うのか
    • 標準出力と標準エラー出力
      • 標準出力にはプログラマが欲しい出力が吐き出されると期待する
      • エラー情報は標準出力ではなく,標準エラー出力に吐き出そう
      • Python なら sys.stderr.write()
    • エラーコード
      • sys.exit(0以外) とすれば,OS にプログラムが異常終了したことを伝えられる
      • エラーコードにはそれぞれ意味が与えられているが,とりあえず 1 にしておけば OK
    • Jupyter notebook 上では if __name__ == '__main__': main() は面倒なので書かなくていい
      • 本来の目的はスクリプトが import された時の名前空間の汚染を防ぐため
    • n-gram を構成したいシーケンスが sequence プロトコルをサポートしない場合の書き方
      • Python におけるイテレータとは
    • nltk
      • Python で自然言語処理するための標準的なツールセット
      • nltk.util.ngrams
    • set に定義された各種メソッド,オペレータ
    • 色々な呼び出し方
      • set.intersection(X, Y)
      • X.intersection(Y)
      • X & Y
      • どれを使ってもいいが,一貫性をもたせることが重要
    • "set X and set Y" で集合 X, Y の intersection を表現すると数学警察が出動する
    • フォーマット文字列
      • % による記法
      • str.format()
      • f'{式}'(Python 3.6 以降)
    • str.islower()
      • str に大文字・小文字の区別がない文字を含む場合の奇妙な振る舞いに注意
      • 全角英数字も区別できて便利
    • 文字コード
      • ASCII テーブル
    • ord(), chr()
    • 暗号化 <-> 復号
    • 正規表現を書くときはテスターを使おう
  • 3/23(木) 15:00-17:00
    • (16) - (19)
    • 例外
      • Python における例外の投げ方
      • 研究レベルのコードでは例外処理を書く必要はない
      • エラーが発生するような状況ではプログラムに止まってもらった方が良い
    • ord()
    • %%bash
    • $()
    • 標準入力・標準出力・パイプ
    • split コマンドの使い方
    • numpy とは
    • set
      • set 内包表記
    • unix で sort するときは LC_ALL=C を指定すると速い
    • sorted(seq, key, reversed)
    • ラムダ式
    • collections.Counter
      • most_common([n])
    • list.count()
  • 3/9(木) 14:40-
    • (13) - (15)
    • ふつうのファイルは改行記号で終わる
      • POSIX の規格
    • zip() は短い方に合わせる
    • コードのパフォーマンスの測定の仕方
      • %%timeit
      • %timeit
      • %time
    • 副作用
    • PEP 498: 書式化済み文字列リテラル
      • Python 3.6 から f'{式}' が使える
    • file.readline() はファイル末尾まで読んだら空文字を返す
    • %file, %load
    • itertools.islice()
      • seq[start:stop:step] のイテレータ版
      • itertools は極めて重要
    • /dev/null : 不必要な出力のゴミ捨て場
    • queue module
    • collections.deque(デック)
  • 3/3(金) 14:40-
    • (10) - (12)
    • Appendix
    • git pull をするな
      • 明示的に fetch と merge を叩く
    • git branch -D master
    • IPython から UNIX コマンドを叩く方法
    • IPython での特殊な変数展開
      • $var, {var} : IPython で定義された変数が優先して展開される
      • $$var : シェルの環境変数が展開される
    • "$var" : ダブルクォートで囲うのは良い習慣
    • ディレクトリ構成
      • data/ : 加工前のデータを格納
      • work/ : 中間生成物を格納
    • sum(iterable)
    • 命名規則
    • docstring
    • with 構文
      • contextlib
    • file.open(filepath, mode, encoding)
      • mode はデフォルトで "r"
      • encoding は macOS で普通なら utf-8 だが,locale の設定によって変わる
    • file.close()
      • with 構文を使えば,with 以下の文が終了するか例外発生時に自動的に実行される
      • ファイルオブジェクトを変数に bind しなければ参照カウントが増えないので close() を呼ぶ必要もない
    • ファイル読み書き
      • file.read()
      • file.readlines()
      • file.write()
      • file.writelines()
    • ファイルオブジェクトはイテレータなので何度も read できない
    • 同じファイルを何度も読みたい時:
      • file.seek(0) : ストリームの位置を先頭にする.使えない場合もある
      • file.close() してから open() し直す
      • 同じ変数に bind し直せば古いファイルオブジェクトの参照カウントが減るので close() しなくても良い説
    • コマンドのオプションの調べ方
      • --help, -h
      • man
    • BSD 系と GNU 系コマンドの違い
    • wc, grep -c
    • sed, tr, expand
    • zip(*iterable) : 転置
      • 引数のアンパック
    • a, *b = iterable
      • アンパック代入
    • print() 関数の引数にファイルを指定できる
    • Python における iterable とは
  • 2/22(水) 14:40-
    • (4)
      • 連想配列
      • ハッシュテーブル
      • sequence の真偽値
      • enumerate()
      • 短絡評価
      • 三項演算子
      • item in seq の時間計算量
      • https://wiki.python.org/moin/TimeComplexity
      • 明示的な行継続
      • 非明示的な行継続
      • 辞書内包表記 (dict-comprehension)
      • dict() に tuple を生成する generator を渡す
      • 辞書内包表記に基づく方法と generator に基づく方法の速度差
      • 辞書内包表記の syntax は融通が効かない
      • itertools.starmap()
      • zip(*seq)
      • if __name__ == '__main__'
      • トップレベルの if 文以下の文は global な名前空間を汚す
      • Code Golf
      • False == 0, True == 1
      • Shift + Tab で docstring 表示
      • Ctrl + Shift + - でセル分割
      • Shift + j/k でセル複数選択
      • Shift + m で複数選択したセルの統合
  • 2/17(金) 14:40-
    • (0) - (3)
      • スライス
      • reversed()
      • イテレータ
      • 予約語
      • __builtin__
      • zip()
      • 内包表記
      • map, filter
      • ジェネレータ(オブジェクト,式)
      • next()
      • lambda
      • list.pop()
      • str.join()
      • str.format()
      • str.split()
      • str.strip()
      • 正規表現
      • re module
      • raw string
      • 文字列メソッドと re module のパフォーマンス
      • enumerate(seq, start)
  • 2/10(金) 14:40-
    • 各種設定

TA

研究室の実験環境など

Pythonプログラミングのチュートリアル

100本ノックコーチ割り当て

場所担当者
第1章: 準備運動高橋諒
第2章: UNIXコマンドの基礎中山
第3章: 正規表現横井
第4章: 形態素解析清野
第5章: 係り受け解析浅野
第6章: 英語テキストの処理
第7章: データベース
第8章: 機械学習
第9章: ベクトル空間法 (I)
第10章: ベクトル空間法 (II)
代打

参考書

Linux 標準教科書 (Ver.1.1.0)
: Linux 標準教科書 (Ver.2.0)
cat, paste, join, grep, head, tail, cut, awk, sed, tr, sort, uniq, wc
http://d.hatena.ne.jp/mi_kattun/20100916/1284631280
grep
http://www.k-tanaka.net/unix/grep.html http://www.k-tanaka.net/unix/grep.html
zgrep, zdiff, zmore
http://net-newbie.com/linux/commands/index.html#MISC
bzgrep etc.
http://manpages.ubuntu.com/manpages/gutsy/ja/man1/bzgrep.1.html
nkf
文字コード変換コマンドnkfの使い方まとめ Linux http://blog.layer8.sh/ja/2012/03/31/nkf_command_option/
wc
http://www.k-tanaka.net/unix/wc.html
find
http://www.k-tanaka.net/unix/find.html

過去の記録


Last-modified: 2017-04-25 (Tue) 10:38:21 (9h)
© Inui-Okazaki Laboratory 2010-2015 All rights reserved.
Recent Changes
2017-04-25 2017-04-24 2017-04-23 2017-04-22 2017-04-21 2017-04-20 2017-04-19 2017-04-18 2017-04-17 2017-04-16 2017-04-15 2017-04-14 2017-04-13 2017-04-12 2017-04-11 2017-04-10 2017-04-09 2017-04-08 2017-04-07 2017-04-06 2017-04-05 2017-04-04 2017-04-03 2017-04-02 2017-03-31 2017-03-30 2017-03-29 2017-03-28 2017-03-27
  • Learning Programming
2017-03-26 2017-03-23 2017-03-22
  • Learning Programming
2017-03-17 2017-03-16 2017-03-13 2017-03-11 2017-03-10 2017-03-09 2017-03-08 2017-03-07 2017-03-06 2017-03-05
  • Learning Programming
2017-03-04 2017-03-03 2017-03-02 2017-03-01 2017-02-28 2017-02-27 2017-02-26 2017-02-25 2017-02-24 2017-02-23 2017-02-22 2017-02-21 2017-02-20 2017-02-19 2017-02-18 2017-02-17