前言
在搜集了很多文本语料之后,会开始漫长的数据清洗过程,通常要不断迭代。
1. 问题描述
有些文本数据中,会包含一些特殊符号。
猜想可能是从某些富文本编辑器中直接粘贴到了网页。
如果要清除这些特殊符号,就需要专门的工具。
2. 相关知识
Unicode标准把符号分为四大类,分别是:
缩写详情[Sc]Symbol, Currency[Sk]Symbol, Modifier[Sm]Symbol, Math[So]Symbol, Other
一般需要清理掉的符号会是
So
类型的,但还是要根据自己的数据情况具体分析。
3. 解决方案
在数据清洗过程中遇到的符号可能包括:杂项符号、几何形状、箭头、心形、星形、表情Emoji、货币符号等。
如果以上这些符号都要删除,可以用下面的代码。
text ="".join(ch for ch in text if unicodedata.category(ch)[0]!='S')
如果需要单独去除某一类,或者希望知道某个符号所属的具体类别,就需要到这个网站:
https://www.unicode.org/charts/charindex.html
查找对应的符号类型。
以箭头符号为例。
先用Arrow搜索上面的网页,找到纯粹的箭头项Arrows,对应的文档是:https://www.unicode.org/charts/PDF/U2190.pdf
找到自己需要的箭头,并查看对应的名字。
举例:箭头
RIGHTWARDS ARROW,然后用
python
提供的
unicodedata
标准库,查找这个符号的类别。
unicodedata.lookup('RIGHTWARDS ARROW')'→'
unicodedata.category('→')'Sm'
这样,就知道要查找的箭头符号,属于Sm类别(数学符号)。
举例:黑色方块
BLACK SQUARE ■ U+25A0
unicodedata.lookup('BLACK SQUARE')'■'
unicodedata.category('■')'So'
举例:黑色心形
unicodedata.lookup('BLACK HEART SUIT')'♥'
unicodedata.category('♥')'So'
举例:黑色星形
unicodedata.lookup('BLACK FOUR POINTED STAR')'✦'
unicodedata.category('✦')'So'
如果只需要去除杂项符号,可以用下面的python代码。
text ="".join(ch for ch in text if unicodedata.category(ch)!='So')
另一个有用的网址:
版权归原作者 coder1479 所有, 如有侵权,请联系我们删除。