前言
网页数据的预处理是非常复杂的问题,幸运的是,已经有很多开源软件能够很好地处理这些问题了,把这些工具学好用好,就可以解决工作中遇到的绝大多数问题。
1. 问题描述
最简单、最常见的问题就是如何去除HTML中的换行(\r和\n
)、制表符(\t
)。这个问题有很多解决方案,包括用字符串替换,正则表达式等。但有的时候,处理某些网页时,还是会出问题,导致处理后的网页出现很多图标,比如:黑色方块、菱形甚至星星。
2. 解决方案
试试用unicodedata
。
unicodedata
提供了对Unicode字符数据库(Unicode Character Database,UCD)的访问,该数据库为所有Unicode字符定义了字符属性。
Unicode字符被划分为很多类别(Category),其中一个类别是C类别(具体信息可以查看下文),通过去掉这个类别的字符,可以把文本中一些格式字符、不可见的控制字符(如"^V, ^I" 或者zero-width的如\u200d
等字符)给过滤掉,换行、制表符当然也不在话下。
# python3
import unicodedata
return "".join(ch for ch in text if unicodedata.category(ch)[0] != 'C')
3. Unicode Category相关知识
Normative Categories
Abbr.
Description
Lu Letter, Uppercase
Ll Letter, Lowercase
Lt Letter, Titlecase
Mn Mark, Non-Spacing
Mc Mark, Spacing Combining
Me Mark, Enclosing
Nd Number, Decimal Digit
Nl Number, Letter
No Number, Other
Zs Separator, Space
Zl Separator, Line
Zp Separator, Paragraph
# 下面这些就是C类别
Cc Other, Control
Cf Other, Format
Cs Other, Surrogate
Co Other, Private Use
Cn Other, Not Assigned (no characters in the file have this property)
Informative Categories
Abbr.
Description
Lm Letter, Modifier
Lo Letter, Other
Pc Punctuation, Connector
Pd Punctuation, Dash
Ps Punctuation, Open
Pe Punctuation, Close
Pi Punctuation, Initial quote (may behave like Ps or Pe depending on usage)
Pf Punctuation, Final quote (may behave like Ps or Pe depending on usage)
Po Punctuation, Other
Sm Symbol, Math
Sc Symbol, Currency
Sk Symbol, Modifier
So Symbol, Other