開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
はじめての機械学習 (小高知宏(著)、オーム社)の第3章(帰納的学習)、3.1(暗記学習)、3.1.3(日本語テキストデータの学習)、n-gramの出現頻度の解析(rankプログラム)をC言語ではなくPythonで取り組んでみる。
コード
Python 3
ngrams.py
#!/usr/bin/env python3 import sys if len(sys.argv) != 2: print('Usage: ngram <N>', file=sys.stderr) sys.exit(1) n = sys.argv[1] try: n = int(n) if n < 1: raise ValueError('nの値が不適切です。') except ValueError as err: print(err, file=sys.stderr) sys.exit(1) ngram = sys.stdin.read(n) print(ngram) while True: c = sys.stdin.read(1) ngram = ngram[1:] + c if ngram == '': break print(ngram)
rank.py
#!/usr/bin/env python3 import sys from collections import Counter counter = Counter((s[:-1] for s in sys.stdin)) for ngram, count in counter.most_common(): print(f'{count:4} {ngram}')
入出力結果(Bash、cmd.exe(コマンドプロンプト)、Terminal、Jupyter(IPython))
$ iconv -f sjis -t utf-8 < ningen_shikkaku.txt > 人間失格.txt $ ./ngram.py 3 < 人間失格.txt | ./rank.py > 人間失格_rank.txt $ head 人間失格_rank.txt 1778 984 571 した。 452 388 。 369 ました 364 、自分 313 でした 296 「 296 」 $ tail 人間失格_rank.txt 1 あたっ 1 、ボラ 1 ボラン 1 ランテ 1 ンティ 1 ティア 1 ィアの 1 アの皆 1 の皆さ 1 皆さん $ head -20 人間失格_rank.txt 1778 984 571 した。 452 388 。 369 ました 364 、自分 313 でした 296 「 296 」 290 自分は 271 た。 214 ている 199 、その 186 ってい 181 という 178 自分の 167 たので 164 のです 162 、それ $
元のテキストの文字コードを変換するだけでそのほかは特に必要な修正は無し。ファイルの読み込み時にShift_JISとして読み込むこともできるけど、UTF-8の方が便利そうだから、初めにテキストを変換する方法を選択。
0 コメント:
コメントを投稿