2016-04-09 12 views
2

私は現時点でRのQuantedaパッケージを使用しています。内容語が互いに近くにある傾向を素早く見積もるために、ステム付き単語のnグラムを計算したいと思います。私が試してみると:quantgramを使ってngram内のすべての単語を抹消する方法は?

twitter.files <- textfile(files) 
twitter.docs <- corpus(twitter.files) 
twitter.semantic <- twitter.docs %>% 
    dfm(removeTwitter = TRUE, ignoredFeatures = stopwords("english"), 
     ngrams = 2, skip = 0:3, stem = TRUE) %>% 
    trim(minCount = 50, minDoc = 2) 

バイグラムには最終的な単語しかありません。しかし、私が最初に踏み外そうとすると:

twitter.files <- textfile(files) 
twitter.docs <- corpus(twitter.files) 
stemmed_no_stops <- twitter.docs %>% 
    toLower %>% 
    tokenize(removePunct = TRUE, removeTwitter = TRUE) %>% 
    removeFeatures(stopwords("english")) %>% 
    wordstem 

twitter.semantic <- stemmed_no_stops %>% 
    skipgrams(n = 2, skip = 0:2) %>% 
    dfm %>% 
    trim(minCount=25, minDoc = 2) 

そして、Quantedaは、ステムリストの使い方を知らない。私はエラーを取得します:

assignment of an object of class “NULL” is not valid for @‘ngrams’ 
in an object of class “dfmSparse”; is(value, "integer") is not TRUE 

は、私は茎の言葉にDFMを使用するために行うことができ、又は第一及び第二の幹ngramsを行うにはdfmを伝えるために中間ステップはありますか?

+0

私はあなただけに関数を適用し、wordstemは、直接、すなわち、最初のコーパスに変換していないテキストにskipgrams適用されるかもしれないことを考えますテキストのベクトル。 – lmkirvan

+0

私はreadLinesを使ってファイルを読み込み、トークン化し、removeFeaturesとwordstemを使ってファイルをロードしてから、結果をstemmedファイルとして保存するか、コーパスに入れて使用できるという点で、仕事を得ることができます。 私は結果をキャッシュすることができますが、 'stem'と' ngrams'をうまく組み合わせる方法を見つけたいと思っています。 –

答えて

2

私は最初のテキストであなたの例を再現しようとしました。パッケージデータから再現性の例を使用して、あなたのコードは私のために働いた:

twitter.docs <- corpus(data_corpus_inaugural[1:5]) 
stemmed_no_stops <- twitter.docs %>% 
    tokens(remove_punct = TRUE, remove_twitter = TRUE) %>% 
    tokens_tolower() %>% 
    tokens_remove(stopwords("english")) %>% 
    tokens_wordstem() 
lapply(stemmed_no_stops, head) 
## $`1789-Washington` 
## [1] "fellow-citizen" "senat"   "hous"   "repres"   "among"   
## [6] "vicissitud"  
## 
## $`1793-Washington` 
## [1] "fellow" "citizen" "call" "upon" "voic" "countri" 
## 
## $`1797-Adams` 
## [1] "first" "perceiv" "earli" "time" "middl" "cours" 
## 
## $`1801-Jefferson` 
## [1] "friend" "fellow" "citizen" "call"  "upon"  "undertak" 
## 
## $`1805-Jefferson` 
## [1] "proceed" "fellow" "citizen" "qualif" "constitut" "requir" 

twitter.semantic <- stemmed_no_stops %>% 
    tokens_skipgrams(n = 2, skip = 0:2) %>% 
    dfm %>% 
    dfm_trim(min_count = 5, min_doc = 2) 
twitter.semantic[1:5, 1:4] 
# Document-feature matrix of: 5 documents, 4 features. 
# 5 x 4 sparse Matrix of class "dfmSparse" 
#     features 
# docs    fellow_citizen let_u unit_state foreign_nation 
# 1789-Washington    2  0   2    0 
# 1793-Washington    1  0   0    0 
# 1797-Adams     0  0   3    5 
# 1801-Jefferson    5  5   0    0 
# 1805-Jefferson    8  2   1    1 
+1

さて、今は動作しています。ありがとう! –

関連する問題