机器学习和生物信息学实验室联盟

标题: 关于提取url的心得 [打印本页]

作者: 花思谢    时间: 2011-7-3 15:58
标题: 关于提取url的心得
       应林老师要求,谈谈这几天提取URL的心得体会。主要是正则表达式的使用。接到老师的任务后,我先上网查了相关文章,仿照网上的代码写了程序。不过提取的结果不理想。与老师探讨后,她给了我一些建议及一篇介绍正则式的文章。当晚浏览完那篇文章后,自觉任务不难,只要上网查下url的基本元素就能完事。不过第二天在查url时,却尽是一些关于url 组成的文章。无奈只好自己观察,写了个正则式。虽然提取结果较上次有所改进不过还是遇到一些问题:
     首先\w匹配字母数字下划线和汉字,在做实验的过程中发现用/w时一些自成单词也会被匹配,如“http://shindanmaker.com/79885安い女だなw”。所以如果所提取的URL中含自成单词,可用[a-zA-Z0-9_]代替\w。

     其次在提取的后期发现有些url中后面会跟着“.”如“http://bit.ly/cYHi...”一开始想到在正则式的最后加[^.],不过提取后发现“.”是去掉了,其他的字符却出现了。重新看了正则表达式的文章后,才明白虽然[^.]的意思是最后不能是“.”但也意味着其可以是除“.”外的任意字符,甚至包括空格。所以一些本来正确的url在正则式加了[^.]后反倒错了,如“ http://bit.ly/bxRm37(09:00)”。 本来(09:00)与前面的url隔着个空格是不会出现的,而现在空格也是合法的所以(09:00)就出现在所提取的url中。然后我试着用(?!\.)表达式来去除“.”结果同样遇到问题。因为(?!\.)的意思是匹配后面跟的不是“.”的位置。所以用(?!\.)的话虽然可以去掉“.”但其前面的一个字符也会被去掉。这个方案失败后我想了很久,也没能想出解决方案。只好向老师求救,老师给了我一个完整的正则表达式和一些建议。第二天在看老师的正则式时,突然想到既然不能规定url最后不能有什么,那就规定其最后只能有什么,于是我试着在老师的表达式最后加上 [a-zA-Z0-9\?/\!]+, 提取后结果比较满意。  虽然现在回想起来,觉得这方法并不是很巧妙,不过至少能解决那个困扰很久的问题,心里还是很高兴的。
    其实正如老师所言正则式虽入门容易,但要真正用好它却不容易。在此感谢林老师的悉心指导,让我学到了很多知识。
  
   以下是老师推荐的相关网站:
正则表达式的介绍: http://deerchao.net/tutorials/regex/regex.htm
url的命名规则:    http://en.wikipedia.org/wiki/Uniform_Resource_Locator
     还有其指导下的正则表达式
Pattern=@"(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~\!])*[a-zA-Z0-9\?/\!]+";
   上面的正则式只是一个参考,具体提取时,还应根据提取内容做修改。
作者: zouquan    时间: 2011-7-3 19:44
不错,再附上software就完美了~~~
作者: chenlin    时间: 2011-7-3 19:45
非常好.我们本科小同学谢思发独立的完成了一个利用正则表达式从文本中抽取URL的工作。这个工作虽然看似简单,但实际上和html中抽取url是不一样的,要考虑的情况更多。用户会修改url,如果掉以轻心采用网上常见的一些url模式去匹配就会出错。在这里感谢花丝谢的努力劳动!这也提示我们不管再小的工作,都要自己动手做一下,不要随便的轻信开源或者现成的代码。
作者: sunyuanshuai    时间: 2011-8-4 20:24
不错,不错!




欢迎光临 机器学习和生物信息学实验室联盟 (http://123.57.240.48/) Powered by Discuz! X3.2