Rvest/Stringr : Remove invisible symbols splitting words?

标签 r regex rvest stringr

我正在使用 stringrregex 检测单词,并注意到我丢失了几个项目,因为在换行时单词会被分割。

引人注目的是,当我打印单元格的内容或在 RStudio 的数据查看器中查看它时,破坏单词的符号是不可见的。我只能看到在复制粘贴内容时单词被分割,例如将数据框的单元格放入控制台。单词之间有一个小点分隔,例如Schallenberg 表示为 Schallen[dot]berg(一个小点,垂直位于线条中间);

enter image description here

我认为分割单词的符号的不可见性与文本的起源有关。它们是通过 rvest 检索的。然而,更引人注目的是,当我在网站上查看包含该符号的单词时,它们并没有被分割。

我的问题:如何删除这些原本不可见的符号?它们不会被 stringr::str_squish 删除。 当我已经从网站中提取文本时,我是否需要考虑它们?非常感谢!

library(rvest, quietly = T, warn.conflicts = F)
library(tidyverse, quietly = T, warn.conflicts = F)

web_link <- "https://www.parlament.gv.at//PAKT/VHG/XXVII/NRSITZ/NRSITZ_00006/fnameorig_797359.html"

df_txt <- web_link %>% 
  read_html(., encoding = "latin1") %>% 
  html_nodes("body > div.WordSection37 > p:nth-child(2) > b:nth-child(2) > span") %>%
  html_text2() %>% 
  enframe(name = NULL,
          value="text_raw") %>% 
  mutate(text_raw=text_raw %>% str_squish %>% str_trim(., "both")) 

# There is a dot between Schallen - berg, but it's not visible
print(df_txt$text_raw)
#> [1] "Bundesminister für Europa, Integration und Äußeres Mag. Alexander Schallen­berg, LL.M."

str_detect(df_txt$text_raw, "Schallenberg") #false
#> [1] FALSE

reprex package于2021年4月8日创建(v1.0.0)

最佳答案

您在输入中得到的这个字符是 soft hyphen , \xAD。它属于其他格式 Unicode 控制字符类别。所以,你可以使用

gsub("\\p{Cf}+", "", df_txt$text_raw, perl=TRUE)

或者,使用stringr:

stringr::str_remove_all(df_txt$text_raw, "\\p{Cf}+")
stringr::str_replace_all(df_txt$text_raw, "\\p{Cf}+", "")

注意:这不会删除所有不可见的字符。您可能需要删除除常见换行符 \r\n 之外的所有控制字符。在这种情况下,您宁愿使用

gsub("[^\\P{C}\r\n]+", "", "a\n\r\\b", perl=TRUE)
stringr::str_remove_all(df_txt$text_raw, "[^\\P{C}\r\n]+")
stringr::str_replace_all(df_txt$text_raw, "[^\\P{C}\r\n]+", "")

其中 [^\\P{C}\r\n]+ 是一个否定字符类,它匹配除非控制字符、CR 和 LF 字符之外的任何字符(即,它匹配除 \r\n 字符之外的任何控制字符。

关于Rvest/Stringr : Remove invisible symbols splitting words?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67000182/

相关文章:

r - 在轴 2 和轴 3 上的 R 中的 NMDS 中使用 ordiellipse

r - 无法加载包 'rJava'

regex - 描述正则表达式的上下文无关语法?

Python正则表达式从C头文件中提取数据

R:Rvest - 得到了我不想要的隐藏文本

r - 如何以内存有效的方式将结果保存在列表中?

r - 哪个函数可以标识R变量的封闭环境的名称?

javascript - 通过javascript中的正则表达式在单词边界处匹配希伯来语字符?

html - 从 html 表中抓取数据

css - 无法抓取 html 表 rvest