r - 使用 R 进行荷兰语情感分析

标签 r nlp

在 RStudio 中,我有一个包含 荷兰语 句子的列,我想通过情感分析添加 -1.0 和 +1.0 之间的极性分数。我已经尝试使用 jwfijffels 中的 pattern.nlp 包,但这对我不起作用。我在 https://github.com/bnosac/pattern.nlp 上找到了一条说明其中解释说 - 为了使 nlp 包正常工作,您应该下载特定版本的 Python 并执行一些额外的步骤。然而,这些步骤对我来说有点模糊。

有谁可以更详细地向我解释一下这个安装过程吗?实际上,“安装”下的整个部分对我来说有点神秘。具体应该下载什么? 在哪里运行代码pip install pattern?如何正确设置 PATH?如果有人能一步一步指导我,我将不胜感激。

或者:如果有人知道另一种对文本进行情感分析的方法,我当然愿意接受,例如将荷兰语句子翻译成英语,然后进行情感分析。或者这样的翻译会是一个坏主意吗?

这里有 6 个荷兰语句子。

text = c("Slechte bediening, van begin tot eind",
         "Het eten was heerlijk en de bediening was fantastisch",
         "Geweldige service en beleefde bediening",
         "Verschrikkelijk. Ik had een vlieg in mijn soep", 
         "Het was oké. De bediening kon wat beter, maar het eten was wel lekker. Leuk sfeertje wel!",
         "Ondanks dat het druk was toch op tijd ons eten gekregen. Complimenten aan de kok voor het op smaak brengen van mijn biefstuk")
identifier <- c("3", "4", "6", "7", "1", "5")
df <- data.frame(identifier, text)

最佳答案

情感分析(使用字典)基本上只是一个模式匹配任务。我认为当使用 tidytext 包和 reading the book about it 时,这一点会变得很清楚。 .

所以我不会在这里进行如此复杂的设置。相反,我会将他们正在使用的字典(来自 here )转换为 data.frame ,然后使用 tidytext 。不幸的是,字典以 XML 格式存储,我对此不太熟悉,所以代码看起来有点 hacky:

library(tidyverse)
library(xml2)
library(tidytext)

sentiment_nl <- read_xml(
  "https://raw.githubusercontent.com/clips/pattern/master/pattern/text/nl/nl-sentiment.xml"
) %>% 
  as_list() %>% 
  .[[1]] %>% 
  map_df(function(x) {
    tibble::enframe(attributes(x))
  }) %>% 
  mutate(id = cumsum(str_detect("form", name)))  %>% 
  unnest(value) %>% 
  pivot_wider(id_cols = id) %>% 
  mutate(form = tolower(form), # lowercase all words to ignore case during matching
         polarity = as.numeric(polarity),
         subjectivity = as.numeric(subjectivity),
         intensity = as.numeric(intensity),
         confidence = as.numeric(confidence))

但是输出对于目的来说是正确的:

head(sentiment_nl)
#> # A tibble: 6 x 11
#>      id form  cornetto_id cornetto_synset… wordnet_id pos   sense polarity
#>   <int> <chr> <chr>       <chr>            <chr>      <chr> <chr>    <dbl>
#> 1     1 amst… r_a-16677   ""               ""         JJ    van …      0  
#> 2     2 ange… r_a-8929    ""               ""         JJ    Enge…      0.1
#> 3     3 arab… r_a-16693   ""               ""         JJ    van …      0  
#> 4     4 arde… r_a-17252   ""               ""         JJ    van …      0  
#> 5     5 arnh… r_a-16698   ""               ""         JJ    van …      0  
#> 6     6 asse… r_a-16700   ""               ""         JJ    van …      0  
#> # … with 3 more variables: subjectivity <dbl>, intensity <dbl>,
#> #   confidence <dbl>

现在我们可以使用 tidytext 和更广泛的 tidyverse 中的函数来查找字典中的单词并将分数附加到每个单词。 summarise() 用于为每个文本获取一个值(这也是您需要 text_id 的原因)。

df <- data.frame(text = c("Het eten was heerlijk en de bediening was fantastisch", 
                          "Verschrikkelijk. Ik had een vlieg in mijn soep", 
                          "Het was oké. De bediening kon wat beter, maar het eten was wel lekker. Leuk sfeertje wel!",
                          "Ondanks dat het druk was toch op tijd ons eten gekregen. Complimenten aan de kok voor het op smaak brengen van mijn biefstuk"))

df %>% 
  mutate(text_id = row_number()) %>% 
  unnest_tokens(output = word, input = text, drop = FALSE) %>% 
  inner_join(sentiment_nl, by = c("word" = "form")) %>%
  group_by(text_id) %>% 
  summarise(text = head(text, 1),
            polarity = mean(polarity),
            subjectivity = mean(subjectivity),
            .groups = "drop")
#> # A tibble: 4 x 4
#>   text_id text                                             polarity subjectivity
#>     <int> <chr>                                               <dbl>        <dbl>
#> 1       1 Het eten was heerlijk en de bediening was fanta…    0.56         0.72 
#> 2       2 Verschrikkelijk. Ik had een vlieg in mijn soep     -0.5          0.9  
#> 3       3 Het was oké. De bediening kon wat beter, maar h…    0.6          0.98 
#> 4       4 Ondanks dat het druk was toch op tijd ons eten …   -0.233        0.767

正如我所说,有关此(和 NLP)的更多信息在 tidytextmining.com 上进行了解释。 ,所以如果您现在看起来很复杂,请不要担心。

关于r - 使用 R 进行荷兰语情感分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64119521/

相关文章:

r - 如何将原始数据包含在 R 包中

r - 将 rmarkdown 编织为 pdf 时如何更改代码输出背景颜色?

python - 处理分类中稀有因子水平的一般策略?

ubuntu - LEX 和 YACC : grammar implementation in NLP

python - spaCy,准备训练数据 : doc. char_span 返回 'None'

r - 如何使用三个不同数据帧的变量执行 PCA 并对它们进行颜色区分?

r - dev.hold、dev.flush 和调整窗口大小

r - R 中的 "Bag of characters"n 元语法

r - 如何将多个 pdf 文件转换为一个语料库以在 R 中进行文本分析?

machine-learning - 如何将依赖路径编码为分类特征?