2

最近Rを使ったテキストマイニングでバイグラムに困っています。目的は、ニュースで意味のあるキーワードを見つけることです。たとえば、「スマートカー」や「データマイニング」などです。

次のような文字列があるとします。

"IBM have a great success in the computer industry for the past decades..."

ストップワード ("have"、"a"、"in"、"the"、"for") を削除した後、

"IBM great success computer industry past decades..."

その結果、「成功したコンピューター」や「業界の過去」のようなバイグラムが発生します。

しかし、私が本当に必要としているのは、「コンピューター産業」が私が望むバイグラムの明確な例であるなど、2 つの単語の間にストップワードが存在しないことです。

私のコードの一部は以下の通りです:

corpus <- tm_map(corpus, removeWords, stopwords("english"))
corpus <- tm_map(corpus, stripWhitespace) 
corpus <- tm_map(corpus, stemDocument)
NgramTokenizer = function(x) {unlist(lapply(ngrams(words(x), 2), paste, collapse = " "), use.names = FALSE)}
dtm <- TermDocumentMatrix(corpus, control = list(tokenize = NgramTokenizer))

TFカウント時に「成功したコンピューター」などの言葉で結果を回避する方法はありますか?

4

1 に答える 1

3

注: 新しい quanteda 構文を反映するために 2017 年 10 月 12 日を編集しました。

quantedaでこれを行うことができます。これにより、形成された ngram からストップ ワードを削除できます。

txt <- "IBM have a great success in the computer industry for the past decades..."

library("quanteda")
myDfm <- tokens(txt) %>%
    tokens_remove("\\p{P}", valuetype = "regex", padding = TRUE) %>%
    tokens_remove(stopwords("english"), padding  = TRUE) %>%
    tokens_ngrams(n = 2) %>%
    dfm()

featnames(myDfm)
# [1] "great_success"     "computer_industry" "past_decades" 

機能:

  1. フォーム トークン。
  2. 正規表現を使用して句読点を削除しますが、句読点が削除された場所には空白が残ります。これにより、トークンが句読点で区切られているため、最初から隣接していなかったトークンを使用して ngram を形成しないことが保証されます。
  3. ストップワードを削除し、その場所にパッドも残します。
  4. バイグラムを形成します。
  5. ドキュメント機能マトリックスを構築します。

これらのバイグラムの数を取得するには、dfm を直接検査するか、次を使用できますtopfeatures()

myDfm
# Document-feature matrix of: 1 document, 3 features.
# 1 x 3 sparse Matrix of class "dfmSparse"
#        features
# docs    great_success computer_industry past_decades
#   text1             1                 1            1

topfeatures(myDfm)
#    great_success computer_industry      past_decades 
#                1                 1                 1 
于 2015-12-15T08:26:07.353 に答える