#はじめに
pythonでオントロジーファイルつくるのないかなと探したら発見.
英語のドキュメントはあるものの,日本語のドキュメントもあまりなさそうだったので英語ドキュメントを読みながら触ってみた
#環境
Macbook pro
pyenv+anaconda
python 3.7
#インストール方法
pipで入ります
pip install Owlready2
これだけ
#使い方
オントロジーはクラスとインスタンスが明確に分かれてるので,その辺は分けて記述
推論系に必要な条件設定もおいおい書いていくつもり
###クラス
まずget_ontologyでグラフURIを指定してpythonのグラフメソッドでオントロジーのクラスを作成できる。すごい楽びっくり!
今回はThingの下にPizzaとToppingというクラスを作った.
プロパティはhas_Toppingで
from owlready2 import *
onto = get_ontology("http://test.org/onto.owl")
with onto:
#エンティティクラス
class Pizza(Thing):
class MeatPizza(Pizza):
class Topping(Thing):
pass
# プロパティクラス
class has_Topping(Pizza >> Topping):
pass
広くやるとこんな感じです.
get_ontology()で名前空間を指定
もしファイルからowlファイルを読み込む場合は頭に"file://"をつけて
get_ontology("file:///path/to/the/owlfile")
って感じになる
get_ontologyメソッドはリターンがIRIで, オントロジーはファイルやウェブからの取得があればそれを使うけど, なければ空のオントロジーを作るっぽい.
ontology = get_ontology("file:///path/to/the/owlfile").load()
Documentによると
The .load() method loads the ontology from a local copy or from Internet. It is safe to call .load() several times on the same ontology. It will be loaded only once.
なのでload()でコピーを作ってるのかな
これでできたオントロジーの中身にアクセスしてみる
> print(ontology.Pizza)
ontology.Pizza
> print(ontology["Pizza"] )
ontology.Pizza
> print(ontology.Pan)
>
上みたいに返ってくればそのクラスはontology内に存在する.返ってこなければできてないって事.
この辺もpythonっぽくかけるのよい
他にも色々メソッドあるのでその辺はドキュメントで確認
クラスの作り方
###サブクラス
class MeatPizza(Pizza):
pass
で定義できるスーパークラスがPizzaの場合ね
###インスタンス
これも簡単.
margherita = Pizza["Margherita"]
これだけで変数による参照もできるし,オントロジーにPizzaクラスのインスタンスが追加もされてる.
#終わりに
基本的なクラスとインスタンスとプロパティの作り方講座でした.簡単でびっくりでした
データでかいとprotegeでちまちま作るより良さそうな予感.
動的に作る方法もあるっぽいので次はその辺から