首页 > 解决方案 > 将许多正则表达式操作组合在一起

问题描述

我正在使用 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 

谁能帮我?

标签: pythonregexnlptext-processing

解决方案


除了在函数之外准备编译的模式,您还可以通过使用 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

推荐阅读