如何根据情绪标签指定情绪分数?

时间:2017-09-22 04:20:31

标签: r sentiment-analysis text-analysis

我正在研究一个R项目。我使用了一个普通的询问词典 - 一个有几个情感词典的词典。我从这里下载http://www.wjh.harvard.edu/~inquirer/inquirerbasic.xls

现在,我想创建一个新的列“得分”,如果值为Positive,则指定值为1

df <- read.csv("inquirerbasics.csv", header=T, stringsAsFactors=FALSE)
df3 <- subset(df, select=c(1:6))
head(df3)

 Entry Source Positiv Negativ Pstv Affil
1           A  H4Lvd                           
2     ABANDON  H4Lvd         Negativ           
3 ABANDONMENT     H4         Negativ           
4       ABATE  H4Lvd         Negativ           
5   ABATEMENT    Lvd                           
6    ABDICATE     H4         Negativ  

现在我要创建一个列分数,我可以为Negativ值分配1分,为Positiv值分配3分,为Pstv分配3分?我该如何创建呢?

2 个答案:

答案 0 :(得分:0)

一种选择是创建key/val数据集,并在使用coalesce

创建单个列后与原始数据集连接
library(dplyr)
keyval <- data.frame(key = c("Negativ", "Positiv", "Pstv"),
             score = c(1, 1, 3), stringsAsFactors=FALSE)
df3 %>%
    mutate(key = coalesce(Positiv, Negativ, Pstv)) %>% 
    left_join(., keyval) %>%
    select(-key)
# Joining, by = "key"
# A tibble: 11,788 x 7
#         Entry Source Positiv Negativ  Pstv Affil score
#         <chr>  <chr>   <chr>   <chr> <chr> <chr> <dbl>
# 1           A  H4Lvd    <NA>    <NA>  <NA>  <NA>    NA
# 2     ABANDON  H4Lvd    <NA> Negativ  <NA>  <NA>     1
# 3 ABANDONMENT     H4    <NA> Negativ  <NA>  <NA>     1
# 4       ABATE  H4Lvd    <NA> Negativ  <NA>  <NA>     1
# 5   ABATEMENT    Lvd    <NA>    <NA>  <NA>  <NA>    NA
# 6    ABDICATE     H4    <NA> Negativ  <NA>  <NA>     1
# 7       ABHOR     H4    <NA> Negativ  <NA>  <NA>     1
# 8       ABIDE     H4 Positiv    <NA>  <NA> Affil     1
# 9     ABILITY  H4Lvd Positiv    <NA>  <NA>  <NA>     1
#10      ABJECT     H4    <NA> Negativ  <NA>  <NA>     1
# ... with 11,778 more rows

注意:这里,我们仅根据OP的帖子中显示的示例使用前6列。如果我们需要更多列,请更改'keyval',为这些列添加'key'和'score',coalesce加入之前的所有列

答案 1 :(得分:0)

如果您正在使用词典,我建议使用我们的文本挖掘包quanteda,它具有处理词典的广泛功能。

它允许固定的,“glob”或正则表达式匹配字典值,这非常有用,因为许多文本字典方案使用globs作为通配符。

我将如何做到这一点。

dfm(txt) %>% dfm_lookup(dictionary = GI_dict, nomatch = "other")
## Document-feature matrix of: 1 document, 3 features (0% sparse).
## 1 x 3 sparse Matrix of class "dfmSparse"
## features
## docs    positive negative other
##   text1        2        1    16

虽然你可以一步完成,但我先创建了dfm,然后在第二步中将字典应用到它。

SELECT m.MessageID, m.MessageSubject, m.MessageContent, m.MessageIsRead, 
       m.MessageSendDate, m.MessageDeletedBy,
       (s.UserFirstName & s.UserLastName) AS Sender,
       (r.UserFirstName & r.UserLastName) AS Reciver
FROM (Messages as m INNER JOIN
      Users as s
      ON s.UserID = m.MessageSenderID
     ) INNER JOIN
     Users as r
     ON r.UserID = m.MessageReciverID;

请注意,您甚至不需要小写字典值,因为匹配的默认值不区分大小写。