blog.monophile.net

コンピュータのこととかのメモ。

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS] においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。

work

各種システム構築と管理を承ります。

Cloud PlatformOpenstack, GCP, AWS, Azure, ...
Openstackkeystone, glance, cinder, swift, neutron, nova, ...
VirtualizationQEMU+KVM, LXD/LXC, Docker, ...
OSDebian GNU/Linux, Ubuntu, CentOS, ...
NetworksIPSec, L2TP, VXLAN, WirelessAP, ...
WebAppsWordPress, GitLab, Redmine, ...
Configuration ManagementAnsible, Terraform, ...
MonitoringNagios, Munin, ...

posts

NLTKでSKIコンビネータの構文解析をする

概要

お手軽にSKIコンビネータの構文解析をやってみたかったので、NLTK使いました。 NLTKは自然言語処理用なので、普通はpyparsingとかの方がよいかと。

code.py

標準入力から1行ずつ読み込んで、解析し、構文木を描画します。

import sys
import nltk

for line in sys.stdin:
    ski_grammar = "C -> '(' C ')' | C C | 'S' | 'K' | 'I'"
    ski_cfg = nltk.CFG.fromstring(ski_grammar)
    parser = nltk.ChartParser(ski_cfg)
    ski_sent = list(line.replace("\n", ""))
    trees = parser.parse(ski_sent)
    root = next(trees)
    print(root)
    root.draw()

実行

$ echo "S(KS)K" | python code.py

以下の様な標準出力と画面が出ると思います。

(C (C (C S) (C ( (C (C K) (C S)) ))) (C K))