我正在用英语和法语看《 Oliver Twist》。我发现此站点(https://cran.r-project.org/web/packages/tidytext/vignettes/tidytext.html)提供了用于在每行文本中应用章节编号的代码。当我将其应用于英文文本时,它就可以正常工作:
library(gutenbergr)
library(dplyr)
library(tidytext)
library(stringr)
twistEN <- gutenberg_download(730)
twistEN <- twistEN[118:nrow(twistEN),]
chaptersEN <- twistEN %>%
mutate(line = row_number(), chapter = cumsum(str_detect(text, regex("^chapter [\\divxlc]", ignore_case = TRUE)))) %>%
ungroup()
当我再看章节EN时,我可以看到它适当地在每一行上应用了章节编号。我遇到麻烦的地方是法文。这是我的代码:
twistFR <- gutenberg_download(16023)
twistFR <- twistFR[123:nrow(twistFR),]
twistFR$text <- iconv(twistFR$text, "latin1", "UTF-8")
chaptersFR <- twistFR %>%
mutate(line = row_number(), chapter = cumsum(str_detect(text, regex("^chaptitre [\\divxlc]", ignore_case = TRUE)))) %>%
ungroup()
这里的问题是这些章没有分别命名为第一章和第二章,它们分别被命名为Chapitre Premier,Chapitre Deuxieme。我相信正则表达式可以通过查看章一词后面的数字来找到章号(如果我错了,请纠正我),因此当将该数字写成单词时,它不知道该怎么办。有关如何应用章节编号的任何想法?
答案 0 :(得分:0)
简短的答案:您写的是chaptitre而不是chapitre
您在代码中使用[\\divxlc]
部分是什么?
例如:^chapitre [\\divxlc]
^
表示在行的开头
chapitre
仅与单词chapitre(仅小写)匹配
空白字段与空格匹配
而[\\divxlc]
部分仅匹配“ \”,“ d”,“ i”,“ v”,“ x”,“ l”或“ c”
因此它可以匹配以下示例: chapitre d , chapitre i 或 chapitre \
如果您希望chapitre开头的c为大写或小写,可以使用以下代码:
^[cC]hapitre [\\divxlc]
答案 1 :(得分:0)
在这种情况下,匹配以大写字母“ CHAPITRE”开头的行就足够了。
chaptersFR <- twistFR %>%
mutate(line = row_number(), chapter = cumsum(str_detect(text, regex("^CHAPITRE")))) %>%
ungroup()
chaptersFR %>%
filter(grepl("^chapitre", text, ignore.case = TRUE)) %>%
head(5)
# A tibble: 5 x 4
gutenberg_id text line chapter
<int> <chr> <int> <int>
1 16023 CHAPITRE PREMIER. 1 1
2 16023 CHAPITRE II 124 2
3 16023 CHAPITRE III 604 3
4 16023 CHAPITRE IV. 1006 4
5 16023 CHAPITRE V. 1333 5
chaptersFR %>%
filter(grepl("^chapitre", text, ignore.case = TRUE)) %>%
tail(5)
# A tibble: 5 x 4
gutenberg_id text line chapter
<int> <chr> <int> <int>
1 16023 CHAPITRE L. 18443 50
2 16023 CHAPITRE LI. 18973 51
3 16023 chapitre, Olivier se trouvait, à trois heures de l'après-midi, 18979 51
4 16023 CHAPITRE LII 19580 52
5 16023 CHAPITRE LIII. 19989 53