文本分类中语料库的获取——对搜狗语料库进行想要格式的获取

最近一个都在整数据挖掘课程的大作业,终于告一段落,也有时间来更新一些博客。第一次接触文本分类,一个月内学到了太多,期间涉及到的一些处理上的主要部分需要总结一下,以便之后查阅。

这次主要总结搜过语料库的获取,因为老师要求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;这样就能正常解析了。

程序如下:

#!/usr/bin/python
# -*- encoding:utf-8 -*-


import os
from xml.dom import minidom
from urlparse import urlparse
import codecs
# import importlib,sys
# default_encoding = 'utf-8'
# if sys.getdefaultencoding() != default_encoding:
#     importlib.reload(sys)
#     sys.setdefaultencoding(default_encoding)

def file_fill(file_dir): #得到文本.txt的路径
    for root, dirs, files in os.walk(file_dir):
        for f in files:
            tmp_dir = '.\sougou_after2' + '\\' + f  # 加上标签后的文本
            text_init_dir = file_dir + '\\' + f  #原始文本
            # print text_init_dir
            file_source = open(text_init_dir, 'r')
            ok_file = open(tmp_dir, 'a+')
            start = '<docs>\n'
            end = '</docs>'
            line_content = file_source.readlines()
            ok_file.write(start)
            for lines in line_content:
                text = lines.replace('&', '&')
                ok_file.write(text)
            ok_file.write(end)

            file_source.close()
            ok_file.close()

def file_read(file_dir): #得到文本.txt的路径
    for root, dirs, files in os.walk(file_dir):
        for f in files:
            print f
            doc = minidom.parse(file_dir + "\\" + f)
            root = doc.documentElement
            claimtext = root.getElementsByTagName("content")
            claimurl = root.getElementsByTagName("url")
            for index in range(0, len(claimurl)):
                if (claimtext[index].firstChild == None):
                    continue
                url = urlparse(claimurl[index].firstChild.data)
                if dicurl.has_key(url.hostname):
                    if not os.path.exists(path + dicurl[url.hostname]):
                        os.makedirs(path + dicurl[url.hostname])
                    fp_in = file(path + dicurl[url.hostname] + "\%d.txt" % (len(os.listdir(path + dicurl[url.hostname])) + 1),"w")
                    fp_in.write((claimtext[index].firstChild.data).encode('utf8'))
                # has_key(url.hostname)
                # break



if __name__=="__main__":
    # folder = file_fill(".\sougou_before2")

    path = ".\sougou_all\\"
    #建立url和类别的映射词典
    dicurl = {'auto.sohu.com':'qiche','it.sohu.com':'hulianwang','health.sohu.com':'jiankang',\
              'sports.sohu.com':'tiyu','travel.sohu.com':'lvyou','learning.sohu.com':'jiaoyu',\
              'career.sohu.com':'zhaopin','cul.sohu.com':'wenhua','mil.news.sohu.com':'junshi',\
              'house.sohu.com':'fangchan','yule.sohu.com':'yule','women.sohu.com':'shishang',\
              'media.sohu.com':'chuanmei','gongyi.sohu.com':'gongyi','2008.sohu.com':'aoyun', \
              'business.sohu.com': 'shangye'}
    #
    file_read(".\sougou_after2")



说明一下几个目录:

sougou_before2:存放原始的txt

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

sougou_all:存放分好类的文档们

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



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

  • 4
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 28
    评论
基于CNN(卷积神经网络)的文本分类问题是利用CNN模型对搜狗语料库的文本数据进行分类的任务。 搜狗语料库是包含大量文本数据的语料库,我们可以将其用于训练和测试CNN模型,以完成文本分类的任务。CNN模型在计算机视觉领域得到了很好的应用,并且也被成功应用于文本分类任务上。 首先,我们将搜狗语料库的文本数据进行预处理,例如去除噪声、分词、去停用词等。然后,我们将预处理后的文本数据转换成词嵌入向量,以便用于训练CNN模型。 在CNN模型,我们将利用卷积层和池化层来提取文本数据的特征。卷积层通过滑动窗口的方式,对文本数据进行特征提取。通过不同大小的滤波器,我们可以得到多个特征图,每个特征图对应一个不同的特征。池化层用于下采样,进一步减少数据的维度,并保留重要的特征。 接着,我们将提取到的特征进行扁平化,并结合全连接层进行分类。全连接层将提取到的特征转换成概率值,代表每个类别的概率。 在训练过程,我们将通过反向传播算法来更新CNN模型的参数,以最小化损失函数。为了评估模型的性能,我们可以使用交叉熵损失和准确率等指标。 最后,通过测试集对训练好的CNN模型进行评估,以评估其在分类任务的性能。我们可以比较模型在不同类别的准确率和整体准确率,来评估其分类性能的优劣。 综上所述,基于CNN的文本分类搜狗语料库上是一项具有挑战性的任务,通过合理的数据预处理和CNN模型的训练,我们可以得到高效准确的文本分类结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值