最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

SAP HANA中文文本处理(一):RLANG实现数据实时抓取

[复制链接]
跳转到指定楼层
楼主
发表于 2014-9-29 17:26:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

R语言大数据分析和挖掘重要的工具,主要用于统计分析、绘图、数据挖掘。

SAP HANA内部集成了R模块,R程序容许以RLANG存储过程的形式嵌入到SAP HANA的SQL代码中。

    SAP HANA与R集成环境主要由三大部分构成:SAP HANA数据库、R环境以及我们的基于SAP HANA与R的应用。


    1.环境准备

        我们除了要准备SAP HANA数据库外,还要额外准备好R环境(并且需要安装好Rserve包)。然后我们需要在SAP HANA indexserver中配置相应的Rserve信息,以让两者可以协调工作。具体安装配置信息可见

http://help.sap.com/hana/SAP_HANA_R_Integration_Guide_en.pdf


    2.SAP HANA数据库准备


我们首先创建要用到的SCHEMA、TABLE以及相应的TABLE TYPE。



  • CREATE SCHEMA RTEST;  
  • SET SCHEMA RTEST;  
  • CREATE TABLE URL(  
  • URL VARCHAR(500)  
  • );  
  • CREATE TABLE URL_CONTENT(  
  •   "URL" VARCHAR(500),  
  •   "CONTENT" NCLOB,  
  •   "LANGU" VARCHAR(5)  
  • );  
  • CREATE TYPE URL_TYPE AS TABLE ( "URL" VARCHAR(500))  
  • CREATE TYPE URL_CONTENT_TYPE AS TABLE (  
  •   "URL" VARCHAR(500),  
  •   "CONTENT" NCLOB,  
  •   "LANGU" VARCHAR(5)  
  • );  

    其中表URL(见下图)存储了需要抓取网页内容的URL集合,URL_CONTENT表用于存储URL抓取下来的正文内容。URL_TYPE是表URL对应的表类型,URL_CONTENT_TYPE是URL_CONTENT表对应的表类型。

    3. RLANG爬虫实现

为了使用R抓取网页,我们首先安装RCurl包,即可实现简单的网页抓取任务。主要代码如下所示:



  • CREATE PROCEDURE CRAWLER_R (IN url URL_TYPE,OUT result URL_CONTENT_TYPE)  
  • language rlang as  
  • begin  
  • setwd("/tmp/")  
  •   --自定义function用于抓取网页内容  
  •     crawler<-function(url){  
  •         tryCatch({  
  •             library("RCurl")  
  •   --调用getURL方法即可抓取网页HTML源码  
  •             html<-getURL(url[1],.encoding="utf-8",.mapUnicode = FALSE)  
  •             return (html)  
  •         },error=function(err){  
  •             return("")  
  •         },finally={  
  •            gc()  
  •         }  
  •       )  
  •     }  
  •     --调用自定义方法crawler,并保存结果  
  •   content<-as.character(Apply(url,1,crawler))  
  •   --抓取结果写回数据库表中  
  •     result <- as.data.frame(cbind(URL=url$URL,CONTENT=content), stringsAsFactors=FALSE)  
  • end;  

上面的RProcedure需要传入两个数据库表;第一个表存储了要抓取的URL记录,第二个表用于存储抓取的网页正文内容。代码中crawler是自定义的用于抓取网页的方法。在crawler中我们使用了RCurl包下的getURL方法来实现网页的抓取,该方法可以直接返回网页的HTML源码。然后我们再从HTML源码中提取出网页正文内容。关于提取HTML正文内容的方法有很多,比如可以基于XPATH将HTML解析成XML文档,然后剔除无用的HTML结点,最终保留下正文内容;也可以基于行块分分布函数来抽取正文内容等等。

上述RProcedure的抓取过程是单线程的,无法并发执行,当需要大批量抓取网页内容时速度比较慢。这时我们可以借助R的并发包parallel将上述程序改写成多线程版本的。

RProcedure完成之后我们可以使用下面命令来调用:

    CALL CRAWLER_R(URL,URL_CONTENT) with overview;


       下图显示了最终抓取的网页内容。



楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-5-5 10:48

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表