专栏名称: 大数据挖掘DT数据分析
实战数据资源提供。数据实力派社区,手把手带你玩各种数据分析,涵盖数据分析工具使用,数据挖掘算法原理与案例,机器学习,R语言,Python编程,爬虫。如需发布广告请联系: hai299014
目录
相关文章推荐
数据派THU  ·  通知 | 首届开源技术学术大会征稿启事 ·  5 天前  
数据派THU  ·  三种Transformer模型中的注意力机制 ... ·  1 周前  
软件定义世界(SDX)  ·  中小企业数字化体系设计 ·  6 天前  
软件定义世界(SDX)  ·  华泰集团“智改数转”实践与思考 ·  1 周前  
51好读  ›  专栏  ›  大数据挖掘DT数据分析

文本分类中语料库的获取——搜狗语料库

大数据挖掘DT数据分析  · 公众号  · 大数据  · 2017-06-09 19:19

正文



数据挖掘入门与实战  公众号: datadw


这次主要总结搜过语料库的获取,因为老师要求20万数据,而我自己只爬了2万多,所以用到了搜狗的语料库.


回复公众号“搜狗”获取下载链接。


在这个页面中,我选择的是一个月的数据,别小看一个月,我从里面只用了24万,这24万可能在这一个月里都不算什么........做个实验还是很够用的。


下载下来是这个样子......



其中每个txt文本是这个样子.....



很明显,是xml格式,但是这一个txt里就包含了很多doc文档的内容,怎样把这些文档一篇篇提取出来,并且分到不同的类别去呢??这就需要接下来的处理。


首先,我们知道,像上文这样的txt的xml格式是无法解析的,因为不完整,缺啥?


但是!我们不可能一个txt一个txt的手工加吧有128个txt),还是需要遍历一下用程序加的。Python用提供了一个解析xml很好用的minidom.parse函数,这个函数的用法比较简单,可以通过root.getElementsByTagName()来获取xml中需要的部分(可以查下这个函数的用法,比较好理解),这里我获取的是url和content,获取url的目的是为了获取域名,这样就可以根据域名来判断这篇文章属于什么类别里啦~对了,忘 了说一点,这样做运行时会出现bug,问题是因为有的url中出现了无法解析的&,所以在给每个txt加的同时,别忘了把出现的&替换成&;这样就能正常解析了。

程序如下:


[python] 

  1. # -*- encoding:utf-8 -*-  

  2.   

  3.   

  4. import os  

  5. from xml.dom import minidom  

  6. from urlparse import urlparse  

  7. import codecs  

  8. # import importlib,sys  

  9. # default_encoding = 'utf-8'  

  10. # if sys.getdefaultencoding() != default_encoding:  

  11. #     importlib.reload(sys)  

  12. #     sys.setdefaultencoding(default_encoding)  

  13.   

  14. def file_fill(file_dir): #得到文本.txt的路径  

  15.     for root, dirs, files in os.walk(file_dir):  

  16.         for f in files:  

  17.             tmp_dir = '.\sougou_after2' + '\\' + f  # 加上标签后的文本  

  18.             text_init_dir = file_dir + '\\' + f  #原始文本  

  19.             # print text_init_dir  

  20.             file_source = open(text_init_dir, 'r')  

  21.             ok_file = open(tmp_dir, 'a+')  

  22.             start = '\n'  

  23.             end = ''  

  24.             line_content = file_source.readlines()  

  25.             ok_file.write(start)  

  26.             for lines in line_content:  

  27.                 text = lines.replace('&''&')  

  28.                 ok_file.write(text)  

  29.             ok_file.write(end)  

  30.   

  31.             file_source.close()  

  32.             ok_file.close()  

  33.   

  34. def file_read(file_dir): #得到文本.txt的路径  

  35.     for root, dirs, files in os.walk(file_dir):  

  36.         for f in files:  

  37.             print f  

  38.             doc = minidom.parse(file_dir + "\\" + f)  

  39.             root = doc.documentElement  

  40.             claimtext = root.getElementsByTagName("content")  

  41.             claimurl = root.getElementsByTagName("url")  

  42.             for index in range(0, len(claimurl)):  

  43.                 if (claimtext[index].firstChild == None):  

  44.                     continue  

  45.                 url = urlparse(claimurl[index].firstChild.data)  

  46.                 if dicurl.has_key(url.hostname):  

  47.                     if not os.path.exists(path + dicurl[url.hostname]):  

  48.                         os.makedirs(path + dicurl[url.hostname])  

  49.                     fp_in = file(path + dicurl[url.hostname] + "\%d.txt" % (len(os.listdir(path + dicurl[url.hostname])) + 1),"w")  

  50.                     fp_in.write((claimtext[index].firstChild.data).encode('utf8'))  

  51.                 # has_key(url.hostname)  

  52.                 # break  

  53.   

  54.   

  55.   

  56. if __name__=="__main__":  

  57.     # folder = file_fill(".\sougou_before2")  

  58.   

  59.     path = ".\sougou_all\\"  

  60.     #建立url和类别的映射词典  

  61.     dicurl = {'auto.sohu.com':'qiche','it.sohu.com':'hulianwang','health.sohu.com':'jiankang',\  

  62.               'sports.sohu.com':'tiyu','travel.sohu.com':'lvyou','learning.sohu.com':'jiaoyu',\  

  63.               'career.sohu.com':'zhaopin','cul.sohu.com':'wenhua','mil.news.sohu.com':'junshi',\  

  64.               'house.sohu.com':'fangchan','yule.sohu.com':'yule','women.sohu.com':'shishang',\  

  65.               'media.sohu.com':'chuanmei','gongyi.sohu.com':'gongyi','2008.sohu.com':'aoyun', \  

  66.               'business.sohu.com''shangye'}  

  67.     #  

  68.     file_read(".\sougou_after2")  


说明一下几个目录:

sougou_before2:存放原始的txt

sougou_after2:存放加上且处理了&的txt

sougou_all:存放分好类的文档们

sougou_all的目录结构如下:这样就得到了文本分类所需要的数据集



这样,我得到了10个分类,供24万多篇文章。其实我只用到了96个txt,如果用整个的128个txt的话,感觉会有将近50万篇文章吧)


数据挖掘入门与实战

搜索添加微信公众号:datadw


教你机器学习,教你数据挖掘


长按图片,识别二维码,点关注



  公众号: weic2c   
据分析入门与实战

长按图片,识别二维码,点关注