我试图通过scala构建一个pagerank算法。
我在这里有一个数据集下载表单http://en.wikipedia.org/wiki/Wikipedia:Database_download
它是一个维基百科数据库。
我已经映射了标题,链接会显示在标题页中,如下所示
graph =
TitleA, LinkB LinkC LinkD
TitleB, linkC
TitleD, linkA
A,B,C表示它们具有相同的名称,但存在于标题区域或链接区域中。
现在,我需要删除标题中不存在的链接。
所以,输出应该是
corgraph =
TitleA, LinkB LinkD
TitleB, linkC
TitleD, linkA
从titleA中删除LinkC。
这是我的参考代码
val graph = lines.flatMap (line => {
val titlePattern = "<title>(.+?)</title>".r //define regex of title string out from <title> tag
val linkPattern = "\\[\\[(.+?)([\\|#]|\\]\\])".r //define regex of link string out from [[]] area
val title = titlePattern.findFirstMatchIn(line).get.group(1) // find title by defined regex
//find all link in pages and do map reduce
linkPattern.findAllIn(line).matchData.map(link => {
val corlink = link.group(1).replaceAll("<", "<").replaceAll(">", ">").replaceAll("&", "&").replaceAll(""", "\"").replaceAll("'", "\'")
val cortitle = title.replaceAll("<", "<").replaceAll(">", ">").replaceAll("&", "&").replaceAll(""", "\"").replaceAll("'", "\'")
(cortitle -> corlink)
})
}).map{ case(url, link) => if(graph.contains(link))(url -> link)}
错误消息
[error] PageRank.scala:28:recursive value graph needs type
[error] }).map{ case(url, link) =>
if(graph.contains(link))(url -> link)}(url -> link)}
任何人都可以帮忙吗?感谢。