Files
DataMate/runtime/ops/mapper/full_width_characters_cleaner/process.py
2025-10-21 23:00:48 +08:00

47 lines
2.2 KiB
Python

#!/user/bin/python
# -*- coding: utf-8 -*-
"""
Description: 全角转半角
Create: 2025/01/13
"""
import time
from typing import Dict, Any
from loguru import logger
from datamate.core.base_op import Mapper
class FullWidthCharacterCleaner(Mapper):
"""将文档中的所有全角字符转换成半角字符"""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._full_to_half_dict = {
'': '"', '': '#', '': '$', '': '%', '': '&', '': "'", '': '*', '': '+',
'': '-', '': '.', '': '/', '': '0', '': '1', '': '2', '': '3', '': '4',
'': '5', '': '6', '': '7', '': '8', '': '9', '': '<', '': '=', '': '>',
'': '@', '': 'A', '': 'B', '': 'C', '': 'D', '': 'E', '': 'F', '': 'G',
'': 'H', '': 'I', '': 'J', '': 'K', '': 'L', '': 'M', '': 'N', '': 'O',
'': 'P', '': 'Q', '': 'R', '': 'S', '': 'T', '': 'U', '': 'V', '': 'W',
'': 'X', '': 'Y', '': 'Z', '': '[', '': '\\', '': ']', '': '^', '_': '_',
'': '`', '': 'a', '': 'b', '': 'c', '': 'd', '': 'e', '': 'f', '': 'g',
'': 'h', '': 'i', '': 'j', '': 'k', '': 'l', '': 'm', '': 'n', '': 'o',
'': 'p', '': 'q', '': 'r', '': 's', '': 't', '': 'u', '': 'v', '': 'w',
'': 'x', '': 'y', '': 'z', '': '{', '': '|', '': '}', '': '~'
}
def execute(self, sample: Dict[str, Any]) -> Dict[str, Any]:
start = time.time()
sample[self.text_key] = self._full_width_character_filter(sample[self.text_key])
logger.info(f"fileName: {sample[self.filename_key]}, "
f"method: FullWidthCharactersCleaner costs {time.time() - start:6f} s")
return sample
def _full_width_character_filter(self, input_data: str):
res = []
for input_str in input_data.split('\n'):
res.append("".join(self._full_to_half_dict.get(char, char) for char in input_str))
return '\n'.join(res)