所以我试图为一组给定的文本创建二元组和三元组,而这些文本恰好是中文。乍一看,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
最佳答案
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 ;)
关于R:在 R 中使用亚洲/中文字符创建 n 元语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16324722/