ANEW字典可以用于quanteda中的情绪分析吗?

时间:2017-05-23 10:32:10

标签: r nlp sentiment-analysis quanteda

我正试图找到一种方法来实现英语词汇的情感规范(荷兰语),用Quanteda进行纵向情感分析。我最终想要的是一种平均情绪"每年为了显示任何纵向趋势。

在数据集中,所有单词在7个李克特等级上由64个编码器对四个类别进行评分,这为每个单词提供了一个均值。我想做的是采取其中一个维度,并用它来分析情绪随时间的变化。我意识到Quanteda有一个实现LIWC字典的功能,但我更愿意使用开源ANEW数据。

基本上,我需要实施方面的帮助,因为我不熟悉编码和R

ANEW文件看起来像这样(在.csv中):

WORD / SCORE:癌症:1.01,马铃薯:3.56,爱情:6.56

1 个答案:

答案 0 :(得分:1)

尚未直接,但是...... ANEW与其他词典不同,因为它不使用键:值对格式,而是为每个术语指定一个数字分数。这意味着您不计算值与键的匹配,而是选择要素,然后使用加权计数对它们进行评分。

这可以通过以下方式在 quanteda 中完成:

  1. 将ANEW功能添加到角色向量中。

  2. 使用dfm(yourtext, select = ANEWfeatures)创建仅具有ANEW功能的dfm。

  3. 按每个ANEW值的效价将每个计数值多个,按列循环使用,以便每个要素计数乘以其ANEW值。

  4. 在加权矩阵上使用rowSums()来获取文档级别的效价分数。

  5. 或者,

    1. 提交issue,我们会将此功能添加到 quanteda
    2. 另请注意, tidytext 使用ANEW进行情感评分,如果您想将dfm转换为其对象并使用该方法(这基本上是我上面建议的版本)。

      更新

      事实证明我已将该功能构建到您需要的 quanteda 中,并且根本没有实现它!

      这会奏效。首先,加载ANEW字典。 (你必须自己提供ANEW文件。)

      # read in the ANEW data
      df_anew <- read.delim("ANEW2010All.txt", stringsAsFactors = FALSE)
      # construct a vector of weights with the term as the name
      vector_anew <- df_anew$ValMn
      names(vector_anew) <- df_anew$Word
      

      现在我们有一个命名的权重向量,我们可以使用dfm_weight()来应用它。下面,我首先通过相对频率对dfm进行归一化,以便文档聚合分数不依赖于标记中的文档长度。如果您不想这样,只需删除下面指示的行。

      library("quanteda")
      dfm_anew <- dfm(data_corpus_inaugural, select = df_anew$Word)
      
      # weight by the ANEW weights
      dfm_anew_weighted <- dfm_anew %>%
          dfm_weight(scheme = "prop") %>%   # remove if you don't want normalized scores
          dfm_weight(weights = vector_anew)
      ## Warning message:
      ## dfm_weight(): ignoring 1,427 unmatched weight features 
      
      tail(dfm_anew_weighted)[, c("life", "day", "time")]
      ## Document-feature matrix of: 6 documents, 3 features (5.56% sparse).
      ## 6 x 3 sparse Matrix of class "dfm"
      ##               features
      ## docs                 life        day       time
      ##   1997-Clinton 0.07393220 0.06772881 0.21600000
      ##   2001-Bush    0.10004587 0.06110092 0.09743119
      ##   2005-Bush    0.09380645 0.12890323 0.11990323
      ##   2009-Obama   0.06669725 0.10183486 0.09743119
      ##   2013-Obama   0.08047970 0          0.19594096
      ##   2017-Trump   0.06826291 0.12507042 0.04985915
      
      # total scores
      tail(rowSums(dfm_anew_weighted))
      ## 1997-Clinton    2001-Bush    2005-Bush   2009-Obama   2013-Obama   2017-Trump 
      ##     5.942169     6.071918     6.300318     5.827410     6.050216     6.223944