2016-11-20 3 views
2

文字列から文字のdfmを作成しようとしています。私は、dfmが選択できないときに、 "/" " - " "のような句読点のための機能を作成することができます。または '。文字のdfmを作成する

"/デD/F" のために
require(quanteda) 
dict = c('a','b','c','d','e','f','/',".",'-',"'") 
dict <- quanteda::dictionary(sapply(dict, list)) 

x<-c("cab","baa", "a/de-d/f","ad") 
x<-sapply(x, function(x) strsplit(x,"")[[1]]) 
x<-sapply(x, function(x) paste(x, collapse = " ")) 

mat <- dfm(x, dictionary = dict, valuetype = "regex") 
mat <- as.matrix(mat) 
mat 
  1. 、私は手紙をキャプチャする "/" " - " あまりに
  2. なぜ "を"。行数として機能する機能どうすれば個々の機能として保持できますか?
+0

「tokens < - tokenize(x、what = "character")」と似ています。 mat < - dfm(トークン、辞書= dict、valueetype = "固定") '?正規表現( "正規表現")では、 '.'は任意の文字を表します。 – lukeA

+0

ありがとうございます。これはまさに私が探していたものです。 – SuperSatya

答えて

0

問題は、あなたのvaluetypeが間違ったパターンマッチを使用しているということです(@lukeAはコメントで指摘しています)。 .が任意の文字を表す正規表現を使用しているため、ここでは合計(あなたが何行目を呼んでいるか)を取得しています。

最初にxを見てみましょう。これは空白文字でdfm()でトークン化され、各文字がトークンになります。

x 
#  cab    baa   a/de-d/f    ad 
# "c a b"   "b a a" "a/d e - d/f"    "a d" 

(2)まず、あなたは "正規表現" に一致して、次を得ているに答えるために:

dfm(x, dictionary = dict, valuetype = "regex", verbose = FALSE) 
## Document-feature matrix of: 4 documents, 10 features. 
## 4 x 10 sparse Matrix of class "dfmSparse" 
##   features 
## docs  a b c d e f/. - ' 
## cab  1 1 1 0 0 0 0 3 0 0 
## baa  2 1 0 0 0 0 0 3 0 0 
## a/de-d/f 1 0 0 2 1 1 0 5 0 0 
## ad  1 0 0 1 0 0 0 2 0 0 

近いのですが、(1)答えていません。これを解決するには、句読点を削除しないように、デフォルトのトークン化動作をdfm()で変更する必要があります。

dfm(x, dictionary = dict, valuetype = "fixed", removePunct = FALSE, verbose = FALSE) 
## Document-feature matrix of: 4 documents, 10 features. 
## 4 x 10 sparse Matrix of class "dfmSparse" 
##   features 
## docs  a b c d e f/. - ' 
## cab  1 1 1 0 0 0 0 0 0 0 
## baa  2 1 0 0 0 0 0 0 0 0 
## a/de-d/f 1 0 0 2 1 1 2 0 1 0 
## ad  1 0 0 1 0 0 0 0 0 0 

/-がカウントされています。 .'は、辞書キーであるため、すべてのドキュメントでカウントがゼロであるため、機能として存在し続けます。

+0

ありがとうございます。私はすでに 'valuetype =" fixed "引数を指定し、removPunctを指定しないで固定しました。とにかくそれはすべての句読点をつかまえていたので、それは問題ではないと思います。 – SuperSatya

関連する問題