今天上午文本分析的各种弯路

昨晚看到有人因为章校长退休了,怕信箱不再,于是在爬数据,反正闲着没事干,于是我也爬,观察了一下 URL ,每个部门或者领导有一个这样的属于自己的 URL

http://www.szu.edu.cn/mailbox/list.asp?leader=%CA%A6%D4%BA%B0%EC%B9%AB%CA%D2&page=4

leader 字段后面是名字,编码是 gb2312 ,顺带一提,整个流程的编码都是 gb2312 。

我们注意到那个 URL 是带分页,分页是列表,点进去是 URL 类似这样的详情页

http://www.szu.edu.cn/mailbox/view.asp?id=85465

这个页面的 id 字段是全局,就是说不管是哪个部门哪个领导,都是掺合在一起顺序递增的,呵呵,这么看来背后就是一张表,不过数据量也不大,截止到爬的时候就 18 万多,那么爬虫的代码就有两个思路了,一个是从分页的源码把信件的 id 找出来,然后根据 id 去爬,另外一个就是暴力,遍历 id 一个个爬,就代码的复杂度来说,当然是前者复杂一些,但是也不会差别特别大,而且好处是针对性强,而暴力的方法的好处自然就是数据量大,数据完整了,反正机器爬嘛,就暴力吧。爬虫代码很简单,php 写的,爬一条入库一条,为了不给学校服务器造成无谓的压力,代码就不放了,如果想写又没什么头绪的话,可以 google 一下 curl 的用法,根据 URL 把 HTML 代码下载回来,真的简单。从昨晚两点多左右去睡觉开始爬,到早上九点多完成,回来的 18 万条数据里面有 7 万左右是报该信件不存在的,估计是不公开信,有效的数据 10 万多,整个表 300 多 M 。

然后自然就是从数据里找点有意思的东西了,想着统计一下回复率啊,回复集中时段啊,信件的平均长度,回复的平均长度之类的简单数据,然后还想找个分词器统计一下热词之类的,于是就开始悲催的走各种弯路。一开始想到数据量毕竟不小,如果用 php 来处理的话怕是时间有点久,于是就天真的想写存储过程来搞,google 一阵搜,找出来好久不写的存储过程语法规则,还有一些字符串常用函数,都是一些很基本的函数,就是找子串,分子串等,坑爹的是存储过程的解释器是没有语法提示的,如果你写过,他就告诉你,第几行第几行的出了错,但是又不说什么类型的错,于是排错就成了猜猜看的游戏,好吧,是自己的问题。另外一个问题就是存储过程是没有控制台之类的输出的,只能打到数据表里去调试,真是悲催啊。写了一段之后我就果断放弃了用存储过程过滤 HTML 标签获取正文的天真想法了。

于是转向 PHP ,想到没有用过正则来干大文本,于是又天真了一次,google 一阵搜,重新温习了一下正则,好不容易回忆得七七八八,开始动手写,自然是写的磕磕碰碰的,不过好歹是写出了一半多,标题,时间,正文,回复状态啥的都提取出来了,但是又发现回复是可以转发的,于是又悲催了,而且发现虽然写出来的正则大部分可以,但是放到小部分的测试用例上还是不行,而且正则这东西就不是给人写的,写一会就头昏脑胀了,于是又被迫放弃用正则来搞长文本的天真想法,把写到一半的正则拿出来立个碑铭吧

/[sS]*<td align="center" bgcolor="#F0F0F0" width="10%">[xa0-xff]{8}</td>s*<td width="90%">([xa0-xff]*)</td>s*</tr>s*<tr>s*<td align="center" bgcolor="#F0F0F0">[xa0-xff]{6}</td>s*<td>([xa0-xff]*)</td>s*</tr>s*<tr>s*<td align="center" bgcolor="#F0F0F0">[xa0-xff]{8}</td>s*<td>s*([-d]*)[sS]*<td align="center" bgcolor="#F0F0F0">[xa0-xff]{8}</td>s*<td height="120">([sSxa0-xff]*?)</td>[sS]*<td align="center" bgcolor="#F0F0F0">[xa0-xff]{8}</td>/

于是准备还是用回当年分析课表的老办法,就是把长文本一点点从头截取,先截取前面几百个字符,把标题找出来,然后前面这段就可以删掉,接着迭代的取一段分析一段的,估计还更加容易成,后面还要找分词器,目前做到的就这些,路长着呢

2 thoughts on “今天上午文本分析的各种弯路

  1. 您好,我是深圳大学的11届校友冯鹏,在查找以前章校长的信箱,就找到你了。
    在去年的时候,还可以访问章校长的邮箱的。地址是这个http://www.szu.edu.cn/mailbox/list.asp?leader=%D5%C2%D0%A3%B3%A4
    ,但是现在访问不了。我想找一个老章说过的内容,不知你那有他以前的信箱信件吗?谢谢您!

    • 电脑里找了一下,没有找到。。回校内用校内网应该可以重新打开吧。。

Leave a Reply

Your email address will not be published. Required fields are marked *