2016-04-12 25 views
5

Đang sử dụng qdap gói để xác định tình cảm của mỗi nhận xét đánh giá về một ứng dụng cụ thể. Tôi đọc nhận xét đánh giá từ tệp CSV và chuyển nó tới chức năng phân cực của qdap. Tất cả mọi thứ hoạt động tốt và tôi nhận được cực cho tất cả các bình luận xem xét nhưng vấn đề là phải mất 7-8 giây để tính toán phân cực tất cả các câu (tổng số câu có trong tệp CSV là 779). Tôi dán mã của tôi dưới đây.Phân tích tình cảm các nhận xét đánh giá sử dụng qdap là chậm

temp_csv <- filePath() 
    attach(temp_csv) 
    text_data <- temp_csv[,c('Content')] 
    print(Sys.time()) 
    polterms <- list(neg=c('wtf')) 
    POLKEY <- sentiment_frame(positives=c(positive.words),negatives=c(polterms[[1]],negative.words))  
    polarity <- polarity(sentences, polarity.frame = POLKEY) 
    print(Sys.time()) 

Thời gian thực hiện như sau:

[1] "2016/04/12 16:43:01 IST"

[1] "2016/04/12 16:43: 09 IST "

Ai đó có thể cho tôi biết nếu tôi đang làm điều gì sai? Làm cách nào để cải thiện hiệu suất?

Trả lời

9

Tôi là tác giả của qdap. Hàm polarity được thiết kế cho nhiều tập dữ liệu nhỏ hơn. Khi vai trò của tôi thay đổi, tôi bắt đầu làm việc với các tập dữ liệu lớn hơn. Tôi cần nhanh chóng và chính xác (hai điều này là đối lập với nhau) và kể từ đó đã phát triển một gói nghỉ ngơi sentimentr. Thuật toán được tối ưu hóa để nhanh hơn và chính xác hơn so với phân cực qdap.

Vì hiện tại bạn có 5 từ điển dựa trên (hoặc được đào tạo từ alorithm) được tiếp cận để phát hiện tình cảm. Mỗi người có nhược điểm (-) và điểm cộng (+) và hữu ích trong một số trường hợp nhất định.

  1. qdap + trên CRAN; -slow
  2. syuzhet + trên CRAN; + nhanh; + âm mưu lớn; không chính xác về sử dụng phi văn học
  3. sentimentr + nhanh; + độ chính xác cao hơn; -GitHub chỉ
  4. stansent (stanford port) + chính xác nhất; -slower
  5. tm.plugin.sentiment -archived on CRAN; -Tôi không thể làm cho nó hoạt động dễ dàng

Tôi hiển thị kiểm tra thời gian trên dữ liệu mẫu cho 4 lựa chọn đầu tiên ở trên trong mã bên dưới.

Cài đặt gói và làm cho chức năng thời gian

tôi sử dụng pacman vì nó cho phép người đọc chỉ cần chạy mã; mặc dù bạn có thể thay thế bằng các cuộc gọi install.packages & library.

if (!require("pacman")) install.packages("pacman") 
pacman::p_load(qdap, syuzhet, dplyr) 
pacman::p_load_current_gh(c("trinker/stansent", "trinker/sentimentr")) 

pres_debates2012 #nrow = 2912 

tic <- function (pos = 1, envir = as.environment(pos)){ 
    assign(".tic", Sys.time(), pos = pos, envir = envir) 
    Sys.time() 
} 

toc <- function (pos = 1, envir = as.environment(pos)) { 
    difftime(Sys.time(), get(".tic", , pos = pos, envir = envir)) 
} 

id <- 1:2912 

Thời gian

## qdap 
tic() 
qdap_sent <- pres_debates2012 %>% 
    with(qdap::polarity(dialogue, id)) 
toc() # Time difference of 18.14443 secs 


## sentimentr 
tic() 
sentimentr_sent <- pres_debates2012 %>% 
    with(sentiment(dialogue, id)) 
toc() # Time difference of 1.705685 secs 


## syuzhet 
tic() 
syuzhet_sent <- pres_debates2012 %>% 
    with(get_sentiment(dialogue, method="bing")) 
toc() # Time difference of 1.183647 secs 


## stanford 
tic() 
stanford_sent <- pres_debates2012 %>% 
    with(sentiment_stanford(dialogue)) 
toc() # Time difference of 6.724482 mins 

Để biết thêm về timings và chính xác thấy sentimentr README.md tôi và xin sao repo nếu nó hữu ích.Các viz dưới đây chụp một trong các bài kiểm tra từ README:

enter image description here

+0

Tôi đồng ý với Tyler, tôi đã có kết quả tốt với syuzhet trên bộ rất lớn của đoạn/tổng khối văn bản có kích thước. – Awhstin

+0

Cảm ơn @Tyler Rinker vì đã phân tích chi tiết các gói tình cảm khác nhau. Vừa mới kiểm tra gói tình cảm do bạn tạo. Đây chính xác là những gì tôi cần. Nhưng tôi cần danh sách các từ tích cực và các từ tiêu cực từ mỗi câu. Tôi đã nhận được điều này trong khi sử dụng qdap, nơi tình cảm chỉ trả về số từ. Có thể nhận được chúng trong khi sử dụng tình cảm? – VenuSathya20

+0

@ VenuSathya20 không có ý nghĩa gì với tôi nữa. Tôi có thể hỏi bạn muốn làm gì với họ không? –

Các vấn đề liên quan