LoginSignup
8
6

More than 5 years have passed since last update.

owlready2を使ってpythonでowlファイルを作ってみる

Last updated at Posted at 2019-02-27

はじめに

pythonでオントロジーファイルつくるのないかなと探したら発見.
英語のドキュメントはあるものの,日本語のドキュメントもあまりなさそうだったので英語ドキュメントを読みながら触ってみた

環境

Macbook pro
pyenv+anaconda
python 3.7

インストール方法

pipで入ります

pip install Owlready2

これだけ

使い方

オントロジーはクラスとインスタンスが明確に分かれてるので,その辺は分けて記述
推論系に必要な条件設定もおいおい書いていくつもり

クラス

まずget_ontologyでグラフURIを指定してpythonのグラフメソッドでオントロジーのクラスを作成できる。すごい楽びっくり!
今回はThingの下にPizzaとToppingというクラスを作った.
プロパティはhas_Toppingで

ontology.py
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で, オントロジーはファイルやウェブからの取得があればそれを使うけど, なければ空のオントロジーを作るっぽい.

example
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でちまちま作るより良さそうな予感.
動的に作る方法もあるっぽいので次はその辺から

参考資料

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6