Строка по частоте каждого слова в URL в R
Я очень новичок в программировании и мне нужна помощь в программировании на R для моего университетского проекта. Я хочу создать таблицу с частотой каждого слова. Входной файл содержит около 70000 строк данных, таких как идентификаторы и 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
Приведенный ниже код удалил все специальные символы из URL-адресов и дает частоту слова, используемого во всем документе. Но я не хочу это для всего документа сразу. Я хочу вывод на строку.
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
Приведенная выше таблица означает, что идентификатор m7fdn имеет 4 раза частную ссылку в своих URL-адресах и 2 раза значение hilfe и так далее. Таблица выше приведена только для примера и не содержит точных слов. Эта таблица может содержать столько слов, сколько существует. Пожалуйста, помогите мне получить этот вывод. Как только я получу эту таблицу, я должен применить машинное обучение.
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
Сделайте ваши URL корпусом:
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