python - 如何删除大型法语文本文件中的所有特殊字符
问题描述
给定一个以 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
你能帮我解决这个问题吗?预先感谢您的帮助!
解决方案
您要删除的所有字符都属于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 编码。
推荐阅读
- c++ - 仅调用某些模板类成员函数有效
- blazor - 在 Blazor 服务器端使用 CancellationTokenSource 实现去抖动
- reactjs - React-Select:保持编辑模式() 选择后(输入)
- autodesk-forge - 场景更新()与无效()
- c# - 什么是 C# 中的 SafeFileHandle,我应该什么时候使用它?
- git - 无法推送到 GitHub 上的远程存储库
- java - 如何解决“发生 JNI 错误,请检查您的安装。”
- r - 使用 gganimate 时 ggplot 的 geom_polygon 的奇怪行为
- php - 当在 CodeIgniter 中设置当前日期时,Bootstrap 日期选择器从视图中向 cotroller 发送空值
- c# - 在 Unity3D 中为 IL2Cpp 构建运行时代码编译是否有任何解决方案?