大きなデータセット (100 万行以上) があり、各行は複数の文からなるテキストです。たとえば、次は 2 行のサンプルです。
mydat <- data.frame(text=c('I like apple. Me too','One two. Thank you'),stringsAsFactors = F)
私がやろうとしていたのは、各行のバイグラム用語を抽出することです (「.」は ngram 用語を区切ることができます)。単純に dfm 関数を使用する場合:
mydfm = dfm(mydat$text,toLower = T,removePunct = F,ngrams=2)
dtm = as.DocumentTermMatrix(mydfm)
txt_data = as.data.frame(as.matrix(dtm))
これらは私が得た用語です:
"i_like" "like_apple" "apple_." "._me" "me_too" "one_two" "two_." "._thank" "thank_you"
これらは私が期待するもので、基本的には「.」です。はスキップされ、用語を区切るために使用されます。
"i_like" "like_apple" "me_too" "one_two" "thank_you"
遅いループを書くことでこれも解決できると信じていますが、それが巨大なデータセットであることを考えると、これを解決するには quanteda の dfm() に似た効率的な方法を好むでしょう。任意の提案をいただければ幸いです!