使用 R 原生函数来做文本挖掘

最近有几位同学问到我如何利用tm包做文本挖掘,比较抱歉的是时间不太充足,不能完整更新文档。在这里只好给大家一些 tips,来利用R的原生函数来完成文本挖掘的核心步骤。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
setwd('C:/Users/Administrator/Downloads')
options(width = 150)
library(data.table)
x <- fread('comment.txt', sep = '\t', header = FALSE)
x$V3 <- iconv(x$V3, 'UTF-8', 'GBK') # 第三类为文本内容,字符集转化
x <- x[which(nchar(x$V3) > 3),]
n <- 10000 # 设置抽样数量,保证计算时长
x <- x[sample(1:nrow(x),n),]

library(jiebaR)
library(Matrix)

JR = worker(user = 'D:/source/RecModels/prototype/TagGen/userdict.txt')
seg_raw <- sapply(x$V3, segment, JR) # 执行分词

id <- unique(unlist(seg_raw)) # 生成Term
id <- id[nchar(id) >=2 & nchar(id) <= 5] # 将Term太长和太短的去掉,比如“强”
col_id <- as.vector(unlist(sapply(seg_raw, match, id)))
NA_index <- !is.na(col_id)
col_id <- col_id[NA_index] # 去除列的空值位置号
row_num <- sapply(seg_raw, length)
row_id <- rep(1:length(seg_raw), times = row_num)
row_id <- row_id[NA_index] # 去除行的空值位置号
## 生成DTMatirx
m <- sparseMatrix(i = row_id, j = col_id)

阅读全文

喜欢的商品怎么找到你

业务背景

出于用户体验、吸引用户角度的考量,经过多年发展,推荐系统其实已经在各类型网站或app上称为标准服务,不论是新闻、音乐、电商、电影等内容。当然,通过人工编辑也可以形成简单的推荐引擎,但这种方式的效率非常低,且比较生硬。如何通过用户的行为自动化地产生适合清单,是我们一直追求的目标。

阅读全文

词向量的唯一化

最近duoshuo社会化评论崩溃了,上千条评论就这么没了,各种手段恢复无果。只能怪我太懒,不爱经常做备份。果断将博客评论迅速转移到disqus,希望以后不会有事(后来还是有事了,所有评论都没了,额)。

阅读全文

Spark or R

前天下班浏览朋友圈,雪晴数据网转发了一篇译文,大数据工具比较:R 语言和 Spark 谁更胜一筹?,原作者测试了在限定为单机环境下,使用Kaggle提供的手写识别的数据在R和Spark平台运行不同算法的对比速度,结论有一下几个:

阅读全文

神经网络初步

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# input dataset
X <- as.matrix(iris[iris$Species != 'versicolor', 1:4])
# output dataset
y <- c(rep(0, 50), rep(1, 50))

# sigmoid function
nonlin <- function(x, deriv = FALSE) {
if(deriv == TRUE) x * (1 - x)
else 1/(1 + exp(-x))
}

set.seed(1)

# initialize weights randomly with mean 0
w <- rnorm(4, 0, 0.1)
tmp <- list() # 记录w的变化
for (i in 1:100){
l0 <- X
l1 <- nonlin(l0 %*% w)
l1_delta <- (y - l1) * nonlin(l1, deriv = TRUE)
# update weights
w <- w + 0.01 * t(l0) %*% l1_delta
tmp[[i]] <- w
}
l1
table(l1 > 0.5, y)

## Coef's solution path
ts.plot(t(do.call(cbind, tmp)))

阅读全文