首页 > 解决方案 > 如何删除大型法语文本文件中的所有特殊字符

问题描述

给定一个以 UTF-8 编码并由 unicode 规范化的法语 (>200GB) 大文本文件NFC,我想使用 Python 或 Bash 或任何更快的方法删除所有特殊字符,但重音/非重音字母、数字和标点符号除外。以前,我通过扫描文本来手动执行此任务,以识别是否有任何我不想要的特殊字符并使用如下字符代码删除它们:

def remove_special_chars(text):

    text = re.sub(chr(65533), '', text)
    text = re.sub(chr(9658), '', text) 
    text = re.sub(chr(9660), '', text)
    text = re.sub(chr(169), '', text)  

    return text

� (char code 65533) ► (char code 9658) ▼ (char code 9660) © (char code 169) etc.

但是,对于一个大文本文件,不可能再这样做了。因此,我正在考虑通过检查字符是否是(重音/非重音)字母或数字或标点符号来删除所有特殊字符,如果不是则删除。我尝试了以下但命令行不执行。

grep -P -v '[^a-zA-Z0-9 àâäèéêëîïôœùûüÿçÀÂÄÈÉÊËÎÏÔŒÙÛÜŸÇ!"#\$%&\'\(\)\*\+,\\-\./:;<=>\?@\[\]\^_`\{\|\}\~]' file

你能帮我解决这个问题吗?预先感谢您的帮助!

标签: pythonregexbashunicodedata-cleaning

解决方案


您要删除的所有字符都属于Symbols, Other Unicode category

在 Python 中,您可以安装PyPi 正则表达式模块,添加

import regex

然后像这样更改内容:

text = regex.sub(r'\p{So}+', '', text)

在 Linux 中,您可以使用 Perl 单行符来做到这一点:

perl -i -CSD -Mutf8 -pe 's/\p{So}+//g' file

-i选项将修改文件内联,-CSD -Mutf8因为我相信您的文件是 UTF8 编码。


推荐阅读