0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

料理レシピと食材の検索(料理レシピSPARQL検索2)

0
Posted at

(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件と続いていた。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?