参考说明
以下内容为本人在查阅与原论文相关的文献同时加上自我理解后编写的流程及备注:
首先原论文中所描述算法的数据来源和格式一直是令我困惑的一件事,我曾一度以为是利用爬虫对网页进行检索,找到书名作者对,但又并不是单个网站,如果利用某度等搜索引擎进行检索又是不可行的,因为搜索引擎的检索结果是对输入内容进行处理过后的检索结果,而非直接按照用户提供的搜索内容进行搜索,因此找到集成信息源就成为了第一个问题。
原文的介绍中提到:
There has been considerable work on integrating a number of information sources using specially coded wrappers or lters [Tsi,MOS97].In this paper, we address the problem of extracting a relation from the thousands of sources that may hold pieces of the relation on the World Wide Web. |
即文章所描述的算法是在集成信息源中进行搜索,而如果利用搜索引擎来代替集成信息源的话是不可行的。
在原文的实验部分描述:“使用了共计147G,两千四百万个网页的存储库,数据是Stanford WebBase的一部分”。由此得知其实是要从已有的一系列网页中抽取数据,且网页的格式应该是纯文本,即标签内文本不含标签。该算法的本质其实应该是文本抽取问题,形成正则表达式对字符串进行匹配并抽取结果。
其次要搞清楚:种子、模式、事件这三者的区别
种子是用来在所有URL的文档中进行搜索的,搜索到的结果记录成事件,也就是:
(前缀、作者、中缀、书名、后缀、顺序、URL)
这里都是具体的,譬如
(”著名的作者“,“东野圭吾”,“写了”,“白夜行”,“这本书,轰动一时”,“true”,“www.books.com/TopRated”)和
(“红极一时的作者”,“太宰治”,“写了”,“人间失格”,“这本书,畅销市场,“true”,“www.books.com/Sellers”)
然后根据这些查找到的事件,形成模式:
(前缀、中缀、后缀、顺序、URL前缀)
形成的模式应该尽可能多的去匹配事件,比如形成模式:
(的作者 .*? 写了 .*? 这本书)
上述模式中,(前缀=“的作者”,中缀=“写了”,后缀=”这本书“,顺序=true,URL前缀=”www.books.com“)
然后根据该模式去寻找,具体怎么找原文中没有提到,既然模式中包含URL前缀,应该是在能匹配该URL前缀的网页地址下利用正则表达式匹配网页的文本内容,然后将找到的事件再次记录,事件中的元组对提取成新的种子(这里的种子应该是在所有存储库找),然后利用新种子找到新事件,利用新事件形成行模式,这样成为循环,如果找到了足够多的种子,也就是元组对,则退出。
该程序的输出即是一系列的(作者,书名)的元组对,和一系列的模式集,模式集用来从添加到数据库中的新文档中抽取关系,这个程序的输入应该是从数据库的输入,而非直接利用爬虫去爬搜索引擎或者网站,同时数据库保存的模式字段可能为(URL,该URL下的文档内容),不过数据库的内容还是离不开爬虫。
外网对原文的参考文献叙述到:
All documents and seed instances reside on Hadoop’s HDFS Hadoop’s MapReduce framework is used to process instances and patterns over documents local to each map and reduce worker machines on HDFS New instances and patterns generated in each iteration are stored on HDFS |
看到这里,我也是满脸雾水。查找资料后:HDFS,它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
HDFS的设计适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据分析,并不适合用来做网盘应用。
不过最后参考文献描述,它是一个分布式信息提取系统,逻辑上与DIPRE相同,也就是不用HDFS,也可以用其他类似的信息来源代替。
至此,在刚阅读完后我产生的两个问题得到了解决:
问题一:数据来源,文章提到需要一个庞大的网络文档数据库,在以前网页基本是静态的页面,而现在基本是动态的页面,在哪里搜索种子呢?
问题二:形成模式后,拥有URL前缀和文档出现的模式,但是并没有URL列表集来和URL前缀进行匹配,因为URL后缀基本是动态生成的,那么该如何使用模式呢?
后续工作便是编程实现该算法了,由于Stanford WebBase数据量太大且在外网,在上面进行搜索总是报错(先附上链接http://diglib.stanford.edu:8091/),又对参考文献中的HDFS不太熟悉,所以准备先用mysql数据库手动插入一些外网链接和一些网页内容,利用python连接数据库获取数据把算法实现后,再想办法利用爬虫爬一些真实的数据到数据库中。
PS:
1、获取百度搜索结果的真实url:https://blog.csdn.net/u014487025/article/details/87939603
2、有个VPN能翻墙Google是极其重要的,国内几乎找不到对DIPRE算法的描述