5

私はニュース記事のコーパスをトピックモデル化するためにRのtmandパッケージを使用しています。ただし、トピックを台無しにしているlda「文字以外の」問題が発生しています。""これが私のワークフローです:

text <- Corpus(VectorSource(d$text))
newtext <- lapply(text, tolower)
sw <- c(stopwords("english"), "ahram", "online", "egypt", "egypts", "egyptian")
newtext <- lapply(newtext, function(x) removePunctuation(x))
newtext <- lapply(newtext, function(x) removeWords(x, sw))
newtext <- lapply(newtext, function(x) removeNumbers(x))
newtext <- lapply(newtext, function(x) stripWhitespace(x))
d$processed <- unlist(newtext)
corpus <- lexicalize(d$processed)
k <- 40
result <-lda.collapsed.gibbs.sampler(corpus$documents, k, corpus$vocab, 500, .02, .05,
compute.log.likelihood = TRUE, trace = 2L)

残念ながら、私がldaモデルをトレーニングすると、最も頻繁に出現する単語が ""であることを除いて、すべてが見栄えがします。以下に示すように語彙から削除し、上記のようにモデルを再推定することで、これを改善しようとしています。

newtext <- lapply(newtext, function(x) removeWords(x, ""))

しかし、それはまだそこにあります。

str_split(newtext[[1]], " ")

[[1]]
 [1] ""              "body"          "mohamed"       "hassan"       
 [5] "cook"          "found"         "turkish"       "search"       
 [9] "rescue"        "teams"         "rescued"       "hospital"     
[13] "rescue"        "teams"         "continued"     "search"       
[17] "missing"       "body"          "cook"          "crew"         
[21] "wereegyptians" "sudanese"      "syrians"       "hassan"       
[25] "cook"          "cargo"         "ship"          "sea"          
[29] "bright"        "crashed"       "thursday"      "port"         
[33] "antalya"       "southern"      "turkey"        "vessel"       
[37] "collided"      "rocks"         "port"          "thursday"     
[41] "night"         "result"        "heavy"         "winds"        
[45] "waves"         "crew"          ""             

これを削除する方法について何か提案はありますか?ストップワードのリストに追加""しても役に立ちません。

4

2 に答える 2

4

私はテキストをよく扱いますが、tmは扱いません。したがって、これは、あなたが持っている「」を取り除くための2つのアプローチです。余分な「」文字は、文の間にスペースバーが2つあるためである可能性があります。この状態は、テキストを単語の袋に変える前または後に治療できます。strsplitの前にすべての""x2を""x1に置き換えるか、後で行うことができます(strsplitの後でリストを解除する必要があります)。

x <- "I like to ride my bicycle.  Do you like to ride too?"

#TREAT BEFORE(OPTION):
a <- gsub(" +", " ", x)
strsplit(a,  " ")

#TREAT AFTER OPTION:
y <- unlist(strsplit(x, " "))
y[!y%in%""]

次のことも試してみてください。

newtext <- lapply(newtext, function(x) gsub(" +", " ", x))

繰り返しますが、私はtmを使用しないので、これは役に立たないかもしれませんが、この投稿には何のアクションも見られなかったので、可能性を共有したいと思いました。

于 2012-05-07T21:39:39.543 に答える
1

コーパスをすでに設定している場合は、ドキュメントの長さをフィルターとして使用し、メタ()にタグとして添付してから、新しいコーパスを作成してみてください。

dtm <- DocumentTermMatrix(corpus)

## terms per document
doc.length = rowSums(as.matrix(dtm))

## add length as description term
meta(corpus.clean.noTL,tag="Length") <- doc.length

## create new corpus
corpus.noEmptyDocs <- tm_filter(corpus, FUN = sFilter, "Length > 0")

## remove Length as meta tag
meta(corpus.clean.noTL,tag="Length") <- NULL

上記の方法を使用すると、わずか5行のコードで、 tmの既存の行列操作サポートを計算効率よくハイジャックできます。

于 2012-10-05T18:19:58.750 に答える