r - 当我使用 replace_names 删除使用 R、textclean、stringr 的名称时出现额外空格?
问题描述
我正在研究 R 中的 stringr 和 textclean。我想删除一堆邮件中的名称。我发现了一些让我非常困惑的东西:
a <- 'a<b>Jone Smith<br></b>afef</div>'
如果我直接这样做:
> replace_names(a,replacement = '')
[1] "a<b>Jone Smith<br>< / b>afef< / div>"
您可以看到无法删除名称。我猜这是因为>
和<
紧挨着名称,因此无法识别名称。同时,</b>
和中出现了一些奇怪的空格</div>
。
所以这是我的处理方式:
a <- 'a<b>Jone Smith<br></b>afef</div>'
a <- str_replace_all(string = a,pattern = '>',replacement = '> ')
a <- str_replace_all(string = a,pattern = '<',replacement = ' <')
a
replace_names(a,replacement = '')
我想在 < 和 befind < 之前添加一个空格,以便将名称分开。但结果是:
> a
[1] "a <b> Jone Smith <br> </b> afef </div> "
> replace_names(a,replacement = '')
[1] "a <b> <br> < / b> afef < / div>"
可以看到a表示空格添加成功。</b>
但是在replace_names 之后,又一次又一次地添加了更多的空格</div>
。为什么会这样,我该如何解决?
解决方案
看起来像是textclean::replace_names
在调用textclean::replace_tokens
,而后者又调用textclean:::replace_string_elements_generic
。最后一个函数用 标记字符串textshape::split_token
,替换名称向量中的元素,然后将paste
所有内容重新组合在一起并删除多余的空格。某些标点符号(包括/
)被视为标记,因此当将字符串粘贴在一起时,paste(x, collapse = " ")
它们会被空格包围。有一个gsub("(\\s+)([.!?,;:])", "\\2", out, perl = TRUE)
从标点字符中删除空格的最终调用,但/
不受影响。
您可以尝试在 GitHub 上提交问题,或发送带有修复程序的拉取请求,但我怀疑会发生任何事情,因为/
在普通语言中经常被空格包围(请参阅此SE 答案以供参考)。虽然,开发人员可能会对处理 HTML 标签的特殊情况持开放态度。
我认为根据具体情况处理它会更有意义。尝试删除标签或添加空格,删除名称,然后再次删除空格:
library(stringr)
library(textclean)
## Remove tags.
a %>% replace_html %>% replace_names
# [1] "a afef."
## Add whitespace, remove names, remove whitespace.
a %>%
str_replace_all("([<>])", " \\1 ") %>%
replace_names %>%
str_replace_all(" ?([<>/]) ?", "\\1")
# [1] "a<b> <br></b>afef</div>."
推荐阅读
- google-apps-script - 谷歌表格多次发布到网络
- javascript - Flask-SocketIO 简单的通信器在 Chrome 和 Firefox 上运行良好,但在 IE 上不行
- python - 如何在python中获取属性的源代码
- html - 即使指向的网站来自我自己的网站,我是否需要将 rel="noopener" 放到每个 target="blank" 中?
- python - 调用matplolib pyplot waitforbuttonpress()时获取键值
- entity-framework - 如何在一个 Razor 页面中访问 2 个 DBContext
- c# - 如何将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.List”?
- python-3.x - 在 Python 中仅导入 docx 的特定部分
- angular - Angular 7拖放交换元素
- java - 当任何新项目添加到回收站视图中时如何自动发布数据