2017-06-08 3 views
0

私は、tmパッケージを使用してRでテキストセンチメント分析を行っています。私はロイターからのニュース記事を盗んで、日付に応じて変数名を付けました。私はこのような一日あたりの複数の記事、示すために、B、Cなどを追加しました:複数のテキストを含む1日のセンチメントスコアを平均化するにはどうすればよいですか?

art170411aを
art170411b
art170411c
art170410a
...
...

私はその後、実行します記事ごとに感情スコアを与える標準的な正/負の用語分析。私の質問は、これらのスコアを平均して1日あたりの感情スコアを得る方法です。

私は3年以上にわたって私の2000年以上の記事を含むVCorpusを持っています。すべての記事に日付スタンプが付いています。

corp_list <- lapply(corp, FUN = paste, collapse=" ") 
corp_bag <- str_split(corp_list, pattern = "\\s+") 

私は2つの形式で最終的なスコアがあります:だから

score_naive_list <- lapply(corp_bag, function(x) { sum(!is.na(match(x, pos))) - sum(!is.na(match(x, neg)))}) 

score_naive <- unlist(lapply(corp_bag, function(x) { sum(!is.na(match(x, pos))) - sum(!is.na(match(x, neg)))})) 

を私はリストに私のコーパスを変換してから、このような言葉のバッグている正/負の条件とのマッチングのために私の質問:複数のセンチメントスコアを平均して1日スコアにするにはどうすればよいですか?

+0

'meta(corp、" datetimestamp ")'はタイムスタンプの配列(または単一の列data.frame)を与えますか?もしあなたが私に 'メタ(corp、" datetimestamp ")[1]'を与えることができますか? –

+0

これは出力です: $ art140501a.txt [1] "2017-06-07 14:30:29 GMT" – ymbrouwer

+0

もう1つの方法は、別の記事のテキストを1つにコンパイルしてから、コンパイルされたテキストからの単語。それは働くだろうか? – ymbrouwer

答えて

0

再現可能なデータで回答を再表示しました。データが整理されると、正常に動作するはずです。

library(tm) 
reut21578 <- system.file("texts", "crude", package = "tm") 
corp <- VCorpus(DirSource(reut21578),readerControl = list(reader = readReut21578XMLasPlain)) 

timestamps <- meta(reuters,"datetimestamp") 
days <- sapply(timestamps,strftime,format="%Y-%m-%d") 
pos <- c("good","excellent","positive","effective") 
neg <- c("bad","terrible","negative") 

corp_list <- lapply(corp, FUN = paste, collapse=" ") 
daily_bows <- aggregate(corp_list ~ days,data.frame(corp_list = unlist(corp_list),days = days),FUN=paste,collapse = " ") 
corp_bag <- str_split(daily_bows$corp_list, pattern = "\\s+") 

score_string <- function(x){ 
    sum(!is.na(match(x, pos))) - sum(!is.na(match(x, neg))) 
} 
daily_bows$scores <- sapply(corp_bag,score_string) 
print(daily_bows[,c("days","scores")]) 

# days scores 
# 1 1987-02-26  3 
# 2 1987-03-01  1 
# 3 1987-03-02  1 
+0

私は盲目的なコーディングがあまり良くありませんので、各操作時に健全性のチェックをしてください。 –

+0

2行目に私にこのエラーメッセージが表示されます: as.POSIXlt.default(x、tz = tz)のエラー: 'x'をクラス "POSIXlt"に変換する方法がわかりません – ymbrouwer

+0

今すぐ試してみました –

関連する問題