图书馆微博辅助管理程序设计
朱玉强
山东师范大学图书馆 济南 250014
摘要

针对管理员无法全天候管理微博的问题,基于新浪微博设计可利用信息库自动发布、利用知识库智能回复的辅助管理程序。通过操作网页文档对象、中文分词等获取微博数据,通过发送消息、模拟按键操作新浪微博官方PC客户端实现发布、回复。结果表明该程序辅助管理微博时可及时响应读者诉求。

关键词: 图书馆微博; 辅助程序; 辅助管理
Programming Assisted Tools for Library’s Microblog
Zhu Yuqiang
Shandong Normal University Library, Jinan 250014, China
Abstract

The administrator of library’s microblog cannot guarantee the 24-hour management. Based on Sina microblog, this paper designs an assisted tool which can timely post messages extracted from information libraries and can reply to the questions by extracting answers from knowledge bases, by ways of reading web documents, segmenting Chinese words and operating PC client of Sina microblog. The application example shows that the program can help managing microblog, especially when the administrator is offline.

Keyword: Library’s microblog; Assistant program; Aided management

微博在图书馆资源推介、与读者互动、提升图书馆形象等方面作用巨大,管理员应及时捕获微博动态、响应读者诉求。由于微博管理员无法保证24小时全天侯在线处理信息,因此研发与图书馆微博管理特色相适应的辅助管理程序有积极意义。

1 需求及技术思路

常见微博第三方应用以Web和客户端为主。获取微博数据通常有两种方法,一种是利用微博运营商提供的API接口及OAuth 1.0或2.0协议获取博主AccessToken,进而获得其个人信息及好友关系;另一种是使用网络爬虫。获取微博原始数据后,经中文分词、文本分类等处理,实现定时发布、自动转发或回复等个性化功能。定时自动发布微博方面,Web应用中Twitter有TweetLater[ 1],新浪、腾讯微博有皮皮精灵[ 2, 3]、微博定时发送器[ 4, 5]等;客户端应用中有新浪、腾讯微博官方客户端、皮皮精灵、微博AIR等,叶佳宁等[ 6]设计了PC桌面版地震信息自动发布系统。自动回复功能涉及语义分析及自动发布,张晨逸等[ 7]使用文本生成模型LDA建模处理Twitter数据集,进行语义分析、挖掘话题;邓一贵等[ 8]通过隐含语义分析对数据集建模以发现微博话题;郑斐然等[ 9]提出了一种中文微博新闻话题检测方法;姚飞等[ 10]介绍了清华大学图书馆利用开源软件A.L.I.C.E.开发智能聊天机器人用于实时参考咨询实践。

获取微博原始数据时,上述应用或研究大多调用微博API。各微博运营商对其开放API的广度、深度及调用频率等往往设置诸多限制,如Twitter在2010年4月后紧缩了API调用[ 11],第三方应用频遭封杀[ 12];新浪微博对普通授权 APP Key 限定单应用每用户每小时最多只能发30条微博[ 13]等。本文舍弃微博API,通过操作网页自动填表登录微博账号后,读取网页文档对象各属性,取回微博数据;通过文本预处理、中文分词、文本分类等,对微博数据进行语义分析,再用外挂式操作微博客户端,实现回复或发布。工作流程如图1所示:

图1 程序工作流程

2 关键方法与技术
2.1 取新浪微博数据

新浪微博登录后、完全展示所有内容前,历经多次JavaScript页面跳转,以UTF-8编码,具有多个Frame网页元素。鉴于此,本文先获取网页文档对象,再对该对象进行操作,以获取微博“@我”、“评论”及指定“敏感词”、“热词”等内容。算法描述如下:

输入:打开新浪微博的IE内核浏览器句柄。

输出:新浪微博数据。

①使用IE内核浏览器打开新浪微博并登录;

②枚举浏览器顶级窗口子句柄,筛选出类名为Internet Explorer_Server(IES)的子句柄;

③操作IES句柄,取网页文档对象。易语言核心代码如下:

消息值 = RegisterWindowMessageA (“WM_HTML_GETOBJECT”)

SendMessageTimeout (浏览器窗口顶级句柄, 消息值, 0, 0, 2, 1000, 资源编号)

结果 = ObjectFromLresult (资源编号, { 32, 197, 111, 98, 30, 164, 207, 17, 167, 49, 0, 160, 201, 8, 38, 55 }, 0, 参考变量_文档对象);

④判断各FRAME元素跳转网址是否均已就绪;

⑤读网页文档对象的对象型属性,取回网页文本。易语言核心代码为:网页文档对象.读对象型属性 (“documentElement”, ).读文本属性 (“innerText”, );

⑥使用正则表达式获取如“@我”、“评论”、含指定“敏感词”、“热词”等的微博内容。

2.2 中文分词

对取回的微博数据,首先要分析语句含义,与西文可方便地利用空格等作为分词依据相比,中文分词相对复杂,目前多使用“机械性分词”、“基于理解分词”以及“基于统计分词”三种方法。本文在考察“庖丁解牛分词”、“LingPipe”、“JE分词”、“LibMMSeg”、“IKAnalyzer”等基础上,采用中国科学院计算技术研究所研发的ICTCLAS汉语分词系统,其分词速度为500KB/s左右,分词精度98.45%[ 14]。鉴于新浪微博最长仅支持140字,本文通过操作ICTCLAS演示版网页[ 15]进行分词。算法描述如下:

输入:待分词文本。

输出:分词后文本。

①将以GB2312-80编码的文本转为以UTF-8编码;
②使用InternetOpenA、InternetConnectA、HttpOpenRequestA、HttpSendRequestA、InternetReadFile等API,对http://ictclas.org/ictclas_demo.html附带信息执行http访问;

③使用正则表达式取分词结果。

本文将中文分词功能封装于Dll中供主程序调用,运行效果如图2所示:

图2 封装中文分词功能的Dll界面

2.3 外挂操作新浪微博PC客户端

目前新浪微博桌面版最新版本为2012Beta,使用了迅雷研发的Bolt界面引擎[ 16]。Bolt属于DirectUI技术的一种,类似界面引擎最早由微软应用于MSN,国内使用此技术的金山卫士已全部开放源码[ 17]。DirectUI即将所有控件绘制在一个窗口中,控件的逻辑和绘制方式均需开发者自行编写,使用传统窗体探测工具如SPY++等找不到子句柄。本文通过模拟按键方式实现DirectUI窗口的置焦点、置文本、点击等操作,算法描述如下:

输入:DirectUI窗口。

输出:模拟按键法操作DirectUI窗口。

①激活DirectUI窗口句柄hwnd,使用GetWindowRect计算hwnd在屏幕中的坐标;

②使用SPY++等工具取指定控件在屏幕中的绝对位置;

③计算执行模拟按键的坐标(x,y);

④使用SendMessageA、keybd_event、PostMessageA等对相应控件进行模拟按键操作。

2.4 常规内容库、问答知识库的建立与访问

设计数据表字段时设置多个检索点,方便准确、全面、快速检索。“新书推介”子库数据源自山东师范大学V5.0书目检索系统;知识库搜集整理自笔者负责的QQ实时咨询、CALIS虚拟参考咨询常见问答及图书馆微博事务等。

2.5 发布长微博

使用快照命令将长篇文字转化为图片,再调用桌面版新浪微博发布[ 18]

3 应用效果评估

程序在Windows Server 2003(SP2)、SQL Server 2000(SP4)等实际环境中7×24小时运行,未发生崩溃。期间自动检索知识库658次,调用知识库中37条答案自动回复微博476次,经人工审核,回复精确率达87.39%;自动发布问候语14条,成功率为100%;自动发布新书推介7条,与本馆汇文图书馆操作系统数据匹配率为100%。

图3 自动回复设置、定时自动发布晚安问候界面

图4 外挂桌面版新浪微博自动发晚安微博

图3展示了主界面、自动回复界面及定时自动发布晚安问候界面,图4展示了自动发布晚安问候后在新浪微博网页版呈现的效果。

图5 使用桌面版新浪微博、调用知识库自动回复读者提问

图5展示了使用桌面版新浪微博、调用知识库自动回复读者提问。文字如超过140字,所有文本自动转为图片,并告知读者此为长微博,可看图了解全部内容。

4 结 语

本文设计并实现了基于新浪微博网页版及桌面版的自动发布、智能回复程序,辅助管理员及时处理微博信息,实践中取得了良好的应用效果。目前程序在智能化程度、知识库维护等方面尚显不足,有待进一步优化。

参考文献
[1] TweetLater. TweetLater-Schedule Tweets with the Best Free Twitter Scheduler[EB/OL]. [2013-05-09]. http://www.tweetlater.com. [本文引用:1]
[2] 深圳指掌时代网络科技有限公司. 皮皮时光机_皮皮精灵_皮皮微博应用[EB/OL]. [2013-05-09]. http://weibo.pp.cc/time/. (Shenzhen Zhizhang Shidai Net Co. PiPi Timer[EB/OL]. [2013-05-09]. http://weibo.pp.cc/time/. ) [本文引用:1]
[3] 深圳指掌时代网络科技有限公司. 皮皮定时器_皮皮精灵_皮皮微博应用[EB/OL]. [2013-05-09]. http://t.pp.cc/timer/. (Shenzhen Zhizhang Shidai Net Co. PiPi Timer[EB/OL]. [2013-05-09]. http://t.pp.cc/time/. ) [本文引用:1]
[4] 玛撒网. 微博定时发送器[EB/OL]. [2013-05-09]. http://app.masar.cn/s/timer/y.aspx. (Masa Net. Timer for Microblog[EB/OL]. [2013-05-09]. http://app.masar.cn/s/timer/y.aspx. ) [本文引用:1]
[5] 玛撒网. 微博定时发送器[EB/OL]. [2013-05-09]. http://app.masar.cn/t/timer/y.aspx. (Masa Net. Timer for Microblog[EB/OL]. [2013-05-09]. http://app.masar.cn/t/timer/y.aspx. ) [本文引用:1]
[6] 叶佳宁, 何霆. 地震信息微博自动发布系统的设计与应用[J]. 华南地震, 2012, 324): 82-87. (Ye Jianing, He Ting. Design and Application of Earthquake Message Microblog Automatic Release System[J]. South China Journal of Seismology, 2012, 324): 82-87. ) [本文引用:1] [CJCR: 0.4048]
[7] 张晨逸, 孙建伶, 丁轶群. 基于MB-LDA模型的微博主题挖掘[J]. 计算机研究与发展, 2011, 4810): 1795-1802. (Zhang Chenyi, Sun Jianling, Ding Yiqun. Topic Mining for Microblog Based on MB-LDA Model[J]. Journal of Computer Research and Development, 2011, 4810): 1795-1802. ) [本文引用:1]
[8] 邓一贵, 马雯雯. 基于隐含语义分析的微博话题发现方法[J/OL]. 计算机工程与应用, http://www.cnki.net/kcms/detail/11.2127.TP.20120716.1500.029.html. (Deng Yigui, Ma Wenwen. Micro-blog Topic Detection Method Based on Latent Semantic Analysis[J/OL]. Computer Engineering and Applications, http://www.cnki.net/kcms/detail/11.2127.TP.20120716.1500.029.html. ) [本文引用:1]
[9] 郑斐然, 苗夺谦, 张志飞, 等. 一种中文微博新闻话题检测的方法[J]. 计算机科学, 2012, 391): 138-141. (Zheng Feiran, Miao Duoqian, Zhang Zhifei, et al. News Topic Detection Approach on Chinese Microblog[J]. Computer Science, 2012, 391): 138-141. ) [本文引用:1] [CJCR: 0.61]
[10] 姚飞, 纪磊, 张成昱, 等. 实时虚拟参考咨询服务新尝试——清华大学图书馆智能聊天机器人[J]. 现代图书情报技术, 20114): 77-81. (Yao Fei, Ji Lei, Zhang Chengyu, et al. New Attempt on Real-time Virtual Reference Service——The Smart Chat Robot of Tsinghua University Library[J]. New Technology of Library and Information Service, 20114): 77-81. ) [本文引用:1] [CJCR: 1.073]
[11] 虎嗅. 新浪微博, 快来看Twitter的折腾史[EB/OL]. (2012-09-20). [2013-04-19]. http://www.ebusinessreview.cn/articledetail-166765.html. (Hu Xiu. Evolution History of Twitter[EB/OL]. (2012-09-20). [2013-04-19]. http://www.ebusinessreview.cn/articledetail-166765.html. ) [本文引用:1]
[12] 搜狐IT. Twitter封杀第三方客户端: 得罪近42%的用户[EB/OL]. (2011-03-16). [2013-04-29]. http://it.sohu.com/20110316/n279841260.shtml. (Sohu IT. Force-out of Twitter: 42% of the 3rd Applications Effected[EB/OL]. (2011-03-16). [2013-04-29]. http://it.sohu.com/20110316/n279841260.shtml. ) [本文引用:1]
[13] 新浪微博开放平台. Rate-limiting [EB/OL]. [2013-05-09]. http://open.weibo.com/wiki/index.php/Rate-limiting. (Sina Weibo Open Platform. Rate-limiting [EB/OL]. [2013-05-09]. http://open.weibo.com/wiki/index.php/Rate-limiting. ) [本文引用:1]
[14] 中国科学院计算技术研究所. ICTCLAS官方网站[EB/OL]. [2013-04-19]. http://www.ictclas.org/. (Institute of Computing Technology, Chinese Academy of Sciences. ICTCLAS Official Website[EB/OL]. [2013-04-19]. http://www.ictclas.org/. ) [本文引用:1]
[15] 中国科学院计算技术研究所. ICTCLAS_demo[EB/OL]. [2013-04-19]. http://ictclas.org/ictclas_demo.html. (Institute of Computing Technology, Chinese Academy of Sciences. ICTCLAS_demo[EB/OL]. [2013-04-19]. http://ictclas.org/ictclas_demo.html. ) [本文引用:1]
[16] 深圳市迅雷网络技术有限公司. 迅雷BOLT界面引擎[EB/OL]. (2012-12-11). [2013-04-19]. http://bolt.xunlei.com. (Thunder Software Co. Ltd. BOLT: UI Engine by Thunder Technology[EB/OL]. (2012-12-11). [2013-04-19]. http://bolt.xunlei.com. ) [本文引用:1]
[17] 金山卫士开源计划[EB/OL]. [2013-04-19]. http://code.ijinshan.com. (Open Source Project [EB/OL]. [2013-04-19]. http://code.ijinshan.com. ) [本文引用:1]
[18] 朱玉强. 基于摄像头图像的图书馆无人值守防盗程序的设计与实现[J]. 现代图书情报技术, 20116): 95-100. (Zhu Yuqiang. Design and Implementation of Unattended Library Security Program Based on Camera Images[J]. New Technology of Library and Information Service, 20116): 95-100. ) [本文引用:1] [CJCR: 1.073]