Sentiment Analysis Text Analytics in Russian / Cyrillic languages

和自甴很熟 提交于 2019-12-24 18:33:44

问题


This is an incredible resource. I cant believe how generous contributors to the platform are. I would be grateful for any advice on dealing with text analytics / Sentiment Analysis using Russian / Cyrillic languages.

Syuzhet is my preferred tool - the opportunity to obtain sentiment across 8 emotions as well as negative and positive polarity is outstanding. However, i don't think it supports Cyrillic languages.

Is there any alternative?


回答1:


I was just trying to figure out the same thing: how to run some sentiment analysis on a Cyrillic corpus. While you're right that the excellent syuzhet package still doesn't support Cyrillic, I was able to jerry-rig a modified version of syuzhet that does! Here's the code I used. You can specify the nrc method and a language of Russian, or you can use the custom method and supply your own Russian lexicon, if you have one.

Hope this helps; your mileage may vary!

get_sentiment_rus <- function(char_v, method="custom", lexicon=NULL, path_to_tagger = NULL, cl = NULL, language = "english") {
  language <- tolower(language)
  russ.char.yes <- "[\u0401\u0410-\u044F\u0451]"
  russ.char.no <- "[^\u0401\u0410-\u044F\u0451]"

    if (is.na(pmatch(method, c("syuzhet", "afinn", "bing", "nrc", 
                             "stanford", "custom")))) 
    stop("Invalid Method")
  if (!is.character(char_v)) 
    stop("Data must be a character vector.")
  if (!is.null(cl) && !inherits(cl, "cluster")) 
    stop("Invalid Cluster")
  if (method == "syuzhet") {
    char_v <- gsub("-", "", char_v)
  }
  if (method == "afinn" || method == "bing" || method == "syuzhet") {
    word_l <- strsplit(tolower(char_v), "[^A-Za-z']+")
    if (is.null(cl)) {
      result <- unlist(lapply(word_l, get_sent_values, 
                              method))
    }
    else {
      result <- unlist(parallel::parLapply(cl = cl, word_l, 
                                           get_sent_values, method))
    }
  }
  else if (method == "nrc") {
#    word_l <- strsplit(tolower(char_v), "[^A-Za-z']+")
    word_l <- strsplit(tolower(char_v), paste0(russ.char.no, "+"), perl=T)
    lexicon <- dplyr::filter_(syuzhet:::nrc, ~lang == tolower(language), 
                              ~sentiment %in% c("positive", "negative"))
    lexicon[which(lexicon$sentiment == "negative"), "value"] <- -1
    result <- unlist(lapply(word_l, get_sent_values, method, 
                            lexicon))
  }
  else if (method == "custom") {
#    word_l <- strsplit(tolower(char_v), "[^A-Za-z']+")
    word_l <- strsplit(tolower(char_v), paste0(russ.char.no, "+"), perl=T)
    result <- unlist(lapply(word_l, get_sent_values, method, 
                            lexicon))
  }
  else if (method == "stanford") {
    if (is.null(path_to_tagger)) 
      stop("You must include a path to your installation of the coreNLP package.  See http://nlp.stanford.edu/software/corenlp.shtml")
    result <- get_stanford_sentiment(char_v, path_to_tagger)
  }
  return(result)
}


来源:https://stackoverflow.com/questions/47339479/sentiment-analysis-text-analytics-in-russian-cyrillic-languages

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!