開発環境
- 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 コメント:
コメントを投稿