python - 将许多正则表达式操作组合在一起
问题描述
我正在使用 python 进行文本处理的 NLP 项目,在该项目中我需要在特征提取之前进行数据清理。我正在使用正则表达式操作使用字符清理特殊字符和数字分隔符,但我在许多操作中分别执行所有这些操作,这使得它变慢了。我想以尽可能少的操作或以更快的方式实现它。
我的代码如下
def remove_special_char(x):
if type(x) is str:
x = x.replace('-', ' ').replace('(', ',').replace(')', ',')
x = re.compile(r"\s+").sub(" ", x).strip()
x = re.sub(r'[^A-Z a-z 0-9-,.x]+', '', x).lower()
x = re.sub(r"([0-9]+(\.[0-9]+)?)",r" \1 ", x).strip()
x = x.replace(",,",",")
return x
else:
return x
谁能帮我?
解决方案
除了在函数之外准备编译的模式,您还可以通过使用 translate 进行所有一对一或一对一的转换来获得一些性能:
import string
mappings = {'-':' ', '(':',', ')':','} # add more mappings as needed
mappings.update({ c:' ' for c in string.whitespace }) # white spaces become spaces
mappings.update({c:c.lower() for c in string.ascii_uppercase}) # set to lowercase
specialChars = str.maketrans(mappings)
def remove_special_char(x):
x = x.translate(specialChars)
...
return x
推荐阅读
- apex - System.QueryException:列表没有分配给 SObject 的行
- python-3.x - 当用户将测试输入到 tkinter 条目小部件时,如何关闭当前的 tkinter 窗口并打开一个新的 tkinter 窗口
- pandas - 根据startswith合并DataFrame中的某些行
- javascript - 我如何在数组中为相同的元素编号?
- r - R - 如何从表达式中提取对象名称
- list - 如何制作 5D 列表
- random - 检查二进制序列中的噪声的随机性
- python-3.x - 使用 Python 更新 AD 中的 LDAP 属性
- python - 我可以拆分 message.content 并打印一些信息吗?不和谐.py
- angular - 单元测试动态方法调用Angular