• 从WekaWiki上的一个文本聚类的示例开始(1)


    WekaWiki 上有一个文本聚类的示例,简述了使用 weka 进行文本聚类的过程,本系列文章将使用其中的text_example 演示一遍 文本挖掘从 预处理 到 特征提取 再到挖掘的全过程。

    下载完 text_example 完后,解压,其中有3个文件夹,分别为class1,class2,class3,每个文件夹中各有数篇文章,这就是分类好的样本。class1,class2,class3就是类别。在示例中,所有的文本都是HTML网页,所以第一步就是将网页中的HTML标签去掉。

    下面这段代码使用了 BeautifulSoup 和 正则表达式来从网页中提取数据,其中正则表达式的部分可以参见我的另一篇博文:http://blog.csdn.net/rav009/article/details/12888027。而 BeautifulSoup 的文档在:http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html

    #py2.7
    #coding:utf-8
    
    
    import re
    import os
    import chardet
    from BeautifulSoup import BeautifulSoup as bs, Comment
    
    
    def BsHandler(str):
        '''
        用BeautifulSoup提取内容
        '''
        soup=bs(str)
        comments = soup.findAll(text=lambda text : isinstance(text, Comment))
        [comment.extract() for comment in comments]
        scripts=soup.body.findAll('script')
        for script in scripts:
            script.extract()
        styles = soup.body.findAll('style')
        for style in styles:
            style.extract()
        rs=' '.join(soup.body.findAll(text=True))
        return rs
    
    
    
    
    
    
    def HtmlCharEntityHandler(htmltext):
        '''
        过滤html的保留符号,比如 
        '''
        htmlentity=re.compile('&#?w+;?')
        return htmlentity.sub(' ', htmltext)
    
    
    
    
    def Handler(str):
        rs= HtmlCharEntityHandler(BsHandler(str))
        fuhao=re.compile('[\r\n[]()|]')
        return fuhao.sub(' ', rs)
    
    
    if __name__=='__main__':
        path='E:\forshare\text_example'
        for root,dirs,files in os.walk(path):
            for file in files:
                if file.endswith('.htm'):
                    fname=root+os.path.sep+file
                    f=open(fname)
                    stream=f.read()
                    f.close()
                    encoding=chardet.detect(stream)['encoding']
                    htmlstr=stream.decode(encoding)
                    rs=Handler(htmlstr)
                    f=open(fname+'.txt','w')
                    f.write(rs.encode('utf-8'))
                    f.close()
    
    
    

    通过这段代码完成了对这些 htm 文件的预处理,接下来就轮到 WEKA中的过滤器来提取特征了。


  • 相关阅读:
    好听的歌 好音乐
    dubbox编译
    [HDU3038]How Many Answers Are Wrong(并查集)
    [POJ1733]Parity game(并查集 + 离散化)
    [POJ1703]Find them, Catch them(并查集)
    [luoguP2024] 食物链(并查集)
    [luoguP3355] 骑士共存问题(二分图最大独立集)
    火星探险问题
    [CODEVS1917] 深海机器人问题(最小费用最大流)
    [CODEVS1916] 负载平衡问题(最小费用最大流)
  • 原文地址:https://www.cnblogs.com/rav009/p/5131105.html
Copyright © 2020-2023  润新知