R中URL中每个单词的行频率

时间:2016-09-10 14:17:58

标签: r machine-learning web-scraping text-analysis

我对编程非常陌生,需要在我的大学项目的R编程中提供一些帮助。我想创建一个包含每个单词频率的表格。输入文件有大约70000行数据,例如ID用户访问的ID和webURL,用csv文件中的逗号分隔:例如:

ID                 URLs 
m7fdn              privatkunden:handys, tablets, tarife:vorteile & services:ausland & roaming,privatkunden:hilfe:mehr hilfe:ger,privatkunden:hilfe:service-themen:internet  dsl & ltekonfigurieren
9ufdf              mein website:kontostand & rechnung:meinerechnung:6-monate-übersicht zu ihrer rufnummer,mein website:kontostand & rechnung:meinerechnung:kosten
09nd7              404 <https://www.website.de/ussa/login/login.ftel?errorcode=2001&name=%20&goto=https%3a%,mein website:login online user:show form:login.ftel / login),mobile,mobile:meinwebsite:kundendaten (mydata.html),mobile:meinwebsite:startseite (index.html),privatkunden:home,privatkunden:meinwebsite:login.ftel

下面的代码已删除了网址中的所有特殊字符,并提供了整个文档中使用的字词频率。但我不想立即将它用于整个文件。我想要每行输出一次。

text <- readLines("sample.csv")
docs <- Corpus(VectorSource(text))
inspect(docs)
toSpace <- content_transformer(function (x , pattern)gsub(pattern, " ", x))  
docs <- tm_map(docs, toSpace, "/")
docs <- tm_map(docs, toSpace, "@")
docs <- tm_map(docs, toSpace, ",")
docs <- tm_map(docs, toSpace, ";")
docs <- tm_map(docs, toSpace, "://")
docs <- tm_map(docs, toSpace, ":")
docs <- tm_map(docs, toSpace, "<")
docs <- tm_map(docs, toSpace, ">")
docs <- tm_map(docs, toSpace, "-")
docs <- tm_map(docs, toSpace, "_")
docs <- tm_map(docs, toSpace, "://")
docs <- tm_map(docs, toSpace, "&")
docs <- tm_map(docs, toSpace, ")")
docs <- tm_map(docs, toSpace, "%")


dtm <- TermDocumentMatrix(docs) 
m <- as.matrix(dtm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)

我得到的输出如下:

                       word freq  
mein                   mein 1451  
website             website 1038  
privatkunden   privatkunden  898  
meinwebsite     meinwebsite  479  
rechnung           rechnung  474  

我想要的输出应该是这样的:

ID               privatkunden  website    hilfe    rechnung  kosten      
m7fdn               4             7         2         7       0
9ufdf               3             1         9         3       5
09nd7               5             7         2         8       9

上表表示ID m7fdn的URL为4次privatkunden,hilfe为2次,依此类推。上表仅供参考,不计算确切的单词。只要有很多单词,这个表就可以了。请帮助我获得此输出。一旦我得到这个表,我就必须应用机器学习。

1 个答案:

答案 0 :(得分:1)

我认为这里有两点需要提及:

1)阅读您的数据:

text <- readLines("sample.csv")

为您提供一个向量,其中text[1]完整数据的第一行,text[2]完整第二行数据,等等。 VectorSource所需的是一列,只有URL列。使用read.table或者例如这样:

require(tidyr)
text <- readLines("1.txt")
text <- data.frame(a=text[-1]) %>% separate(a, c("ID", "URLs"), sep=6)

2)在tm中使用您的数据 通过以下方式将您的网址设为语料库:

docs <- Corpus(VectorSource(text$URLs))
names(docs) <- text$ID

现在你进行tm_map转换......最后你做了:

dtm <- DocumentTermMatrix(docs) 

然后你去了:

> as.matrix(dtm[1:3,1:5])
        Terms
Docs     (index.html (mydata.html 404 ã¼bersicht ausland
  m7fdn            0            0   0          0       1
  9ufdf            0            0   0          1       0
  09nd7            1            1   1          0       0