基于RDF三元组的微博数据格式化存储方法_第1页
基于RDF三元组的微博数据格式化存储方法_第2页
基于RDF三元组的微博数据格式化存储方法_第3页
基于RDF三元组的微博数据格式化存储方法_第4页
基于RDF三元组的微博数据格式化存储方法_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机科学与技术学院毕业设计(论文)论文题目基于RDF三元组的微博数据格式化存储方法指导教师职称博士讲师学生姓名学号专业网络工程班级系主任院长起止时间2013年10月11日至2014年5月23日2014年5月23日目录摘要 iAbstract ii引言 1第一章微博数据获取 页共51页引言如今,随着社交网络化时代的逐步到来,各种社交软件和社交平台接踵出现,而微博,这种基于用户关系进行信息分享、传播的平台开始被越来越更多的人喜爱和使用。因此,随着微博用户的增多以及时间的推移,微博上的信息数据量也开始越来越庞大而复杂,所以,要想从这些信息数据中获取某相关数据或分析某相关数据不是一件容易的事情。虽然现在有各种搜索引擎的帮助,但是仅凭靠利用关键字的搜索技术,往往难达到理想的效果。例如:如果你通过关键字“苹果”进行搜索,搜索引擎很难判断出你是想搜索苹果这种水果,还是想搜索苹果这种品牌手机,或是苹果公司的其他相关信息。因此,这里就会牵扯到语义搜索这一问题,即让计算机能够理解Web上的资源,以便实现人和计算机,计算机与计算机之间无偏差的信息传递。这种语义Web就需要RDF(ResourceDescriptionFramework)来对数据结构进行语义描述。RDF定义了一种通用的资源描述框架,即用资源、属性、属性值的三元组,并以XML为语法来灵活地描述Web上的资源。此三元组结构类似于一个句子的主语、谓语、宾语的关系,而这三个组成元素主要是用URI(UniformResourceIdentifiers)来进行标识,这就让它具有了语义描述的特征,使得计算机能理解Web上的资源,避免歧义的产生,实现人机对资源的可读性。作为语义网表示语义信息的基础,RDF数据也开始被广泛的应用。目前,虽然国内外对基于RDF关系的数据存储或数据查询有一定的研究[1][2][3],但是针对某个具体数据案例的基于RDF三元组的数据存储的方法的研究还是比较少,尤其是在国内,除了有对基于RDF的CM(公共信息模型)数据存储方案的研究与实现[4]外,其他都只是对基于关系数据库的RDF数据存储[5]或者是语义网环境下的RDF数据存储的研究[6],亦或是一些对RDF数据的存储查询机制[7][8][9]和查询语言SPARQL的一些研究[10][11][12]。所以,本文主要是以新浪微博数据为具体案例,按RDF三元组的规则对微博数据进行格式化存储方法的研究,通过此方法提高资源检索和分析管理的效率,熟悉了解利用RDF描述Web资源的实现过程,探索RDF在语义搜索中的优越性以及它的发展应用前景。

第一章微博数据获取1.1新浪微博开放平台1.1.1简介新浪开放平台是一种基于新浪微博客系统的开发平台,主要用来实现信息的订阅、资源的分享和交流,其体系结构类似于国外的社交软件Twitter。广大开发者或网站只要登录开放平台网站并在其中创建应用,便可通过开放平台提供的各种开放接口(OpenAPI)对微博系统进行读写,获取自己想要的数据和实现某些应用功能,挖掘出微博系统的新功能。1.2微博数据获取1.2.1微博数据获取流程图首先,为清楚直观地了解微博数据获取的整个过程,这里描绘出了整个数据获取过程的流程图,如图1.1所示:图1.1微博数据获取流程图1.2.2应用的创建如图1.1所示,获取微博的数据,首先要做的一步就是创建应用,其创建的过程大致如以下几个步骤:第一步:进入新浪开放平台网站(网址:/)。第二步:选择“微连接”目录下的“站内应用”,然后再选择右上角的“创建应用”按钮。第三步:选择“创建应用”按钮后,会弹出开发者信息填写的一个注册界面,填写信息并通过邮件激活。第四步:填写创建应用的相关信息。填好应用对应的实际地址,本次实验设计使用的是南华大学的官网地址(/)。若只为简单地获取微博数据,本地址可以随意选取,没有太多具体要求。第五步:提交创建的应用之后,在页面“管理中心”的“应用信用”中的“基本信息”中,可以看到自己创建的应用的基本信息以及新浪系统自动为该应用生成的AppKey和AppSecret,这个两个值将是获取微博数据的重要基石。为了应用的成功创建而不出现第三方的授权错误,在“高级信息”的中还必需填写可实现的回调地址,便于后面从地址栏中获取“code”的值。本实验设计此处填写也还是南华大学的官网地址如图1.2所示:图1.2回调地址填写1.2.3下载软件开发包(SDK)如图1.1所示,通过新浪开放平台获取微博数据还有一个比较重要的步骤就是下载软件开发包(SDK)。新浪开放平台提供了很多的软件开发包供开发者下载使用,里面提供了较为丰富的开发源代码可供开发者参考、学习和使用,如图1.3所示。因整个毕业设计的实现使用的基本都是java语言,所以本次实验设计这里下载使用的是javaSDK。下载地址:/p/weibo4j/downloads/detail?name=weibo4j-oauth2-beta2.1.1.zip。图1.3所有SDK版本下载好Weibo4j-oauth2.0-beta2.1.1.zip后,解压得到weibo4j-oauth2,里面内容如图1.4所示。并将其解压得到的weibo4j-oauth2导入到Eclipse中。图1.4weibo4j-oauth21.2.4获取微博数据为了成功授权用户的登录,此时需要配置weibo4j-oauth2工程中src目录下perties里面的参数值。其中perties的内容如下:client_ID=client_SERCRET=redirect_URI=baseURL=/2/accessTokenURL=/oauth2/access_tokenauthorizeURL=/oauth2/authorizermURL=/2/参数配置情况如下(后四行内容无需修改):client_ID=Appkey的值client_SERCRET=AppSecret的值redirect_URI=应用成功发布在新浪微博的对应的实际地址的值,本次实验设计这里应该填写的是南华大学官网的网址。配置好perties里面的参数值后,编译运行weibo4j-oauth2工程下examples里weibo4j.examples.oauth2中的OAuth4Code.java文件,此时浏览器会跳转到授权界面,并成功地自动跳转到南华大学官网的首页,在地址栏中会有出现一个code值,如图1.5所以:图1.5获取到的code值此时,将该code值复制到Eclipse的console窗口中,按enter键继续便可以获得access_token的值,此值相当于一个访问令牌,拥有此认证码相当于微博账号得到了微博系统的认可和授权,便拥有了对微博系统的一些操作的权限。运行结果如图1.6所示:图1.6获取到的access_token值在weibo4j-oauth2工程中创建一个文件输出的java文件:FileOutputUtil.java,内容如下:packagecom.test;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importernal.generic.NEW;publicclassFileOutputUtil{ //privatestaticintcount=0; privatestaticlongcount=System.currentTimeMillis(); publicstaticvoidprintToFile(Stringstr){ StringfileName="C:\\Users\\smiao\\Desktop\\beyesheji\\data\\weibo"+++count+".txt"; Filefile=newFile(fileName); FileWriterfw=null; try{ fw=newFileWriter(file); fw.write(str); }catch(IOExceptione){ e.printStackTrace(); }finally{ if(fw!=null){ try{ fw.close(); }catch(IOExceptione){ e.printStackTrace(); } } } }}接着修改weibo4j.examples.timeline中的GetFriendsTimeline.java里面的传递参数,编译运行GetFriendsTimeline.java,便可以在配置的本机目录下找到抓取到的微博数据。由于微博系统封闭了开放中的一些接口,所以在此所获取的是授权了的自己账号的微博用户首页中的所有微博数据。部分实验结果如图1.7所示。图1.7获取下来的微博数据这样,通过运用软件开发包就成功的获取到了微博数据。其中南华大学官方微博4月24号所发的一条微博数据的格式内容如下表1.1所示:表1.1一条微博数据Status[user=User[id=5078502209,screenName=南华大学,name=南华大学,province=43,city=1000,location=湖南,description=南华大学是由工业和信息化部、国家国防科技工业局、中国核工业集团公司与湖南省人民政府共建,具有56年办学历史的综合性大学。,url=,profileImageUrl=/508502209/50/40049905553/1,userDomain=uscnews,gender=m,followersCount=279,friendsCount=91,statusesCount=26,favouritesCount=0,createdAt=WedMar1911:26:09CST2014,following=true,verified=true,verifiedType=4,allowAllActMsg=false,allowAllComment=true,followMe=false,avatarLarge=/5078502209/180/40049905553/1,onlineStatus=0,status=null,biFollowersCount=70,remark=null,lang=zh-cn,verifiedReason=南华大学官方微博,weihao=,statusId=],idstr=3702851022897155,createdAt=ThuApr2411:59:02CST2014,id=3702851022897155,text=追梦青春:聚光灯下的舞蹈精灵-人物-湖南图片网-湖南图片库/8sQLs6z,source=Source[url=/t/feed/2afzVX,relationShip=nofollow,name=百度分享],favorited=false,truncated=false,inReplyToStatusId=-1,inReplyToUserId=-1,inReplyToScreenName=,thumbnailPic=,bmiddlePic=,originalPic=,retweetedStatus=null,geo=null,latitude=-1.0,longitude=-1.0,repostsCount=0,commentsCount=0,mid=3702851022897155,annotations=,mlevel=0,visible=Visible[type=0,list_id=0]]1.3本章小结由于新浪的微博开放平台中提供的有软件开发包,所以可使用其来获取实验设计所需的微博数据,降低了数据获取的难度。但由于新浪为保护用户隐私以及系统安全,只提供开放了部分接口,所以本实验设计中所获取的数据是自己授权账号首页中的微博数据,数据有限。另外,在数据获取的整个过程中一些细节方面一定要仔细认真,尽量避免不必要的错误的出现。如:创建应用时回调地址的填写;perties里面的参数值的配置等。

第二章微博数据转换2.1微博数据分析对于所获取的微博数据,想要将其转换成RDF文件,首先要做的一个工作是对数据进行必要的分析,弄清楚每个参数指代的意思,这样才能清楚的知道数据中包含了一条微博的哪些相关信息量以及相关信息量之间的关系与结构,这样有利于其中重要信息的提取以及数据转换成RDF文件的过程的实现。其中,数据主要信息分析结果如下表2.1所示:表2.1数据分析结果id用户IDscreenName微博昵称description个人描述followersCount粉丝数friendsCount关注数statusesCount微博数favouritesCount收藏数verified加V标示,是否微博认证用户status用户最新一条微博verifiedReson认证原因statusIdstatusididstatusidtext微博内容source微博来源repostsCount转发数commentsCount评论数mid微博MID2.2微博数据转换2.2.1RDF简介资源描述框架(ResourceDescriptionFramework,简称RDF)是一种表达和描述Web上资源信息的比较灵活的数据模型[13][14][15][16],如图2.1所示。它是衍生自XML的一种结构。作为语义网中资源的描述标准,RDF定义了一种通用框架,即资源(resources)、属性(attributes)、属性值(attributevalues)的三元组,类似于一个句子的主语(subject)、谓语(predicate)、宾语(object)的结构[17]。其以XML为语法,用统一资源标识符URI(UniformResourceIdentifiers)来标识事物,用较简单的属性和属性值描述Web上的资源,其中资源是可拥有URI的任何事物[18]。图2.1RDF数据模型为了加深对RDF三元组的理解,这里举一个简单的列子:句子陈述:“Thetitleof/is南华大学-UniversityofSouthChina.”句子的主体为:/谓词为:title客体为:南华大学-UniversityofSouthChina此陈述也可以用RDF图来表示,其中主体用一个节点来表示,客体也用一个节点来表示。谓词则可以用一条由主语指向宾语的弧来表示。如图2.2所示:图2.2RDF图对应的RDF文档为:<?xmlversion="1.0"?><rdf:RDFxmlns:rdf="/1999/02/22-rdf-syntax-ns#"xmlns:dc="/dc/elements/1.1/"><rdf:Descriptionrdf:about="/"><dc:title>南华大学-UniversityofSouthChina</dc:title></rdf:Description></rdf:RDF>使用W3C组织提供的RDF文件在线验证器对其验证,可得如图2.3所示验证结果。通过验证结果可以看出该RDF文档其实描述的也就是“Thetitleof/is南华大学-UniversityofSouthChina.”的意思。其中在线验证器的网址为:/RDF/Validator/。图2.3验证结果2.2.2微博数据转换的实现RDFschema设计对于通过新浪微博开放平台获取的微博数据信息数据量比较的多和杂,所以在对数据进行转换时,为降低实验设计的复杂性,可以适当舍去一些不重要的信息量,而只提取其中重要关键的信息量。在本文设计中,提取的信息有:用户id,微博昵称(screenName),个人描述(description),粉丝数(followersCount),关注数(friendsCount),微博数(statuesCount),收藏数(favouritesCount),是否是认证用户(verified),认证原因(verifiedResonance),微博id,微博内容(text),微博内容来源(resource),微博转发数(repostsCount),微博评论数(commentsCount)。为能很好的呈现出各信息之间的关系,以便数据转换过程的顺利实现,首先设计相应数据的RDFschema,如图2.4所示:图2.4RDF图在图2.4中,使用了两个没有URIref的空节点(两个小的绿色小椭圆),虽然这两个节点没有URIref,但是它们都表达了它们应该表达的含义,而且起到了将图中各个部分之间连通的必要作用。如第一个空节点表示的就是“用户的微博”这一概念,第二个空表示的就是“微博影响力”这一概念。根据图2.4所示内容可以写出相应的三元组,如表2.2所示:表2.2一条微博对应的RDF三元组Weibo:5018502209user:id“5018502209”Weibo:5018502209user:screenName“南华大学”Weibo:5018502209user:description“南华大学是由工业和信息化部、国家国防科技工业局、中国核工业集团公司与湖南省人民政府共建,具有56年办学历史的综合性大学。”Weibo:5018502209user:verified“true”Weibo:5018502209user:verifiedReason“南华大学官方微博”Weibo:5018502209user:followersCount“279”Weibo:5018502209user:friendsCount“91”Weibo:5018502209user:statusesCount“26”Weibo:5018502209user:favouritesCount“0”Weibo:5018502209user:txt_:a_:atxt:id3702851022897155_:atxt:text“追梦青春:聚光灯下的舞蹈精灵-人物-湖南图片网-湖南图片库/8sQLs6z”_:atxt:sourcerdf:resource_:atxt:influence_:b_:btxt:repostsCount“0”_:btxt:commentsCount“0”在表2.2中,“_:a”和“_:b”分别表示的是图2.4中出现的两个空节点,它们在表中出现的地方就是空节点出现的地方。程序实现微博数据转换在清楚数据信息及信息关系之后,可用RDF/XML语法对图2.4所示内容描述如下:<?xmlversion="1.0"?><rdf:RDF xmlns:rdf="/1999/02/22-rdf-syntax-ns#" xmlns:user="/user#"xmlns:txt="/txt#"><rdf:Descriptionrdf:about="/u/5078502209"><user:id>5078502209</user:id><user:screenName>南华大学</user:screenName><user:description>南华大学是由工业和信息化部、国家国防科技工业局、中国核工业集团公司与湖南省人民政府共建,具有56年办学历史的综合性大学。</user:description><user:followersCountrdf:datatype="/2001/XMLSchema#integer">279</user:followersCount><user:friendsCountrdf:datatype="/2001/XMLSchema#integer">91</user:friendsCount><user:statusesCountrdf:datatype="/2001/XMLSchema#integer">26</user:statusesCount><user:favouritesCountrdf:datatype="/2001/XMLSchema#integer">0</user:favouritesCount><user:verified>true</user:verified><user:verifiedReason>南华大学官方微博</user:verifiedReason><user:txtrdf:nodeID="a"/></rdf:Description><rdf:Descriptionrdf:nodeID="a"><txt:id>3702851022897155</txt:id><txt:text>追梦青春:聚光灯下的舞蹈精灵-人物-湖南图片网-湖南图片库/8sQLs6z</txt:text><txt:sourcerdf:resource="/t/feed/2afzVX"/><txt:influencerdf:nodeID="b"/></rdf:Description><rdf:Descriptionrdf:nodeID="b"><txt:repostsCountrdf:datatype="/2001/XMLSchema#integer">0</txt:repostsCount><txt:commentsCountrdf:datatype="/2001/XMLSchema#integer">0</txt:commentsCount></rdf:Description></rdf:RDF>(注:行号的加入是为了便于解释理解此RDF例子,RDF文件中本身并不包含有行号)第1行是XML声明,它表示以下内容将是XML,而且XML的版本号是1.0。第2行以rdf:RDF元素开始,它表示以下内容用于表达RDF,直到第32行的</rdf:RDF>结束。第3-5行为XML命名空间声明。其中xmlns:rdf表明当前内容中出现的所有前缀为rdf:的标签都属于由下列URIref所标识的命名:/1999/02/22-rdf-syntax-ns#。另外xmlns:user和xmlns:txt是自己自定义的两个命名空间声明。第6-31行为图2.2所示内容的RDF/XML主要部分。第6行表示对资源(微博用户)/u/5078502209描述的开始。其中第19和26行分别用rdf:nodeID属性来定义了两个空白节点,第21和28行分别是对两个空白节点的引用,使用空白节点的优点是可以在一个RDF文件中多次的引用空白节点。对于编写好的RDF文件,为验证其正确性使用W3C组织提供的在线验证器对其验证。通过在线验证器可以验证出编写的RDF可以被解析成功,验证结果如图2.5所示:图2.5验证结果确定好一条微博数据转换成RDF文件的格式后,对于很多条微博数据的处理就可以通过编程的方法来处理。在编程实现的过程中,为减少对数据的再次读入,可直接在weibo4j-oauth2工程调用获取到的微博数据的相关参数,后再写入RDF文件中。这样就可实现微博数据转换成RDF文件的过程。其中程序伪代码描述如下:定义一个XML文档;建立XML文档的根rdf:RDF;添加三个命名空间;读取第一条微博ID,建立rdf:Description节点;建立该条微博剩下所有需建立的节点;循环处理接下来读取到的每一条微博;获得的RDF文件没有智能分行,数据看上去也比较的乱,这时可使用Eclipse中的插件aptana来解决这一问题,若Eclipse中没有则需要下载安装。程序代码和转换成功的全部RDF文件见附录一与附录二。获得RDF文件的部分数据如下: <rdf:Descriptionrdf:about="/u/1272752967"> <user:id>1272752967</user:id> <user:screenName>杨舒婷Sweet</user:screenName> <user:description>工作请洽经理人:赵天271889854@,微博"@赵天99"</user:description> <user:followersCountrdf:datatype="/2001/XMLSchema#integer">474518</user:followersCount> <user:friendsCountrdf:datatype="/2001/XMLSchema#integer">428</user:friendsCount> <user:statusesCountrdf:datatype="/2001/XMLSchema#integer">1753</user:statusesCount> <user:favouritesCountrdf:datatype="/2001/XMLSchema#integer">369</user:favouritesCount> <user:verified>true</user:verified> <user:verifiedReason>演员</user:verifiedReason> <user:txtrdf:nodeID="a1272752967"/> </rdf:Description> <rdf:Descriptionrdf:nodeID="a1272752967"> <txt:id>3705427508046214</txt:id> <txt:text>五一快乐![鲜花][太开心][太开心][太开心]</txt:text> <txt:sourcerdf:resource="/t/feed/3G5oUM"/> <txt:influencerdf:nodeID="a3705427508046214"/> </rdf:Description> <rdf:Descriptionrdf:nodeID="a3705427508046214"> <txt:repostsCountrdf:datatype="/2001/XMLSchema#integer">0</txt:repostsCount> <txt:commentsCountrdf:datatype="/2001/XMLSchema#integer">2</txt:commentsCount> </rdf:Description> <rdf:Descriptionrdf:about="/u/1195242865"> <user:id>1195242865</user:id> <user:screenName>杨幂</user:screenName> <user:description>这里有一只狐狸,幸福,感恩,知足,爱~><</user:description> <user:followersCountrdf:datatype="/2001/XMLSchema#integer">33409418</user:followersCount> <user:friendsCountrdf:datatype="/2001/XMLSchema#integer">582</user:friendsCount> <user:statusesCountrdf:datatype="/2001/XMLSchema#integer">2527</user:statusesCount> <user:favouritesCountrdf:datatype="/2001/XMLSchema#integer">469</user:favouritesCount> <user:verified>true</user:verified> <user:verifiedReason>演员,代表作《宫》《仙剑奇侠传三》等</user:verifiedReason> <user:txtrdf:nodeID="a1195242865"/> </rdf:Description> <rdf:Descriptionrdf:nodeID="a1195242865"> <txt:id>3705424333283246</txt:id> <txt:text>五一快乐[拜拜]</txt:text> <txt:sourcerdf:resource="/t/feed/3G5oUM"/> <txt:influencerdf:nodeID="a3705424333283246"/> </rdf:Description> <rdf:Descriptionrdf:nodeID="a3705424333283246"> <txt:repostsCountrdf:datatype="/2001/XMLSchema#integer">875</txt:repostsCount> <txt:commentsCountrdf:datatype="/2001/XMLSchema#integer">2018</txt:commentsCount>其对应的相关博文图如图2.6所示(因时间关系,可能RDF文件中与对应图片中的评论数、转发数等会存在一些偏差):图2.6微博博文图2.3本章小结将获取的微博数据转换成RDF文件是本实验设计中最为关键重要的一个步骤,其重点和难点在于对RDF的理解以及RDF的运用。本章开始通过运用一个陈述例子对RDF做了简要的介绍和讲解,接着设计了提取的微博数据相关信息的RDFschema,并且写出了相对应的三元组,对设计出的RDF文件也做出了简要的讲解,也给了部分转换成功了的RDF文件以及相对应的微博博文。总的来说,整个数据转换过程的实现还是有一定的难度。虽说在设计过程中阅读学习了很多关于RDF的文献与资料,但由于初次接触还是遇到了不少的困难,但实践出真知,在边学习和边实践的过程中还是一一解决了。如:通过实践可以获知空节点的命名不能全是数字串,否则会报错。

第三章微博RDF数据的存储及查询3.1OpenlinkVirtuoso数据库3.1.1Virtuoso数据库简介Virtuoso数据库是OpenLink公司开发的一个可伸缩的高性能的跨平台的对象关系数据库,其为用户提供了复杂的SQL\XML\RDF数据库管理功能。支持工业标准的交互查询协议、API等[19]。其下载地址为:/。下载时需根据自己的机器的操作系统的位数选择适合的版本。32位操作系统的机器应该选择Virtuoso6.0的版本。64位操作系统的机器则应该选择Virtuoso7.0或以上的版本。3.1.2Virtuoso数据库的安装及使用Virtuoso数据库的安装过程较简单,只是应注意其安装目录必须是计算机的C盘目录下,其他目录则会无法安装或是报错。安装好Virtuoso数据库后,启动运行,然后在浏览器中输入http://localhost:8890/conductor/,便可获得Virtuoso数据库的可视化界面,如图3.1所示:图3.1Virtuoso数据库界面其中,Virtuoso数据库本身有给提供一个用户名为“dba”,密码为“dba”管理用户,所以我们直接使用此账号登录,后面的一系列数据的管理也使用此账号。当然,也可以根据需要使用此账号登录后,在数据库中添加自己想注册的新用户。账号登录后就可以进行后面一系列的数据处理了。3.2微博RDF数据的存储对于RDF文件的导入,首先在用户登录后选择“Linkeddata”中的“QuadStoreUpload”,此时点击“File*”后的“浏览”按钮,选择自己要导入的RDF文件,单击确定。后给该文件命名一个GraphIRI*,如:http://localhost:8890/DAV/testRDF。单击Upload完成文件的导入工作。流程如图3.2和图3.3所示:图3.2文件导入图3.3GraphIRI命名文件成功导入后,在“Linkeddata”中的“Graphs”中会看到新出现了一个GraphIRI。如图3.4所示:图3.4Graph查看3.3微博RDF数据的查询3.3.1SPARQL查询语言简介当进行RDF数据查询时,需使用到SPARQL(SimpleProtocolandRDFQueryLanguage)查询语句。SPARQL是一种面向资源描述框架RDF数据模型的查询语言,是W3C组织指定的候选推荐标准。之前的RDF查询语言有rdfDB、RDQL和SeRQL,而SPARQL则是构建在它们之上,并且拥有一些新的功能,如:能以空白结点、无格式和类型文字的形式提取信息、可以提取RDF子图、能在查询图中构造基于信息的新RDF图等。作为一种数据访问语言,SPARQL将Web2.0和Semanticweb两种新的web技术紧密联系了起来,很有可能成为将来的主流网络数据库的查询语言和数据获取标准[10][11][20]。3.3.2微博数据查询使用如下查询语句查询导入的RDF数据,可获得所有数据的主谓宾三元组的信息,部分查询结果如图3.5和图3.6所示:PREFIXrdfs:</1999/02/22-rdf-syntax-ns#>PREFIXuser:</user#>PREFIXtxt:</txt#>SELECT?s?p?oWHERE{?s?p?o}图3.5查询结果图3.6查询结果如果想要知道杨幂微博的相关信息,可以进行如下的查询操作:1.使用如下查找语句找到杨幂微博用户的的ID。PREFIXrdfs:</1999/02/22-rdf-syntax-ns#>PREFIXuser:</user#>PREFIXtxt:</txt#>SELECT?sWHERE{?s?p"杨幂"}查询的结果如图3.7所示:图3.7查询图2.根据获取到的用户杨幂的微博ID使用如下的查询语句查询杨幂微博的相关信息。PREFIXrdfs:</1999/02/22-rdf-syntax-ns#>PREFIXuser:</user#>PREFIXtxt:</txt#>SELECT?p?oWHERE{</u/1195242865>?p?o}查询结果如图3.8所示:图3.8查询结果3.接着查看杨幂最新发的那条微博内容,以及微博的转发数和评论数。如图3.9和图3.10所示(因时间关系,其转发数和评论数可能有变化而与试验结果有偏差):图3.9查询结果图3.10查询结果当然,我们也可以进入杨幂的微博进行查看验证,如图3.11所示(因时间关系,其粉丝数可能有变化而与试验结果有些许偏差):图3.11微博查看3.4本章小结本章主要讲解介绍了RDF数据的存储和查询,并用图片展示的方式给出了存储的过程和数据查询的结果。同时,对使用到了的Virtuoso数据库和SPARQL查询语言也做了简要介绍。由于Virtuoso数据库和SPARQL都是初次接触,所以在学习使用过程中不是很熟练,但熟能生巧,多次的实践摸索后基本掌握了该数据库和查询语言的使用。

第四章总结与展望4.1总结利用RDF三元组转化和存储获取的微博数据,便于将庞大而复杂的微博信息数据简化存储于数据库中。以新浪微博数据为例,通过实验设计可以看出RDF便于分析处理大量的信息数据,这对于机器进行多种基于语义的智能化应用有一定的帮助,也能很好的保障实现人与计算机之间以及计算机与计算机之间无偏差无歧义的交流。通过实验设计,实现了微博数据的格式化存储,对RDF的了解从零开始,也有了一定深度的认识和了解。在实验设计的过程中,也遇到过很多的困难,如:一开始对RDF、OpenlinkVirtuoso数据库以及SPARQL语言完全无任何了解;微博数据的获取步骤较为繁琐等。但在自己的努力和老师的帮助下,困难都一一的慢慢克服了,这增强了自己的自信心,同时我也看到了自我学习、自我钻研能力的重要性。所以,在今后的工作学习中要不断的加强自我学习,弥补自己的不足之处,向着越来越好的方向前进。4.2展望本实验设计中,对于微博数据的格式化转换存储已经基本实现,也获得了理想中的实验结果。但由于时间和个人能力的关系,实验设计中可能还会存在着一些不足之处尚待优化和改进。目前,RDF标准推出的时间还不是很长,其在国内应用的也不是很广泛,但是随着互联网的发展,Web上资源的日益增多,RDF在大数据中的语义搜索方面将会很具应用价值和发展前景,它将能大大的提高资源检索和分析管理的效率,让人们享受越来越便捷和智能的网络世界。

参考文献KlyneG,CarrollJJ.Resourcedescriptionframework(rdf):Conceptsandabstractsyntax.W3CRecommendation,10Feb.2004[J].2004.ChangLIU,HaofenW,YongYU,etal.TowardsEfficientSPARQLQueryProcessingonRDFData[J].清华大学学报,2010(6).Yun-huaG,DanL.ResearchonRDFQueryUsingSPARQLLanguage[C]//Proceedingsofthe2012InternationalConferenceonConvergenceComputerTechnology.IEEEComputerSociety,2012:105-109.林昌暖,吴健.基于RDF的CIM数据存储方案研究与实现[J].科学技术与工程,2008,7(24):6339-6343.陶导,钱卫宁,魏芳,等.基于关系数据库的RDF数据存储[C].第二十五届中国数据库学术会议论文集(一).2008.杨睿,陶兰,朱礼军,等.语义万维网环境下的RDF数据存储[J].计算机工程与设计,2005,26(1):142-143.易雅鑫,宋自林,尹康银.RDF数据存储模式研究及实现[J].情报科学,2007,25(8):1218-1222.吴德龙.基于存储优化模型的RDF数据查询机制研究[D].华中科技大学,2011.朱敏.基于HBase的RDF数据存储与查询研究[D].南京大学,2013.陈彦.应用SPARQL进行RDF数据查询[J].企业技术开发,2007,26(7):6-10.谢桂芳.SPARQL-一种新型的RDF查询语言[J].湘南学院学报,2009,30(2):80-84.肖竹军.基于SPARQL的RDF数据节点间关系路径检索[J].微型机与应用,2011,30(9):50-53.ResourceDescriptionFramework(RDF)/W3CSemanticWebActivity./TR/REC-rdf-syntax/RDFSemantics./TR/rdf-mt/RDF-SemanticWebStandards./RDF/RDF/XMLSyntaxSpecification./TR/rdf-syntax-grammarW3School./rdf/index.asp:RDFSchema1.1./TR/rdf-schema/邹益民,张智雄,钱力,等.语义仓储Virtuoso的技术分析和应用[J].图书情报工作,2013,56(23):97-102.杜方,陈跃国,杜小勇.RDF数据查询处理技术综述[J].软件学报,2013,6:004.

谢辞本次毕业设计和论文的完成,首先我要感谢我的毕业设计指导老师罗凌云老师,感谢您几个月来对我的指导、帮助和支持。另外,感谢一起学习相伴了四年的同学们,朋友们,谢谢你们给我的帮助以及带给我的美好记忆。同时,我也要感谢南华大学以及教诲过我的南华大学的老师们,毕业将近,最后,再次对帮助我过的老师和同学们表示衷心的感谢!

附录附录一数据转换成RDF文件的代码packagecom.test;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importorg.dom4j.Document;importorg.dom4j.DocumentHelper;importorg.dom4j.Element;importorg.dom4j.io.XMLWriter;importweibo4j.model.Status;publicclassOutputToRDF{ //privateDocumentdocument=DocumentHelper.createDocument(); privateDocumentdocument;//xml文档 privateElementrdf_RDF_Element;//根节点 publicOutputToRDF(Documentdocument){ this.document=document; /**建立XML文档的根rdf:RDF*/ rdf_RDF_Element=document.addElement("rdf:RDF"); rdf_RDF_Element.addNamespace("rdf","/1999/02/22-rdf-syntax-ns#"); rdf_RDF_Element.addNamespace("user","/user#"); rdf_RDF_Element.addNamespace("txt","/txt#"); } publicvoidcreateElement(Statuss){ //建立rdf:Description节点 Elementrdf_Description_Element=rdf_RDF_Element .addElement("rdf:Description"); rdf_Description_Element.addAttribute("rdf:about","/u/" +s.getUser().getId()); //建立user:id节点 Elementuser_id_Element=rdf_Description_Element.addElement("user:id"); user_id_Element.setText(s.getUser().getId()); //建立user:screenName节点 Elementuser_screenName_Element=rdf_Description_Element .addElement("user:screenName"); user_screenName_Element.setText(s.getUser().getScreenName()); //建立user:description节点 Elementuser_description_Element=rdf_Description_Element .addElement("user:description"); user_description_Element.setText(s.getUser().getDescription()); //建立user:followersCount节点 Elementuser_followersCount_Element=rdf_Description_Element .addElement("user:followersCount"); user_followersCount_Element.addAttribute("rdf:datatype","/2001/XMLSchema#integer"); user_followersCount_Element.setText(String.valueOf(s.getUser().getFollowersCount())); //建立user:friendsCount节点 Elementuser_friendsCount_Element=rdf_Description_Element .addElement("user:friendsCount"); user_friendsCount_Element.addAttribute("rdf:datatype","/2001/XMLSchema#integer"); user_friendsCount_Element.setText(String.valueOf(s.getUser().getFriendsCount())); //建立user:statusesCount节点 Elementuser_statusesCount_Element=rdf_Description_Element .addElement("user:statusesCount"); user_statusesCount_Element.addAttribute("rdf:datatype","/2001/XMLSchema#integer"); user_statusesCount_Element.setText(String.valueOf(s.getUser().getStatusesCount())); //建立user:favouritesCount节点 Elementuser_favouritesCount_Element=rdf_Description_Element .addElement("user:favouritesCount"); user_favouritesCount_Element.addAttribute("rdf:datatype","/2001/XMLSchema#integer"); user_favouritesCount_Element.setText(String.valueOf(s.getUser().getFavouritesCount())); //建立user:verified节点 Elementuser_verified_Element=rdf_Description_Element .addElement("user:verified"); user_verified_Element.setText(String.valueOf(s.getUser().isVerified())); //建立user:verifiedReason节点 Elementuser_verifiedReason_Element=rdf_Description_Element .addElement("user:verifiedReason"); user_verifiedReason_Element.setText(s.getUser().getVerifiedReason()); //建立第一个空节点 Elementuser_txt_Element=rdf_Description_Element .addElement("user:txt"); user_txt_Element.addAttribute("rdf:nodeID","a"+s.getUser().getId()); //建立第二个rdf:Description节点 Elementrdf_Description_Element_1=rdf_RDF_Element .addElement("rdf:Description"); rdf_Description_Element_1.addAttribute("rdf:nodeID","a"+s.getUser().getId()); //微博博文id Elementtxt_id_Element=rdf_Description_Element_1.addElement("txt:id"); txt_id_Element.setText(s.getMid()); //微博博文 Elementtxt_text_Element=rdf_Description_Element_1 .addElement("txt:text"); txt_text_Element.setText(s.getText()); //微博来源 Elementtxt_source_Element=rdf_Description_Element_1 .addElement("txt:source"); txt_source_Element.addAttribute("rdf:resource",s.getSource().getUrl()); //第二个空节点 Elementtxt_influence_Element=rdf_Description_Element_1 .addElement("txt:influence"); txt_influence_Element.addAttribute("rdf:nodeID","a"+s.getMid()); //建立第三个rdf:Description节点 Elementrdf_Description_Element_2=rdf_RDF_Element .addElement("rdf:Description"); rdf_Description_Element_2.addAttribute("rdf:nodeID","a"+s.getMid()); //建立txt:repostsCount节点 Elementtxt_repostsCount_Element=rdf_Description_Element_2 .addElement("txt:repostsCount"); txt_repostsCount_Element.addAttribute("rdf:datatype","/2001/XMLSchema#integer"); txt_repostsCount_Element.setText(String.valueOf(s.getRepostsCount())); //建立txt:commentsCount节点 Elementtxt_commentsCount_Element=rdf_Description_Element_2 .addElement("txt:commentsCount"); txt_commentsCount_Element.addAttribute("rdf:datatype","/2001/XMLSchema#integer"); txt_commentsCount_Element.setText(String.valueOf(s.getCommentsCount())); } publicvoidsaveToFile(){ if(document!=null){ XMLWriterwriter=null; Stringfilepath="C:\\Users\\smiao\\Desktop\\beyesheji\\testRDF.rdf"; try{ writer=newXMLWriter(newFileWriter(newFile(filepath))); writer.write(document); }catch(IOExceptione){ e.printStackTrace(); }finally{ if(writer!=null){ try{ writer.close(); }catch(IOExceptione){ e.printStackTrace(); } } } } return; }}附录二数据转换成功了的RDF文件<?xmlversion="1.0"encoding="UTF-8"?><rdf:RDFxmlns:rdf="/1999/02/22-rdf-syntax-ns#"xmlns:user="/user#"xmlns:txt="/txt#"> <rdf:Descriptionrdf:about="/u/1289059323"> <user:id>1289059323</user:id> <user:screenName>魑魅魍魉甲子</user:screenName> <user:description>〓实体店地址〓北京东三环华威桥西北京古玩城A座二层91号。欢迎品鉴!!淘宝网藏传古董珠宝第一店。网址</user:description> <user:followersCountrdf:datatype="/2001/XMLSchema#integer">34987</user:followersCount> <user:friendsCountrdf:datatype="/2001/XMLSchema#integer">1293</user:friendsCount> <user:statusesCountrdf:datatype="/2001/XMLSchema#integer">1722</user:statusesCount> <user:favouritesCountrdf:datatype="/2001/XMLSchema#integer">391</user:favouritesCount> <user:verified>true</user:verified> <user:verifiedReason>藏学研究学者</user:verifiedReason> <user:txtrdf:nodeID="a1289059323"/> </rdf:Description> <rdf:Descriptionrdf:nodeID="a1289059323"> <txt:id>3705429449778253</txt:id> <txt:text>〓菩萨諦〓</txt:text> <txt:sourcerdf:resource="/t/feed/9ksdit"/> <txt:influencerdf:nodeID="a3705429449778253"/> </rdf:Description> <rdf:Descriptionrdf:nodeID="a3705429449778253"> <txt:repostsCountrdf:datatype="/2001/XMLSchema#integer">0</txt:repostsCount> <txt:commentsCountrdf:datatype="/2001/XMLSchema#integer">1</txt:commentsCount> </rdf:Description> <rdf:Descriptionrdf:about="/u/1272752967"> <user:id>1272752967</user:id> <user:screenName>杨舒婷Sweet</user:screenName> <user:description>工作请洽经理人:赵天271889854@,微博"@赵天99"</user:description> <user:followersCountrdf:datatype="/2001/XMLSchema#integer">474518</user:followersCount> <user:friendsCountrdf:datatype="/2001/XMLSchema#integer">428</user:friendsCount> <user:statusesCountrdf:datatype="/2001/XMLSchema#integer">1753</user:statusesCount> <user:favouritesCountrdf:datatype="/2001/XMLSchema#integer">369</user:favouritesCount> <user:verified>true</user:verified> <user:verifiedReason>演员</user:verifiedReason> <user:txtrdf:nodeID="a1272752967"/> </rdf:Description> <rdf:Descriptionrdf:nodeID="a1272752967"> <txt:id>3705427508046214</txt:id> <txt:text>五一快乐![鲜花][太开心][太开心][太开心]</txt:text> <txt:sourcerdf:resource="/t/feed/3G5oUM"/> <txt:influencerdf:nodeID="a3705427508046214"/> </rdf:Description> <rdf:Descriptionrdf:nodeID="a3705427508046214"> <txt:repostsCountrdf:datatype="/2001/XMLSchema#integer">0</txt:repostsCount> <txt:commentsCountrdf:datatype="/2001/XMLSchema#integer">2</txt:commentsCount> </rdf:Description> <rdf:Descriptionrdf:about="/u/1195242865"> <user:id>1195242865</user:id> <user:screenName>杨幂</user:screenName> <user:description>这里有一只狐狸,幸福,感恩,知足,爱~><</user:description> <user:followersCountrdf:datatype="/2001/XMLSchema#integer">33409418</user:followersCount> <user:friendsCountrdf:datatype="/2001/XMLSchema#integer">582</user:friendsCount> <user:statusesCountrdf:datatype="/2001/XMLSchema#integer">2527</user:statusesCount> <user:favouritesCountrdf:datatype="/2001/XMLSchema#integer">469</user:favouritesCount> <user:verified>true</user:verified> <user:verifiedReason>演员,代表作《宫》《仙剑奇侠传三》等</user:verifiedReason> <user:txtrdf:nodeID="a1195242865"/> </rdf:Description> <rdf:Descriptionrdf:nodeID="a1195242865"> <txt:id>3705424333283246</txt:id> <txt:text>五一快乐[拜拜]</txt:text> <txt:sourcerdf:resource="/t/feed/3G5oUM"/> <txt:influencerdf:nodeID="a3705424333283246"/> </rdf:Description> <rdf:Descriptionrdf:nodeID="a3705424333283246"> <txt:repostsCountrdf:datatype="/2001/XMLSchema#integer">875</txt:repostsCount> <txt:commentsCountrdf:datatype="/2001/XMLSchema#integer">2018</txt:commentsCount> </rdf:Description> <rdf:Descriptionrdf:about="/u/1733593221"> <user:id>1733593221</user:id> <user:screenName>郭子健Derek</user:screenName> <user:description>如果我是史泰龍</user:description> <user:followersCountrdf:datatype="/2001/XMLSchema#integer">44859</user:followersCount> <user:friendsCountrdf:datatype="/2001/XMLSchema#integer">382</user:friendsCount> <user:statusesCountrdf:datatype="/2001/XMLSchema#integer">2946</user:statusesCount> <user:favouritesCountrdf:datatype="/2001/XMLSchema#integer">1</user:favouritesCount> <user:verified>true</user:verified> <user:veri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论