删除这些特殊非中文字符,需要用到正则表达式,正则表达式是爬虫中必不可少的一个知识点,是一个条件表达式,用这个构造的条件表达式所指定的规则在一个指定字符串中检索匹配出符合规则的句子。
import re
afterDeleteSpecialWord=data_new['content'].apply(lambda x:re.sub('[^\u4E00-\u9FD5]+','',string))
这里的apply表示对这个series数组中的每一个元素(即文档的内容字符串)都执行这个匿名函数x,string是传进来的参数,re.sub 表示 将前面指定的正则表达式'[^\u4E00-\u9FD5]+'所匹配的字符串(即非中文特殊字符)用''代替。这里的正则表达式'[^\u4E00-\u9FD5]+':
[]是一个原子列表,^表示非,\u4E00-\u9FD5中文字符的正则表示,前面加上^则表示非中文字符,[]+表示这个原子列表中的字符可以匹配1次或多次。具体正则表达式的用法网上资源很多,这里不详细解释.
处理完后,标点符号,以及特殊字符都不见了,如下所示:
4.分词,去除停用词
第一步先将之前的content中的内容进行分词,分词后content列的元素是一个列表,比如之前的content列中的元素'我来到北京清华大学计算机学院',执行分词后结果为:['我','来到','北京','清华大学','计算机','学院']
第二步是去除停用词,首先加载停用词文件,里面存储了N个停用词,然后对第一步中的分词结果进行去除存在于停用词列表中的词.
代码如下:
import jieba # 分词库
with open('stopList.txt','r') as f:
stop=f.read() # 获取的结果是一个大的字符串,其中换行符之类的特殊字符也存在于其中
stop = stop.split() # 按照空格,换行符进行分割,获取停用词列表
stop = [' ']+stop # 由于之前的stop里没有空格,而空格是停用词,所以重新加回空格
jieba.load_userdic(path) # 加载指定路径path里的用户自定义词典
after_segement = afterDeleteSpecialWord.apply(jieba.lcut) # 进行分词
data_after = after_segement.apply(lambda x:[i for i in x if i not in stop]) # 去除停用词