所以我试图创建一组给定文本的双字母组和三元组,这恰好是中文。乍一看,tau包看起来几乎是完美的应用程序。鉴于以下设置,我接近我想要的:
library(tau)
q <- c("天","平","天","平","天","平","天","平","天空","昊天","今天的天气很好")
textcnt(q,method="ngram",n=3L,decreasing=TRUE)
唯一的问题是输出是unicode字符串,而不是字符本身。所以我得到了类似的东西:
_ + < <U <U+ > U U+ 9 +5 5 U+5 >_ _< _<U +59 59 2 29 29> 592 7 92
22 19 19 19 19 19 19 19 17 14 14 14 11 11 11 9 9 8 8 8 8 8 8
929 9> >< ><U 9>_ E +5E 3 3> 3>_ 5E 5E7 6 73 73> A E7 E73 4 8 9>< A> +6
8 8 8 8 5 5 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 2
+7 4> 4>< 7A A>< C U+6 U+7 +4 +4E +5F +66 +6C +76 +7A 0 0A 0A> 1 14 14> 4E 4EC
2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
597 5F 5F8 60 60A 66 660 68 684 6C 6C1 76 768 7A7 7A> 7D 7D> 84 84> 88 88> 8> 8><
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
97 97D A7 A7A A>_ C1 C14 CA CA> D D> D>_ EC ECA F F8 F88 U+4
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
我试着编写一些可以执行类似功能的东西,但是我不能用代码来包围代码以外的任何东西(如果代码效率低或难看,我会在这里做到最好) 。这种方法的优点还在于我可以通过简单地检查DTM来获得单个“文档”中的单词计数,这是很好的。
data <- c(NA, NA, NA)
names(data) <- c("doc", "term", "freq")
terms <- NA
for(i in 1:length(q)){
temp <- data.frame(i,table(strsplit(q[i],"")))
names(temp) <- c("doc", "term", "freq")
data <- rbind(data, temp)
}
data <- data[-1,]
DTM <- xtabs(freq ~ doc + term, data)
colSums(DTM)
这实际上提供了一个很好的小输出:
天 平 空 昊 今 好 很 气 的
8 4 1 1 1 1 1 1 1
有没有人有任何建议使用tau或改变我自己的代码来实现我的汉字的双字母组合和三元组?
编辑:
根据评论中的要求,这是我的sessionInfo()
输出:
R version 3.0.0 (2013-04-03)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] tau_0.0-15
loaded via a namespace (and not attached):
[1] tools_3.0.0
答案 0 :(得分:1)
stringdist包会为您做到这一点:
> library(stringdist)
> q <- c("天","平","天","平","天","平","天","平","天空","昊天","今天的天气很好")
> v1 <- c("天","平","天","平","天","平","天","平","天空","昊天","今天的天气很好")
> t(qgrams(v1, q=1))
V1
天 8
平 4
空 1
昊 1
...
> v2 <- c("天气气","平","很好平","天空天空天空","昊天","今天的天天气很好")
> t(qgrams(v2, q=2))
V1
天气 2
气气 1
空天 2
天空 3
天的 1
天天 3
今天 1
...
我转置返回矩阵的原因是因为R在列宽方面错误地渲染矩阵 - 这恰好是unicode-ID字符串的长度(f.x。“<U+6C14><U+6C14>
”)。
如果您对有关stringdist包的更多详细信息感兴趣,我建议使用以下文字:http://www.joyofdata.de/blog/comparison-of-string-distance-algorithms;)