一、前言
为了论证我对知识菜谱这个应用的理解程度,我将目前有的数据做了规整,并将其导入到Neo4j当中,形成了一个初级版的知识图谱。在做这个知识图谱的过程当中,由于我是直接得到了所需要的数据,并且拥有了属性之间的关系,所以构建知识图谱的知识获取是另一位同学做的。
说这个版本是个初级版本,是因为这其中还有几个问题没有处理,例如,目前来说,西红柿和番茄对这个知识图谱而言,不是一个东西,但是实际上,这就是一个东西……共指消歧,是下一步的工作。
二、构建思路
我们再来看一下json数据
{
"id": "helandouchaolarou_13",
"caiming": "荷兰豆炒腊肉",
"chengpin": "http://s1.st.meishij.net/r/47/93/1210797/s1210797_152074103598433.jpg",
"biaoqian": ["防癌", "抗菌消炎", "通便排毒", "抵抗力"],
"gongyi": "炒",
"kouwei": "家常味",
"nandu": "初级入门",
"renshu": "2人份",
"zhunbeishijian": "5分钟",
"pengrenshijian": "<5分钟",
"zhuliao": {
"荷兰豆": "250克",
"腊肉": "50克"
},
"fuliao": {
"大蒜": "20克",
"蚝油": "15毫升"
},
"guocheng": {
"1": ["腊肉切片,荷兰豆去筋,大蒜拍扁;", "http://s1.st.meishij.net/rs/47/93/1210797/n1210797_152074075549087.jpg"],
"2": ["将腊肉放入锅中;", "http://s1.st.meishij.net/rs/47/93/1210797/n1210797_152074076428917.jpg"],
"3": ["煸炒出油后放入大蒜;", "http://s1.st.meishij.net/rs/47/93/1210797/n1210797_152074077633595.jpg"],
"4": ["放入荷兰豆煸炒一会;", "http://s1.st.meishij.net/rs/47/93/1210797/n1210797_152074078910192.jpg"],
"5": ["稍软些时放入蚝油;", "http://s1.st.meishij.net/rs/47/93/1210797/n1210797_152074081320483.jpg"],
"6": ["再炒一会即可出锅。", "http://s1.st.meishij.net/rs/47/93/1210797/n1210797_152074082725507.jpg"]
},
"zhuti": ["#家常菜#", "#午餐#"],
"jiqiao": ["腊肉要煸炒出油防止油腻,腊肉本身有咸味,所以不用在放盐了。"]
}
个人之见,知识图谱有别于传统搜索引擎的地方在于,它能体现出实体之间的关系,而不是简单地做全文匹配分析。所以,为了迎合知识图谱应用在搜索引擎上的功能,这里面有一些属性是需要加进去的,而有的属性却不是非常有必要加进去。例如过程、成品图片就是没有必要加在Neo4j里面的,我们还会使用MongoDB来保存相关的内容,所以,只要有菜谱id就可以,我们在这里只需要保存在搜索当中能用到的。
实体
1、菜谱。属性:菜名、工艺、口味、难度、人数、准备时间、烹饪时间。
2、主题,无属性。
3、标签,无属性。
4、主料,无属性。
5、辅料、无属性。
关系
1、菜谱-主题 主题关系,无属性。
2、菜谱-标签 标签关系,无属性。
3、菜谱-主料 主料关系,属性:数量。
4、菜谱-辅料 辅料关系,属性:数量。
接下来先把数据保存在阿里云上的MongoDB和Neo4j里面,然后就该写搜索引擎的逻辑咯~