4

だから私は、たまたま中国語のテキストセットのバイグラムとトリグラムを作成しようとしています。一見すると、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 

タウを使用するか、自分のコードを変更して漢字のバイグラムとトライグラムを実現するための提案はありますか?

編集:

コメントで要求されているように、ここに私の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
4

1 に答える 1

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 文字列 (fx " <U+6C14><U+6C14>") の長さです。

stringdist パッケージの詳細に興味がある場合は、次のテキストをお勧めします: http://www.joyofdata.de/blog/comparison-of-string-distance-algorithms ;)

于 2013-11-20T16:42:13.807 に答える