R:在 R 中使用亚洲/中文字符创建 n 元语法?

标签 r unicode

所以我试图为一组给定的文本创建二元组和三元组,而这些文本恰好是中文。乍一看,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/

相关文章:

r - 如何确定是否在特定列中找到某个值?

r - 在 R 中向饼图添加标签...辐射 "spokes"?

python - 将希腊语句子括在标签之间或查找并替换包含希腊语字符的句子部分

c++ - 将 char* 转换为 Unicode std::string

c - C 字符串文字中的 UTF-8 转义序列

Java 正则表达式 unicode 支持?

R:如何整合这些数据框?

r - summary.rq 输出取决于样本大小

python - 使用 MySQLdb 对非 utf 符号进行 utf8 编码

r - 在 stat_密度图中使用facet_zoom