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

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

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

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

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

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

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

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

程序如下:

[python]

  1. # -*- encoding:utf-8 -*-
  2. import os
  3. from xml.dom import minidom
  4. from urlparse import urlparse
  5. import codecs
  6. # import importlib,sys
  7. # default_encoding = 'utf-8'
  8. # if sys.getdefaultencoding() != default_encoding:
  9. # importlib.reload(sys)
  10. # sys.setdefaultencoding(default_encoding)
  11. def file_fill(file_dir): #得到文本.txt的路径
  12. for root, dirs, files in os.walk(file_dir):
  13. for f in files:
  14. tmp_dir = '.\sougou_after2' + '\\' + f # 加上标签后的文本
  15. text_init_dir = file_dir + '\\' + f #原始文本
  16. # print text_init_dir
  17. file_source = open(text_init_dir, 'r')
  18. ok_file = open(tmp_dir, 'a+')
  19. start = '<docs>\n'
  20. end = '</docs>'
  21. line_content = file_source.readlines()
  22. ok_file.write(start)
  23. for lines in line_content:
  24. text = lines.replace('&', '&')
  25. ok_file.write(text)
  26. ok_file.write(end)
  27. file_source.close()
  28. ok_file.close()
  29. def file_read(file_dir): #得到文本.txt的路径
  30. for root, dirs, files in os.walk(file_dir):
  31. for f in files:
  32. print f
  33. doc = minidom.parse(file_dir + "\\" + f)
  34. root = doc.documentElement
  35. claimtext = root.getElementsByTagName("content")
  36. claimurl = root.getElementsByTagName("url")
  37. for index in range(0, len(claimurl)):
  38. if (claimtext[index].firstChild == None):
  39. continue
  40. url = urlparse(claimurl[index].firstChild.data)
  41. if dicurl.has_key(url.hostname):
  42. if not os.path.exists(path + dicurl[url.hostname]):
  43. os.makedirs(path + dicurl[url.hostname])
  44. fp_in = file(path + dicurl[url.hostname] + "\%d.txt" % (len(os.listdir(path + dicurl[url.hostname])) + 1),"w")
  45. fp_in.write((claimtext[index].firstChild.data).encode('utf8'))
  46. # has_key(url.hostname)
  47. # break
  48. if __name__=="__main__":
  49. # folder = file_fill(".\sougou_before2")
  50. path = ".\sougou_all\\"
  51. #建立url和类别的映射词典
  52. dicurl = {'auto.sohu.com':'qiche','it.sohu.com':'hulianwang','health.sohu.com':'jiankang',\
  53. 'sports.sohu.com':'tiyu','travel.sohu.com':'lvyou','learning.sohu.com':'jiaoyu',\
  54. 'career.sohu.com':'zhaopin','cul.sohu.com':'wenhua','mil.news.sohu.com':'junshi',\
  55. 'house.sohu.com':'fangchan','yule.sohu.com':'yule','women.sohu.com':'shishang',\
  56. 'media.sohu.com':'chuanmei','gongyi.sohu.com':'gongyi','2008.sohu.com':'aoyun', \
  57. 'business.sohu.com': 'shangye'}
  58. #
  59. file_read(".\sougou_after2")

说明一下几个目录:

sougou_before2:存放原始的txt

sougou_after2:存放加上<docs></docs>且处理了&的txt

sougou_all:存放分好类的文档们

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

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

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2017-06-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux驱动个人学习

Linux CFS调度器之负荷权重load_weight--Linux进程的管理与调度(二十五)

负荷权重用struct load_weight数据结构来表示, 保存着进程权重值weight。其定义在/include/linux/sched.h, v=4.6...

13610
来自专栏Petrichor的专栏

tensorflow: variable的值 与 variable.read_value()的值 区别

查看 tensorflow api manual 时,看到关于 variable.read_value() 的注解如图:

19730
来自专栏debugeeker的专栏

《coredump问题原理探究》windows版7.5节iterator

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

7720
来自专栏用户画像

Python 使用正则表达式进行MongoDB条件查询

db.VideoProfile.find( {_id: { $regex: /^1_[0-9]{5,}$/} } ).count()

10220
来自专栏GAN&CV

tensorflow ‘/biases/Adam_1’not in ckpt file

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25737169/article/d...

16850
来自专栏软件测试经验与教训

Python学习笔记(文件)

35690
来自专栏小文博客

C语言迷宫代码分享

24130
来自专栏Deep Learning 笔记

和MNSIT打个招呼

作为深度学习的入门数据集,MNIST是个很好的选择,我们可以在官网 http://yann.lecun.com/exdb/mnist/下载。

12120
来自专栏每日一篇技术文章

OpenGL ES _ 高级03_调试工具

10510
来自专栏猿人谷

memcpy和memmove的区别

memcpy()和memmove()都是C语言中的库函数,在头文件string.h中,其原型分别如下: void *memcpy(void *dst, con...

33350

扫码关注云+社区

领取腾讯云代金券