(2)料理レシピオントロジーの料理レシピと食材の関係
本記事の目標は、特定の食材を材料とする料理レシピを検索すること、とする。
例えば、食材として”玉子”を指定すれば、”オムレツ”や”目玉焼き”がヒットするようなことである。
料理オントロジーにおける、食材とは何であったか。
まず、食材は、食材一覧表において設定れているのであった。
たとえば「にんじん」は、食材のオントロジーでは「http://www.onto.org/life/food/material#にんじん 」というIRI(Internet resouce identifier)であり、接頭辞により「fmat:にんじん」とも書くのであった。
そして料理レシピは、材料と関連付けられており、材料が食材を参照することで、料理レシピと食材との関係が分かるのである。
まずはその材料と食材の関係である。材料は料理レシピのオントロジーにおいては「材料項目」として(食材、数量、単位)という組として定義されるのであった。つまり、
recp:材料項目 recp:ref_mat fmat:食材,
recp:数量 xsd:string,
recp:単位 xsd:string.
ここで、接頭辞recp:は
"http://www.onto.org/life/food/recipe# "
である。接頭辞xsd:は
"http://www.w3.org/2001/XMLSchema# "
であって、XMLに関連して定義された標準であり、owlではよくデータ型を参照するために利用する。
材料項目の定義がSPO(SVO)のトリプルそのものであり、Sがrecp:材料項目、Pがref_mat、Oがfmat:食材なのである。
この関係が分かれば、SPARQLの問い合わせを記述できる。
# 料理レシピの材料項目と食材の関係
PREFIX fmat: <http://www.onto.org/life/food/material#>
PREFIX recp: <http://www.onto.org/life/food/recipe#>
PREFIX mtsh: <http://www.onto.org/life/food/cookpad_moritosh/>
SELECT ?s ?o
WHERE
{
?s recp:ref_mat ?o
}
まず問い合わせの構文は次のようになる。
SELECT ... WHERE {...} (結果表示句)
検索結果の和を取る場合は
SELECT ... WHERE {...} UNION {...} UNION ... UNION {...} (結果表示句)
となる。
SELECT ?s ?o
というのは、?sと?oが検索結果の出力対象を明らかにしている。なお変数は文字列にはてなマーク?を付ければよい。
WHERE句が条件を記述するところになる。そこにトリプルを直接記述すればよい。
?s recp:ref_mat ?o
実は、行ごとにピリオド(.)で終わる。1行しかないときはなくてもよいが、複数行ある時は必要になる。
問い合わせのファイル上部に記述されるPREFIX行は接頭辞の指定で、接頭辞とそのIRIを鍵括弧 < と > でくくる。
それでは実行してみる。コマンドラインで次のように入力する。
> sparql --data=cookpad_moritosh.ttl --query=t01.rq
次の結果を得た。281件あった。
------------------------------------------------------------------------------------------------
| s | o |
================================================================================================
| mtsh:たらこドレッシングのサラダうどん_セロリ | fmat:セロリ |
| mtsh:パスタ麺の皿うどん_具_キャベツ | fmat:キャベツ |
| mtsh:パスタ麺のちゃんぽん_具_キャベツ | fmat:キャベツ |
| mtsh:なめこおろし_大根 | fmat:大根 |
| mtsh:ステーキ500g(ブルーチーズバター付き)_ブルーチーズバター_バター | fmat:バター |
| mtsh:プレーンオムレツ_バター | fmat:バター |
| mtsh:鯛(タイ)のベーコン巻きソテー_バター | fmat:バター |
~(略)
| mtsh:焼き鮭とタルタルソース_タルタルソース_きゅうり | fmat:きゅうり |
| mtsh:サラダ蕎麦_きゅうり | fmat:きゅうり |
------------------------------------------------------------------------------------------------
この結果をエクセルに張り付けて整理してもよいのだが、まずはソートぐらいはしておいた方がよいのではなかろうか。そこで結果表示句に、食材をソートする指示 ORDERD BY ?oを付けてみる。
# 料理に使われた食材の一覧
# sparql --data=cookpad_moritosh.ttl --query=t01.rq
PREFIX fmat: <http://www.onto.org/life/food/material#>
PREFIX recp: <http://www.onto.org/life/food/recipe#>
PREFIX mtsh: <http://www.onto.org/life/food/cookpad_moritosh/>
SELECT DISTINCT ?o
WHERE
{
?s recp:ref_mat ?o
}
ORDER BY ?o
実行する。
> sparql --data=cookpad_moritosh.ttl --query=t02.rq
------------------------------------------------------------------------------------------------
| s | o |
================================================================================================
| mtsh:パイナップル牛モモ肉アスパラパプリカ_こしょう | <http://www.onto.org/life/food/mamterial#こしょう> |
| mtsh:パスタ麺の皿うどん_具_うずら玉子 | fmat:うずら玉子 |
| mtsh:水炊き_うどん | fmat:うどん |
| mtsh:肉うどん_うどん | fmat:うどん |
| mtsh:スペアリブ鍋_かぶ | fmat:かぶ |
| mtsh:からすみのクラッカー載せ_からすみ | fmat:からすみ |
| mtsh:水炊き_きのこ | fmat:きのこ |
| mtsh:サラダ蕎麦_きゅうり | fmat:きゅうり |
| mtsh:焼き鮭とタルタルソース_タルタルソース_きゅうり | fmat:きゅうり |
| mtsh:たらこドレッシングのサラダうどん_たらこドレッシング_こしょう | fmat:こしょう |
| mtsh:コンソメスープ_こしょう | fmat:こしょう |
| mtsh:サラダ蕎麦_ドレッシング_こしょう | fmat:こしょう |
| mtsh:ザーサイスープ_こしょう | fmat:こしょう |
| mtsh:フライドチキン_こしょう | fmat:こしょう |
| mtsh:鮪(マグロ)刺身のクラッカー載せ_こしょう | fmat:こしょう |
| mtsh:鶏の唐揚げ_こしょう | fmat:こしょう |
| mtsh:鶏飯のチャーハン_こしょう | fmat:こしょう |
| mtsh:スペアリブ鍋_しめじ | fmat:しめじ |
~
結果を見ていくと、よく利用されている食材もあれば、そうでないものもある。当たり前だが調味料は多い。
そこで、料理レシピで使われた食材の一覧を取ってみたくなった。重複を省くのでSELECTの後にDISTINCTを付ける。ファイルはt02.rqとする。
# 料理に使われた食材の一覧(食材ソート)
# sparql --data=cookpad_moritosh.ttl --query=t02.rq
PREFIX fmat: <http://www.onto.org/life/food/material#>
PREFIX recp: <http://www.onto.org/life/food/recipe#>
PREFIX mtsh: <http://www.onto.org/life/food/cookpad_moritosh/>
SELECT DISTINCT ?o
WHERE
{
?s recp:ref_mat ?o
}
ORDER BY ?o
実行する。
> sparql --data=cookpad_moritosh.ttl --query=t02.rq
結果は次で、114件だった。
--------------------
| o |
====================
| fmat:うずら玉子 |
| fmat:うどん |
| fmat:かぶ |
| fmat:からすみ |
| fmat:きのこ |
| fmat:きゅうり |
| fmat:こしょう |
| fmat:しめじ |
| fmat:しょうが |
| fmat:しょうゆ |
| fmat:しょうゆダレ |
| fmat:たまねぎ |
| fmat:たらこ |
| fmat:なめこ |
| fmat:にんにく |
| fmat:ほうれん草 |
| fmat:もやし |
| fmat:アサリ(貝殻付き) |
| fmat:アジ |
| fmat:アスパラガス |
| fmat:イサキ |
| fmat:イシダイ |
| fmat:エビ |
| fmat:オリーブ |
| fmat:オリーブオイル |
| fmat:カットトマト缶 |
| fmat:カレイ |
| fmat:カレールー |
| fmat:カレー粉 |
| fmat:キャビア |
| fmat:キャベツ |
| fmat:クラッカー |
| fmat:クリームチーズ |
| fmat:クレソン |
| fmat:ケチャップ |
| fmat:サバ |
| fmat:サラダ油 |
| fmat:サンマ |
| fmat:ザーサイ |
| fmat:シチュールー |
| fmat:シーフードミックス |
| fmat:ジャガイモ |
| fmat:スタッフドオリーブ |
| fmat:スペアリブ |
| fmat:スモークサーモン |
| fmat:セロリ |
| fmat:ソース |
| fmat:タイ |
| fmat:チーズ(ピザ用) |
| fmat:トマト |
| fmat:バター |
| fmat:パイナップル缶 |
| fmat:パスタ |
| fmat:パセリ |
| fmat:パプリカ |
| fmat:パン |
| fmat:ビーフシチュー |
| fmat:ピクルス |
| fmat:ピザ用チーズ |
| fmat:フェタチーズ |
| fmat:ブルーチーズ |
| fmat:ベーコン |
| fmat:ホウボウ |
| fmat:ポン酢 |
| fmat:マグロ |
| fmat:マヨネーズ |
| fmat:レタス |
| fmat:レモン |
| fmat:ワイン |
| fmat:味噌 |
| fmat:唐辛子 |
| fmat:固形コンソメ |
| fmat:塩 |
| fmat:大根 |
| fmat:強力粉 |
| fmat:打ち粉 |
| fmat:挽き肉(牛7豚3) |
| fmat:昆布 |
| fmat:春巻の皮 |
| fmat:春菊 |
| fmat:木耳 |
| fmat:水 |
| fmat:水溶き片栗粉 |
| fmat:片栗粉 |
| fmat:牛サーロイン |
| fmat:牛バラ肉 |
| fmat:牛モモ |
| fmat:牛モモ肉 |
| fmat:牡蠣(生食用) |
| fmat:玄米 |
| fmat:玉子 |
| fmat:玉葱 |
| fmat:生クリーム |
| fmat:生パスタ |
| fmat:生姜 |
| fmat:生鮭 |
| fmat:砂糖 |
| fmat:胡椒 |
| fmat:蒲鉾 |
| fmat:蕎麦(乾、十割) |
| fmat:薄力粉 |
| fmat:豚ロース肉 |
| fmat:豚肉 |
| fmat:豚骨スープの素 |
| fmat:酒 |
| fmat:酢 |
| fmat:長葱 |
| fmat:青鯛 |
| fmat:骨付き鶏モモ肉 |
| fmat:骨付き鶏モモ肉ぶつ切り |
| fmat:鶏 |
| fmat:鶏ムネ肉 |
| fmat:鶏モモ肉 |
| fmat:鶏飯 |
--------------------
そうすると、今度は食材がどれだけ使われたかが気になる。ここで使われるとは、料理レシピでの材料になったかということである。ここでは料理レシピの材料項目として登場した回数とした。
そのためにはSELECTに(COUNT(?s) AS ?count)を追加して、?oでグループにして?sの数を数えて、?countを出力対象にする。グループ化の指定は、結果表示句にGROUP BY ?oを追加する。また回数?countで降順にソートするORDER BY DESC(?count)を付ける。
# 料理に使われた食材の一覧(食材ソート)
# sparql --data=cookpad_moritosh.ttl --query=t02.rq
PREFIX fmat: <http://www.onto.org/life/food/material#>
PREFIX recp: <http://www.onto.org/life/food/recipe#>
PREFIX mtsh: <http://www.onto.org/life/food/cookpad_moritosh/>
SELECT DISTINCT ?o
(COUNT(?s) AS ?count)
WHERE
{
?s recp:ref_mat ?o
}
GROUP BY ?o
ORDER BY DESC(?count)
結果は次のようになる。
----------------------------
| o | count |
============================
| fmat:塩 | 27 |
| fmat:水 | 19 |
| fmat:玉子 | 11 |
| fmat:こしょう | 9 |
| fmat:たまねぎ | 9 |
| fmat:にんにく | 9 |
| fmat:片栗粉 | 7 |
| fmat:長葱 | 7 |
| fmat:しょうゆダレ | 6 |
| fmat:薄力粉 | 6 |
| fmat:オリーブオイル | 5 |
| fmat:砂糖 | 5 |
| fmat:しょうゆ | 4 |
| fmat:バター | 4 |
| fmat:パセリ | 4 |
| fmat:胡椒 | 4 |
| fmat:酒 | 4 |
| fmat:鶏モモ肉 | 4 |
| fmat:クラッカー | 3 |
| fmat:トマト | 3 |
| fmat:マヨネーズ | 3 |
| fmat:ワイン | 3 |
| fmat:玄米 | 3 |
| fmat:豚肉 | 3 |
| fmat:うどん | 2 |
| fmat:きゅうり | 2 |
| fmat:なめこ | 2 |
| fmat:もやし | 2 |
| fmat:アジ | 2 |
| fmat:アスパラガス | 2 |
| fmat:カットトマト缶 | 2 |
| fmat:キャビア | 2 |
| fmat:キャベツ | 2 |
| fmat:クリームチーズ | 2 |
| fmat:ケチャップ | 2 |
| fmat:サラダ油 | 2 |
| fmat:シーフードミックス | 2 |
| fmat:チーズ(ピザ用) | 2 |
| fmat:ベーコン | 2 |
| fmat:ホウボウ | 2 |
| fmat:レモン | 2 |
| fmat:固形コンソメ | 2 |
| fmat:強力粉 | 2 |
| fmat:昆布 | 2 |
| fmat:木耳 | 2 |
| fmat:牛サーロイン | 2 |
| fmat:牛バラ肉 | 2 |
| fmat:牛モモ肉 | 2 |
| fmat:生クリーム | 2 |
| fmat:生パスタ | 2 |
| fmat:生姜 | 2 |
| fmat:蒲鉾 | 2 |
| fmat:豚骨スープの素 | 2 |
| fmat:酢 | 2 |
| fmat:うずら玉子 | 1 |
| fmat:かぶ | 1 |
| fmat:からすみ | 1 |
| fmat:きのこ | 1 |
| fmat:しめじ | 1 |
| fmat:しょうが | 1 |
| fmat:たらこ | 1 |
| fmat:ほうれん草 | 1 |
| fmat:アサリ(貝殻付き) | 1 |
| fmat:イサキ | 1 |
| fmat:イシダイ | 1 |
| fmat:エビ | 1 |
| fmat:オリーブ | 1 |
| fmat:カレイ | 1 |
| fmat:カレールー | 1 |
| fmat:カレー粉 | 1 |
| fmat:クレソン | 1 |
| fmat:サバ | 1 |
| fmat:サンマ | 1 |
| fmat:ザーサイ | 1 |
| fmat:シチュールー | 1 |
| fmat:ジャガイモ | 1 |
| fmat:スタッフドオリーブ | 1 |
| fmat:スペアリブ | 1 |
| fmat:スモークサーモン | 1 |
| fmat:セロリ | 1 |
| fmat:ソース | 1 |
| fmat:タイ | 1 |
| fmat:パイナップル缶 | 1 |
| fmat:パスタ | 1 |
| fmat:パプリカ | 1 |
| fmat:パン | 1 |
| fmat:ビーフシチュー | 1 |
| fmat:ピクルス | 1 |
| fmat:ピザ用チーズ | 1 |
| fmat:フェタチーズ | 1 |
| fmat:ブルーチーズ | 1 |
| fmat:ポン酢 | 1 |
| fmat:マグロ | 1 |
| fmat:レタス | 1 |
| fmat:味噌 | 1 |
| fmat:唐辛子 | 1 |
| fmat:大根 | 1 |
| fmat:打ち粉 | 1 |
| fmat:挽き肉(牛7豚3) | 1 |
| fmat:春巻の皮 | 1 |
| fmat:春菊 | 1 |
| fmat:水溶き片栗粉 | 1 |
| fmat:牛モモ | 1 |
| fmat:牡蠣(生食用) | 1 |
| fmat:玉葱 | 1 |
| fmat:生鮭 | 1 |
| fmat:蕎麦(乾、十割) | 1 |
| fmat:豚ロース肉 | 1 |
| fmat:青鯛 | 1 |
| fmat:骨付き鶏モモ肉 | 1 |
| fmat:骨付き鶏モモ肉ぶつ切り | 1 |
| fmat:鶏 | 1 |
| fmat:鶏ムネ肉 | 1 |
| fmat:鶏飯 | 1 |
----------------------------
塩が27レシピ、水が19レシピで多く、次いで玉子が11件、こしょうが9、たまねぎが9件と続いていた。