去掉低频词、分词、繁简转化、替换奇异词等是中文文本数据处理中的重要步骤。
如在主题模型中,数据预处理的要求很简单,只需要去掉低频词,大多数文章设定的门限都是5或者6.
中文文本相比于英文,需要首先进行分词处理。类似地还有日文、韩文等。因而自然预言处理中一个重要的研究问题就是文本分词技术。
国内常用的分词工具有北理工张华平老师的NLPIR分词包和百度工程师开发的jieba分词,名字很有意思。
两者都有Python版本,下面以jieba分词为例:
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
需要注意的是,分词模型中比较重要的两个点,是上下文和词典。两者都能极大地影响分词效果,简单来讲,就是需要输入文本内容较长,和词典较全面。上例中的文本输入对于初学者具有较强的误导性,就是对一篇文章,可以分成一句一句来分词,这是错误的。最好的情况是把所有需要被分词的文本都拼接成一个长文本,然后输入。如果有段落分隔需要的,可以用’\n’等特殊字符进行分割,在得到输出的时候直接用str.split(‘\n’)分开就好。词典就不用说了,我整理了一个比较全面的超大词典,共享在github上,欢迎选用。只是词的词频赋权还不够全面,不过影响不大。链接:out link
英文论文中,常见到会对文本进行词干化处理(stemming), 就是吧把具有相同词干的单词整理成一个单词,也有点去掉低频词的意味,可以明显改善词频较低的问题。主要原因还是因为在自然预言理解的时候,一个词被替换成其词干不会影响理解,而能够改善词频较低的问题。是统计建模前的必要处理过程。如:
tall, taller, tallest
good, better, best
分别具有相同的词干。python中有package可以处理这个问题,如stemming等,实现了若干知名算法。具体的包算法没看,但是最简单的一个方法是利用英文百科词典,如word net这个语法数据库,直接mapping就好了。
当然了,中文数据集中包括很多数字、英文单词、表情符号等。因而需要用正则表达式将他们全部提取出来。有很多文章研究了中文字符、中亚字符等的unicode范围,下面是一个自测满足中文字符提取的代码,直接copy用就好了。
def Chinese_word_extraction(content_raw):
chinese_pattern = u"([\u4e00-\u9fa5]+)"
re_data = chi_pattern.findall(content_raw)
content_clean = ' '.join(re_data)
我处理的网易新闻数据集中有一个问题,就是网民在提到自认为的敏感词的时候,会采用同音字、典故等方法进行替换。或者在敏感词中加入一些特殊符号进行间隔。这些方法都太naive了,利用同音字映射、联系上下文和正则提取等方法就能解决这些问题。以后有时间了可以研究一下,挺有意思,而且已有的顶会论文好像就专门研究了这个问题。下面是我根据观察发现的若干常用替换:
replace_dict = {
u'吻腚':u'稳定',
u'弓虽':u'强',
u'女干':u'奸',
u'示土':u'社',
u'禾口':u'和',
u'言皆':u'谐',
u'释永性':u'释永信',
u'大菊观':u'大局观',
u'yl':u'一楼',
u'cnm':u'草泥马',
u'CCTV':u'中央电视台',
u'CCAV':u'中央电视台',
u'ccav':u'中央电视台',
u'cctv':u'中央电视台',
u'qq':u'腾讯聊天账号',
u'QQ':u'腾讯聊天账号',
u'cctv':u'中央电视台',
u'CEO':u'首席执行官',
u'克宫':u'克里姆林宫',
u'PM2.5':u'细颗粒物',
u'pm2.5':u'细颗粒物',
u'SDR':u'特别提款权',
u'装13':u'装逼',
u'213':u'二逼',
u'13亿':u'十三亿',
u'巭':u'功夫',
u'孬':u'不好',
u'嫑':u'不要',
u'夯':u'大力',
u'芘':u'操逼',
u'烎':u'开火',
u'菌堆':u'军队',
u'sb':u'傻逼',
u'SB':u'傻逼',
u'Sb':u'傻逼',
u'sB':u'傻逼',
u'is':u'伊斯兰国',
u'isis':u'伊斯兰国',
u'ISIS':u'伊斯兰国',
u'ko':u'打晕',
u'你M':u'你妹',
u'你m':u'你妹',
u'震精':u'震惊',
u'返工分子':u'反共',
u'黄皮鹅狗':u'黄皮肤俄罗斯狗腿',
u'苏祸姨':u'苏霍伊',
u'混球屎报':u'环球时报',
u'屎报':u'时报',
u'jb':u'鸡巴',
u'j巴':u'鸡巴',
u'j8':u'鸡巴',
u'J8':u'鸡巴',
u'JB':u'鸡巴',
u'瞎BB':u'瞎说',
u'nb':u'牛逼',
u'牛b':u'牛逼',
u'牛B':u'牛逼',
u'牛bi':u'牛逼',
u'牛掰':u'牛逼',
u'苏24':u'苏两四',
u'苏27':u'苏两七',
u'痰腐集团':u'贪腐集团',
u'痰腐':u'贪腐',
u'反hua':u'反华',
u'<br>':u' ',
u'屋猫':u'五毛',
u'5毛':u'五毛',
u'傻大姆':u'萨达姆',
u'霉狗':u'美狗',
u'TMD':u'他妈的',
u'tmd':u'他妈的',
u'japan':u'日本',
u'P民':u'屁民',
u'八离开烩':u'巴黎开会',
u'傻比':u'傻逼',
u'潶鬼':u'黑鬼',
u'cao':u'操',
u'爱龟':u'爱国',
u'天草':u'天朝',
u'灰机':u'飞机',
u'张将军':u'张召忠',
u'大裤衩':u'中央电视台总部大楼',
u'枪毕':u'枪毙',
u'环球屎报':u'环球时报',
u'环球屎包':u'环球时报',
u'混球报':u'环球时报',
u'还球时报':u'环球时报',
u'人X日报':u'人民日报',
u'人x日报':u'人民日报',
u'清只县':u'清知县',
u'PM值':u'颗粒物值',
u'TM':u'他妈',
u'首毒':u'首都',
u'gdp':u'国内生产总值',
u'GDP':u'国内生产总值',
u'鸡的屁':u'国内生产总值',
u'999':u'红十字会',
u'霉里贱':u'美利坚',
u'毛子':u'俄罗斯人',
u'ZF':u'政府',
u'zf':u'政府',
u'蒸腐':u'政府',
u'霉国':u'美国',
u'狗熊':u'俄罗斯',
u'恶罗斯':u'俄罗斯',
u'我x':u'我操',
u'x你妈':u'操你妈',
u'p用':u'屁用',
u'胎毒':u'台独',
u'DT':u'蛋疼',
u'dt':u'蛋疼',
u'IT':u'信息技术',
u'1楼':u'一楼',
u'2楼':u'二楼',
u'2逼':u'二逼',
u'二b':u'二逼',
u'二B':u'二逼',
u'晚9':u'晚九',
u'朝5':u'朝五',
u'黄易':u'黄色网易',
u'艹':u'操',
u'滚下抬':u'滚下台',
u'灵道':u'领导',
u'煳':u'糊',
u'跟贴被火星网友带走啦':u'',
u'猿们':u'公务员们',
u'棺猿':u'官员',
u'贯猿':u'官员',
u'每只猿':u'每个公务员',
u'巢县':u'朝鲜',
u'死大林':u'斯大林',
u'无毛们':u'五毛们',
u'天巢':u'天朝',
u'普特勒':u'普京',
u'依拉克':u'伊拉克',
u'歼20':u'歼二零',
u'歼10':u'歼十',
u'歼8':u'歼八',
u'f22':u'猛禽',
u'p民':u'屁民',
u'钟殃':u'中央'
}
还非常不全面,也不是长久之计,下面搞一搞这个问题说不定还能水一篇论文,哈哈。