updated links and metadata
[redirect-tools] / redirect_tools.R
1 # EDIT ME: Configuration options are in the stanza below
2 #######################################################################
3 redirect.data.dir <- "output/redir"
4 spells.data.dir <- "output/spells"
5 output.data.dir <- "output"
6
7 # functions and code used elsewhere
8 #######################################################################
9 Sys.setenv(TZ = "UTC")
10
11 library(data.table)
12
13 # options(cores = 20)
14 # options(mc.cores = 20)
15 # Sys.setenv(GOTO_NUM_THREADS=05)
16
17 generate.spells <- function (page, d) {
18
19     x <- d[page,mult="all"]
20     x <- as.data.frame(x)
21     x <- x[sort.list(x$timestamp),]
22
23     # transform the target because there are some differences that don't matter
24     x$target <- gsub('_', ' ', x$target)
25     x$target <- gsub("(^[[:alpha:]])", "\\U\\1", x$target, perl=TRUE)
26     x$target <- gsub('\\#.*$', '', x$target)
27
28     if (dim(x)[1] > 1) {
29         x$redirect.prev <- c(FALSE, x$redirect[1:(length(x$redirect)-1)])
30         x$target.prev <- c(NA, x$target[1:(length(x$redirect)-1)])
31     } else {
32         x$redirect.prev <- FALSE
33         x$target.prev <- NA
34     }
35     
36     # get a list of transitions
37     x <- x[x$redirect != x$redirect.prev |
38            ((!is.na(x$target) & !is.na(x$target.prev)) &
39             x$target != x$target.prev),]
40
41    # if there is only one transition it stays that way
42     if (dim(x)[1] > 1) {
43         x$end <- c(x$timestamp[2:dim(x)[1]], NA)
44     } else {
45         x$end <- NA
46     }
47
48     x <- x[x$redirect == TRUE,]
49
50     # relabel the columsn
51     x <- x[,c("page.id", "timestamp", "end", "page.title", "target")]
52     colnames(x) <- c("page.id", "start", "end", "page.title", "target")
53     
54     return(x)
55 }
56
57 filename.to.spells <- function (filename) {
58     con <- pipe(paste("bzcat", filename))
59
60     d <- read.delim(con, stringsAsFactors=FALSE, header=FALSE, skip=1,
61                     encoding="UTF-8", quote="")
62
63     colnames(d) <- c("page.id", "revision.id", "page.title", "timestamp",
64                      "deleted", "redirect", "target")
65
66     d$timestamp <- as.POSIXct(d$timestamp, tz="UTC", origin="1970-01-01 00:00:00")
67     
68     d <- d[!d$deleted,]
69
70     redirected.pages <- unique(d$page.title[d$redirect])
71
72     # convert to data.table
73     d <- as.data.table(d)
74     setkey(d, "page.title")
75
76     redirect.spells <- rbindlist(lapply(redirected.pages, generate.spells, d))
77
78     return(redirect.spells)
79 }

Benjamin Mako Hill || Want to submit a patch?