前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文本分类中语料库的获取——搜狗语料库

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

作者头像
机器学习AI算法工程
发布2018-03-14 18:18:37
2.7K0
发布2018-03-14 18:18:37
举报

这次主要总结搜过语料库的获取,因为老师要求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万篇文章吧)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据挖掘DT数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档