如何编写自定义的removePunctuation()函数以更好地处理Unicode字符?

2023-11-24

在 tm 文本挖掘 R 包的源代码中,在文件中变换R,有removePunctuation()函数,当前定义为:

function(x, preserve_intra_word_dashes = FALSE)
{
    if (!preserve_intra_word_dashes)
        gsub("[[:punct:]]+", "", x)
    else {
        # Assume there are no ASCII 1 characters.
        x <- gsub("(\\w)-(\\w)", "\\1\1\\2", x)
        x <- gsub("[[:punct:]]+", "", x)
        gsub("\1", "-", x, fixed = TRUE)
    }
}

我需要解析和挖掘科学会议的一些摘要(从他们的网站上以 UTF-8 格式获取)。摘要包含一些需要删除的 unicode 字符,特别是在单词边界处。有常见的 ASCII 标点字符,但也有一些 Unicode 破折号、Unicode 引号、数学符号...

文本中还有 URL,还有需要保留词内标点符号的标点符号。 tm内置的removePunctuation()功能太激进了。

所以我需要定制removePunctuation()功能根据我的要求进行删除。

我的自定义 Unicode 函数现在看起来像这样,但它没有按预期工作。我很少使用 R,因此在 R 中完成工作需要一些时间,即使对于最简单的任务也是如此。

我的功能:

corpus <- tm_map(corpus, rmPunc =  function(x){ 
# lookbehinds 
# need to be careful to specify fixed-width conditions 
# so that it can be used in lookbehind

x <- gsub('(.*?)(?<=^[[:punct:]’“”:±</>]{5})([[:alnum:]])'," \\2", x, perl=TRUE) ;
x <- gsub('(.*?)(?<=^[[:punct:]’“”:±</>]{4})([[:alnum:]])'," \\2", x, perl=TRUE) ;
x <- gsub('(.*?)(?<=^[[:punct:]’“”:±</>]{3})([[:alnum:]])'," \\2", x, perl=TRUE) ;
x <- gsub('(.*?)(?<=^[[:punct:]’“”:±</>]{2})([[:alnum:]])'," \\2", x, perl=TRUE) ;
x <- gsub('(.*?)(?<=^[[:punct:]’“”:±</>])([[:alnum:]])'," \\2", x, perl=TRUE) ; 
# lookaheads (can use variable-width conditions) 
x <- gsub('(.*?)(?=[[:alnum:]])([[:punct:]’“”:±]+)$',"\1 ", x, perl=TRUE) ;

# remove all strings that consist *only* of punct chars 
gsub('^[[:punct:]’“”:±</>]+$',"", x, perl=TRUE) ;

}

它没有按预期工作。我认为,它根本没有任何作用。 标点符号仍在术语文档矩阵内,请参阅:

 head(Terms(tdm), n=30)

  [1] "<></>"                      "---"                       
  [3] "--,"                        ":</>"                      
  [5] ":()"                        "/)."                       
  [7] "/++"                        "/++,"                      
  [9] "..,"                        "..."                       
 [11] "...,"                       "..)"                       
 [13] "“”,"                        "(|)"                       
 [15] "(/)"                        "(.."                       
 [17] "(..,"                       "()=(|=)."                  
 [19] "(),"                        "()."                       
 [21] "(&)"                        "++,"                       
 [23] "(0°"                        "0.001),"                   
 [25] "0.003"                      "=0.005)"                   
 [27] "0.006"                      "=0.007)"                   
 [29] "000km"                      "0.01)" 
...

所以我的问题是:

  1. 为什么对我的 function(){} 的调用没有达到预期的效果?我的怎么可以 功能有待改进吗?
  2. Unicode 正则表达式模式类是否如 if\P{ASCII} or \P{PUNCT}R 的 perl 兼容正则支持 表达式?我认为他们不是(默认情况下)PCRE::“尽管支持最重要的属性,但仅对 \p 的各种 Unicode 属性的支持是不完整的。”

尽管我很喜欢苏珊娜的回答,但它正在破坏新版本中的语料库tm(不再是 PlainTextDocument 并破坏元)

您将得到一个list和以下错误:

Error in UseMethod("meta", x) : 
no applicable method for 'meta' applied to an object of class "character"

Using

tm_map(your_corpus, PlainTextDocument)

会返回你的语料库,但 $meta 损坏(特别是文档 ID 将会丢失。

Solution

Use 内容转换器

toSpace <- content_transformer(function(x,pattern)
    gsub(pattern," ", x))
your_corpus <- tm_map(your_corpus,toSpace,"„")

Source:使用 R 进行数据科学实践, 文本挖掘,[电子邮件受保护] http://onepager.togaware.com/

Update

此函数删除所有非字母数字的内容(即 UTF-8 表情符号等)

removeNonAlnum <- function(x){
  gsub("[^[:alnum:]^[:space:]]","",x)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编写自定义的removePunctuation()函数以更好地处理Unicode字符? 的相关文章

  • 将函数应用于矩阵列表

    我有一个矩阵列表 注意 它们的维度与此示例不同 x lt matrix 1 10 ncol 2 y lt x 300 mylist lt list x y 我想运行一个函数networklevel在矩阵列表中的每个矩阵上 该函数有各种可以计
  • 无效的命令名称“tk_chooseDirectory”错误

    我使用 bioconductor 进行 WES 管道 并使用 tk choose dir 选择用户存储输入文件的目录 并将其存储以供进一步使用 这里是命令行 library tcltk dataDir lt dirname tk choos
  • tidyverse 干扰 ggplot2 吗?无法访问map_data

    在控制台中运行这些命令 输出为 gt cty0 ggplot2 map data county gt library tidyverse Loading tidyverse ggplot2 Loading tidyverse tibble
  • dplyr:带引号变量名的 mutate 的标准评估

    我将如何使用mutate 我的假设是我正在寻找标准评价就我而言 因此mutate 但我对此并不完全有信心 当使用接受变量名列表的函数时 如下所示 createSum function data variableNames data gt m
  • 距数据帧中最近的非 NA 值的距离

    我有以下数据帧 df 我想添加一列 其中包含与每行最接近的非 NA 值的距离 df lt data frame x 1 20 df c 1 3 4 5 11 14 15 16 x lt NA 换句话说 我正在寻找以下值 df distanc
  • 配置 fix() 和 edit() 以从 R/RStudio 在 Notepad++ 中打开

    当我在 RStudio 或 RGUI 中执行此操作时 fix SomeFunction 或使用edit 我可以在记事本中看到该函数的代码 有什么方法可以更改此设置 以便代码预览在 Notepad 中打开 而不是在普通的旧记事本中打开 同样
  • 国际化和非 US-ASCII、Latin1 或 Win1252 的密码

    当用户输入最能以 Unicode 或其他非拉丁字符编码表示的内容时 您如何处理服务密码 具体来说 可以使用西里尔字母密码作为Oracle的密码吗 如果密码以 UTF 8 形式提供 您如何根据 Windows 身份验证机制验证用户的密码 我对
  • 如何在R中将英尺转换为厘米?

    我得到了一个高度的字符向量 如下所示 859 5 10 5 8 5 11 6 0 5 10 6 2 5 11 6 2 6 2 5 7 5 9 5 7 6 1 6 0 5 11 6 0 6 5 6 1 6 1 5 10 5 11 5 11 6
  • 在防风草模型上使用 VIP 包计算重要性度量

    我正在尝试使用 vi firm 在防风草中制作的逻辑回归模型上计算特征重要性 对于正则表达式 我将使用 iris 数据集并尝试预测观察结果是否为 setosa iris1 lt iris gt mutate class case when
  • R:(中缀)运算符的两个定义之间的冲突:如何指定包?

    在 R 中 每当两个包定义相同的函数时 很容易指定要使用哪个包pkg foo 但是 当冲突的功能是一个时 你该怎么办 infix运算符 即使用定义 举个例子 两者ggplot2 and crayon define 有没有一种方法可以让我默认
  • 使用神经网络包进行多项分类

    这个问题应该很简单 但文档没有帮助 我正在使用 R 我必须使用neuralnet多项式分类问题的包 所有示例均针对二项式或线性输出 我可以使用二项式输出进行一些一对一的实现 但我相信我应该能够通过使用 3 个单元作为输出层来做到这一点 其中
  • 在 Windows / Linux 中创建 Mac 包

    我自己努力制作一个 r 包 我按照 stackoverflow 中上一个问题的说明进行操作如何为外行开发软件包 http cran r project org bin windows Rtools 以下是我根据上一个问题采取的步骤 在新的
  • 在ggplot2中,箱线图线的末尾代表什么?

    我找不到箱线图线条端点代表什么的描述 For example here are point values above and below where the lines end 我意识到盒子的顶部和底部是第 25 个和第 75 个百分位数
  • R 无法回忆起内存中的对象

    我正在构建一个包含多个步骤的函数 其中每个步骤都会创建一个对象 某个步骤失败 temp3 并且无法找到前面的步骤对象 错误 未找到对象 temp2 我不知道为什么 我有类似的函数 遵循完全相同的结构 每个步骤都遵循先前创建的对象 在函数内
  • R 获取子字符串和正则表达式?

    我有一组文件名字符串 我想提取 符号之后但文件扩展名之前的所有字符 例如 文件名之一是 HelloWorld you txt 我想返回字符串you 这是我的代码 hashPos grep name fixed TRUE dotPos len
  • R ggplot2 分面保持比率但覆盖/定义输出图大小

    我目前正在使用 ggplot2 来比较不同组的统计数据 每个组属于不同的区域 这是通过运行 R 脚本的 Web 应用程序 tikiwiki CMS 插件 R 完成的 每个区域我可以有 2 到 30 个或更多组 相同的 R 脚本针对唯一网页中
  • 使用 data.table 左连接

    假设我有两个数据表 s dataA A B 1 1 12 2 2 13 3 3 14 4 4 15 dataB A B 1 2 13 2 3 14 我有以下代码 merge test merge dataA dataB by A all d
  • ggplot2 + 使用比例 X 的日期结构

    我真的需要帮助 因为我已经迷路了 我正在尝试创建一个折线图 显示几个团队一年来的表现 我将一年分为几个季度 2012 年 1 月 1 日 2012 年 4 月 1 日 2012 年 8 月 1 日 12 1 12 并将 csv 数据帧加载到
  • Matlab 中是否有相当于 R 的 dput() 的函数?

    Matlab 中是否有相当于 R 的 dput 的函数 dput 将 R 对象的 ASCII 文本表示形式写入文件或连接 UPDATE 1 添加了递归和对单元格的支持 UPDATE 2 添加了对结构的支持 UPDATE 3 增加了对逻辑 整
  • R中data.frame(列表)的列平均值

    Data https i stack imgur com ZYsmv jpg 请 我需要计算此 data frame 中维吉尼亚币 Sepal Length 列的平均值 Sepal Length Sepal Width Petal Leng

随机推荐

  • 如何缩放图片框中的某个点

    这是我的代码 我可以缩放图片框 但不能在某一点缩放 旋转鼠标滚轮时如何缩放到鼠标点 变量是 private double m dZoomscale 1 0 THIS IS THE ZOOM SCALE TO WHICH EACH OBJEC
  • SQLite 数据库文件支持的最大表数

    即使读完之后SQLite 限制我找不到最大表数一个SQLite数据库文件可以容纳 所以 我想知道是否 SQLite数据库可以容纳的最大表数有限制吗 SQLite 数据库文件中包含数千个小表是一个问题吗 SQLite 数据库文件中的许多表会影
  • 将 github 个人访问令牌与 TortoiseSVN 结合使用

    Github 下个月将关闭密码访问 因此我生成了个人访问令牌 PAT 然后 我尝试使用以下 URL 查看现有存储库的新副本 https 我 电子邮件受保护 我 myrepo git 其中 ghp blahblahblah 是我的 PAT 我
  • 从查询中获取表架构

    As per MSDN SqlDataReader GetSchemaTable返回所执行查询的列元数据 我想知道是否有类似的方法可以为给定的查询提供表元数据 我的意思是涉及哪些表以及它有哪些别名 在我的应用程序中 我收到查询 并且需要附加
  • 匹配正则表达式的所有单词列表

    假设我有一些字符串 Lorem ipsum dolor sat amet 我需要一个长度超过 3 的所有单词的列表 我可以使用正则表达式来完成吗 e g pattern re compile r some pattern result pa
  • 如何对数据库中的标签进行建模?

    我有一个现有的网络应用程序 想要添加标签功能 以便用户可以标记现有对象 问题是我应该为每个对象添加一个标签列吗 或者我应该对其进行标准化并使用标签表 其中每个对象都有一个标签集合 我倾向于后者 因为它感觉更干净 更容易报告并且更容易创建标签
  • 使用 Pandas 在 IPython 笔记本中显示多个输出表

    我现在知道我可以通过将 IPython pandas 嵌入到一个绘图空间中来输出多个图表 这些图表将出现在笔记本中的单个输出单元中 我可以用 Pandas HTML Tables 做类似的事情吗 我从电子表格上的多个选项卡 大约 15 20
  • ActionResult 返回调用它的页面

    我有一个 ActionLink 它调用我的公共 ActionResult 我希望它返回到调用它的页面 但是如何呢 为此 您可以使用一些技巧 最简单的是 return Redirect HttpContext Request UrlRefer
  • 使用 html 打开大写的 android 和 ios 键盘

    我正在为移动设备创建一个网页 因为很少有输入字段要求用户始终以大写形式输入数据 我看了几个选项 比如 text transformCSS的属性它将用户输入更改为大写 但也更改了占位符 这看起来不太好 autocapitalize输入属性通过
  • Flutter 中日期选择器的大小

    我正在 flutter 中制作 ipad 我有一个日期选择器 但在风景中它显得相当大 Is there any way to resize the date picker dialog 是的 您可以通过 Container SizedBox
  • 我只是不明白 C++ 指针/引用系统

    我从来没有遇到过像Python 隐式 或PHP 显式 中的引用问题 在 PHP 中你写 p myvar 你有 p作为参考指向 myVar 所以我知道在 C 中你可以这样做 void setToSomething int var var 12
  • 集合不包含与谓词匹配的元素

    我正在使用 Room 库 当我尝试构建应用程序时收到以下错误消息 e kapt An exception occurred java util NoSuchElementException Collection contains no el
  • Selenium Python 绑定:如何在元素上执行 JavaScript?

    使用python selenium脚本触发selenium服务器运行JavaScript代码 效果很好 drv execute script
  • 这个 YesodAuth 实例有什么问题?

    我刚刚从当前的 yesod 脚手架迁移到最新的yesod 1 6 0 yesod auth 1 6 2 instance YesodAuth App where type AuthId App UserId authenticate cre
  • 将单个元素添加到 IEnumerable 集合的最佳方法是什么?

    我很惊讶地发现似乎没有一种方法可以将单个元素添加到 IEnumerable 集合中 如何将单个元素添加到 IEnumerable 集合中 您无法真正向 IEnumerable 添加元素 因为它应该是只读的 你最好的选择是 return ne
  • 从java中删除hdfs文件夹

    在边缘节点上运行的 java 应用程序中 我需要删除 hdfs 文件夹 如果存在 我需要在运行在文件夹中输出的 MapReduce 作业 使用 Spark 之前执行此操作 我发现我可以使用该方法 org apache hadoop fs F
  • PHP数组在使用前需要声明吗?

    在编写最近的应用程序时 我不小心在声明数组之前开始填充数组 error reporting E ALL array value Test string 我使用 E ALL 错误报告并且没有抛出错误 它是否正确 如果是这样 声明数组值而不声明
  • MasterPage 是否知道正在显示哪个页面?

    当我使用 MasterPages 在网站上导航时 应用程序是否知道我所在的页面 如果是这样 它是否将其存储在我可以访问的对象中 我问的原因是这样我可以替换它 masterpage div ul ul div
  • 在 IDisposable 类层次结构中正确处理 ObjectDisposeException [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 当正确实现 IDisposable 时 大多数实现 包括框架指南 建议包括private bool disposed 成员以安全地允许多次调用Dispose Dispose bo
  • 如何编写自定义的removePunctuation()函数以更好地处理Unicode字符?

    在 tm 文本挖掘 R 包的源代码中 在文件中变换R 有removePunctuation 函数 当前定义为 function x preserve intra word dashes FALSE if preserve intra wor