gpt4 book ai didi

r - 如何使用 R 在法语中准确应用停用词

转载 作者:行者123 更新时间:2023-12-02 04:23:00 25 4
gpt4 key购买 nike

我正在尝试使用古腾堡图书馆拉一本书,然后删除法语停用词。通过这样做,我已经能够用英语准确地做到这一点:

twistEN <- gutenberg_download(730)
twistEN <- twistEN[118:nrow(twistEN),]
twistEN <- twistEN %>%
unnest_tokens(word, text)
data(stop_words)
twistEN <- twistEN %>%
anti_join(stop_words)
countsEN <- twistEN %>%
count(word, sort=TRUE)
top.en <- countsEN[1:20,]

我可以在这里看到 Oliver Twist 英文版的前 20 个单词(按频率)是这些:
word          n
<chr> <int>
1 oliver 746
2 replied 464
3 bumble 364
4 sikes 344
5 time 329
6 gentleman 309
7 jew 294
8 boy 291
9 fagin 291
10 dear 277
11 door 238
12 head 226
13 girl 223
14 night 218
15 sir 210
16 lady 209
17 hand 205
18 eyes 204
19 rose 201
20 cried 182

我试图用同一部小说的法语版来完成同样的事情:
twistFR <- gutenberg_download(16023)
twistFR <- twistFR[123:nrow(twistFR),]
twistFR <- twistFR %>%
unnest_tokens(word, text)
stop_french <- data.frame(word = stopwords::stopwords("fr"), stringsAsFactors = FALSE)
stop_french <- get_stopwords("fr","snowball")
as.data.frame(stop_french)
twistFR <- twistFR %>%
anti_join(stop_words, by = c('word')) %>%
anti_join(stop_french, by = c("word"))
countsFR <- twistFR %>%
count(word, sort=TRUE)
top.fr <- countsFR[1:20,]

我确实根据我在网上找到的信息更改了法语停用词的代码,它正在删除一些停用词。但这是我得到的 list :
word         n
<chr> <int>
1 dit 1375
2 r 1311
3 tait 1069
4 re 898
5 e 860
6 qu'il 810
7 plus 780
8 a 735
9 olivier 689
10 si 673
11 bien 656
12 tout 635
13 tre 544
14 d'un 533
15 comme 519
16 c'est 494
17 pr 481
18 pondit 472
19 juif 450
20 monsieur 424

这些单词中至少有一半应该被停用词列表捕获,而它们没有。我的代码有什么问题吗?我是整洁文本的新手,所以我相信有更好的方法来解决这个问题。

最佳答案

我用了几个不同的包来得到你想要的。我使用了 tidystopwords 中的停用词,因为它们基于通用依赖模型。但是您可以使用来自 snowball、stopwords 或 proustr 包的停用词。您甚至可能决定使用多个包中的停用词,具体取决于您的要求和您认为的停用词。所有停用词列表都略有不同。

我使用 udpipe 包将文本拆分为单独的标记。这需要比 unnest_tokens 更长的时间来自 tidytext (但我使用默认选项,其中包括 pos 标记和词形还原)。我发现 unnest_tokens不适用于非英语语言。

library(gutenbergr)
library(tidystopwords)
library(udpipe)
library(dplyr)

# get twist in French
twistFR <- gutenberg_download(16023)
# Convert all lines to utf8 (needed on my system)
twistFR$text <- iconv(twistFR$text, to = "UTF-8")


# get french stopwords based on ud language model
my_french_stopswords <- generate_stoplist(lang_name = "French")
my_french_stopswords <- data.frame(word = my_french_stopswords, stringsAsFactors = FALSE)

# download udpipe model for french language
ud_model <- udpipe_download_model(language = "french")
ud_model_fr <- udpipe_load_model(ud_model)

# set parallel.cores. Udpipe annotate can take a while as it does a lot more than just tokenizing.
ud_twistFR <- udpipe_annotate(ud_model_fr, twistFR$text[123:nrow(twistFR)], parallel.cores = 3)

# transform to data.frame
ud_twistFR_df <- data.frame(ud_twistFR, stringsAsFactors = FALSE)

# put tokens in lowercase, remove stopwords and punctuations
ud_twistFR_df <- ud_twistFR_df %>%
mutate(token = tolower(token)) %>%
anti_join(my_french_stopswords, by = c("token" = "word")) %>%
filter(upos != "PUNCT") # remove punctuations.

# count tokens
ud_countsFR <- ud_twistFR_df %>%
count(token, sort=TRUE)

ud_countsFR[1:20,]
# A tibble: 20 x 2
token n
<chr> <int>
1 pas 1558
2 dit 1366
3 m. 915
4 olivier 843
5 plus 775
6 bien 652
7 répondit 469
8 juif 435
9 monsieur 412
10 bumble 367
11 enfant 355
12 sikes 341
13 jeune 336
14 air 290
15 porte 281
16 tête 279
17 encore 278
18 homme 267
19 même 261
20 demanda 257

关于r - 如何使用 R 在法语中准确应用停用词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58036530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com