`

基于机器学习(machine learning)的SEO实战日记5--分词与词频计算

阅读更多
经过运行抓取程序,抓到的数据网站数量为4305个,接下来,需要进行分词处理,分词后,再统计词出现的次数,词出现的次数一部分提现了本类网站中该次的竞争情况。分词使用的hanlp开源项目,关于该开源项目的引用与使用,此处不详细介绍,读者可以访问 https://github.com/hankcs/HanLP了解详情。本篇博客涵盖的内容包括:分词、统计词频、结果保存数据库。表结构和相关代码如下:
表名:relative_hotwords
表中文名:相关热词信息表
字段名称字段类型字段解释
keywordsvarchar(100)关键词
rh_timesint出现次数
rh_title_timesint在title中出现的次数
rh_keyword_tiemsint在keywords中出现的次数
rh_description_timesint在description中出现的次数
rh_other_timesint在网页其他地方出现的次数
rh_hot_scoreint词热度(百度指数)
rh_pc_scoreint词在PC端的热度(百度指数)
rh_wise_scoreint词在移动端的热度(百度指数)

建表语句:
Create table relative_hotwords(keywords varchar(100),rh_times int,rh_title_times int,
rh_keyword_tiems int,rh_description_times int, rh_other_times   int,rh_hot_score int, rh_pc_score int, rh_wise_score int) character set utf8mb4 collate utf8mb4_bin;


java代码:
/**
 * 分词
 */
public void segWordsAndSave(){
    Sort sort = new Sort();
    Sqlca sqlca = null;
    try {
        sqlca = sort.getSqlca();
        sqlca.execute("select web_html from web_detail limit 1220,5000");

        FileTool ft=new FileTool();
        int k=0;
        while (sqlca.next()){
            ft.saveRowToFile(sqlca.getString("web_html"),"C:\\temp\\hotwords\\t.txt");
            System.out.println(k++);
        }

        ComputeHis ch=new ComputeHis();
        ch.segFileWord("C:\\temp\\hotwords\\t.txt","C:\\temp\\hotwords\\t2.txt",0,0);
    }catch (Exception e){
        e.printStackTrace();
    } finally {
        if (sqlca != null) sqlca.closeAll();
    }

}

/**
     * 统计词频
     */
    public void wordCoutn(){
        List<String> ls=new ArrayList<>();
        NlpTool nt= new NlpTool();
        List<String> res=new ArrayList<>();
        FileTool ft=new FileTool();
        ComputeHis ch=new ComputeHis();
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\temp\\hotwords\\t2.txt"),"utf-8"));
            int x=0;
            String line=null;
            String content="";


            Map<String ,Integer> mp=new HashMap <String ,Integer> ();
            while ((line = reader.readLine()) != null) {
                x++;
                if(x%100000==0) {
                    System.out.println(x+"       "+new Date());
                }
                String[] words=line.split(" ");
                for(String word:words){
                    if(mp.containsKey(word)){
                        mp.put(word,mp.get(word) +1);
                    }else{
                        mp.put(word, 1);
                    }
                }
             }
            reader.close();

            Set<String> set=mp.keySet();
            java.util.SortedMap<String, String> topN = new java.util.TreeMap<String, String>();
            for(String key:set){
                topN.put((10000000 - mp.get(key))+"-"+key,"");
            }

            set=topN.keySet();
            System.out.println(set.size());
            int i=0;
            for(String key:set){
                String[] words=key.split("-");
                if(words==null){
                    continue;
                }
                if(words.length<2){
                    continue;
                }
                words[1]=words[1].replace("\r","").replace("\t","").replace("\n","");

                if(words[1]!=null&&!words[1].isEmpty()&&!ch.isStop(words[1])&&words[1].length()>1){
                    res.add(key);
                    i++;
                }
//                if(i>=20) break;
            }
            ft.saveListToFile("C:\\temp\\hotwords\\wdcount.txt",res);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

/**
     * 多线程解析html,抽取关键词信息
     * @param fileName
     */
    public void getKeyWordsFromHtml(String fileName){
        FileTool ft=new FileTool();
        Sort sort = new Sort();
        NlpTool nlpTool=new NlpTool();
        Sqlca sqlca = null;
        Sqlca sqlcah = null;
        try {
            sqlca = sort.getSqlca();
            sqlcah=sort.getSqlcaH();
            int webNums=0;
            //获得网页数量
            sqlca.execute("select count(*) ct from web_detail");
            if(sqlca.next()){
                webNums=sqlca.getInt("ct");
            }
            if(webNums==0){ //没有网页数据
                sqlca.closeAll();
                return;
            }
            System.out.println(webNums);
            for(int i=0;i<8;i++){
                String parm=fileName;
                int step=webNums/8;
                int begin=i*step;
                int end=(i+1)*step;
                if(end<webNums && end >(webNums - step)) end=webNums;
                parm+=","+begin+","+end;
//                System.out.println(parm);
                final ActorRef ta = system.actorOf(Props.create(AnalyseHtmlActor.class));
                ta.tell(parm, ActorRef.noSender());
                if(end>=webNums) break;
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(sqlca!=null) sqlca.closeAll();
            if(sqlcah!=null) sqlcah.closeAll();
        }
    }

0
1
分享到:
评论

相关推荐

    基于Java的jieba分词统计词频

    在本项目中,我们主要探讨如何使用Java编程语言结合jieba分词库来实现文本的分词处理,并统计出现频率最高的词汇。同时,这个过程还会涉及到数据库管理工具SQLyog的使用,以及Java中JDBC(Java Database ...

    Q.rar_python统计词频_分词_基于机器学习_词频 _词频统计

    接下来,我们要关注的是**基于机器学习的词频统计**。虽然简单的词频统计能提供基础的文本分析,但结合机器学习可以更深入地理解文本的语义和情感。例如,可以使用TF-IDF(Term Frequency-Inverse Document ...

    Python 分词,词频统计,寻找公共词

    ### Python 分词、词频统计及寻找公共词 #### 一、引言 在文本分析领域,分词、词频统计以及寻找公共词是常见且重要的任务。通过这些技术,可以更好地理解文本内容,提取关键词,进而应用于搜索引擎优化、情感分析...

    机器学习-高校舆情情感倾向分析-朴素贝叶斯法进行情感倾向分析

    4.先对五百多条数据进行人工标记作为训练集,再将所有数据都进行标记以便计算准确率,随后运行程序对所有数据进行贝叶斯情感倾向分析,根据分析结果和人工标记结果进行对比,计算准确率。 5.对实验方法进行分析和...

    python毕设设计-基于情感分析与词频的网络舆情分析+源代码+文档说明,数据来源知乎

    python毕设设计-基于情感分析与词频的网络舆情分析+源代码+文档说明 以知乎平台为数据来源,针对知乎文本与知乎评论的特点,实现基于情感词典的情感分析,包括情感倾向和情感波动程度。对于不同情感倾向的评论内容...

    词频计算,分词技术je-analysis.Net版本+代码.rar

    在实际应用中,词频计算和分词技术可以结合TF-IDF(词频-逆文档频率)算法来找出文档中的重要关键词,或者使用词云可视化工具展示文本数据的分布情况。分词技术也可以进一步用于命名实体识别、情感分析等复杂任务。...

    百度seo分词技术 seo seo优化 seo分词技术

    **四、SEO优化与分词的关系** 1. **关键词优化**:正确的分词有助于确保关键词被正确识别,提高页面相关性,有利于搜索引擎排名。 2. **避免关键词堆砌**:过度堆砌关键词会被视为作弊,合理的分词可以使关键词...

    Python项目案例开发从入门到实战源代码第18章 机器学习案例——基于朴素贝叶斯算法的文本分类.rar

    在本项目案例中,我们将深入探讨如何使用Python进行机器学习,特别是通过朴素贝叶斯算法进行文本分类。朴素贝叶斯算法是一种基于概率的分类方法,它在处理文本数据时表现出色,因为其简单且效率高。这个项目是Python...

    IkAnalyzer分词、词频、内链优化

    《IkAnalyzer分词、词频、内链优化详解》 在中文信息处理领域,分词是文本分析的基础,它能够将连续的汉字序列拆分成具有语义意义的词汇单元,为后续的文本挖掘、搜索引擎、信息检索等任务提供关键支持。IkAnalyzer...

    IKAnalyzer 实现分词 词频统计

    IKAnalyzer是一款开源的、基于Java语言的中文分词工具,主要应用于搜索引擎和文本分析领域。它是由北京大学信息科学技术学院自然语言处理实验室开发,旨在提供一个灵活、高效的中文分词解决方案。本教程将详细介绍...

    Feature Engineering for Machine Learning

    以上是《Feature Engineering for Machine Learning》一书中可能涉及的部分核心知识点,它们对于构建高效、准确的机器学习模型至关重要。通过深入理解和实践这些概念,数据科学家能够显著提升模型的预测性能。

    文本分类之词频统计(分词、词干提取、去停用词、计算词频,有界面)

    综上所述,实现"文本分类之词频统计(分词、词干提取、去停用词、计算词频,有界面)"涉及多个自然语言处理技术及编程技巧,包括分词技术的选择与应用、词干提取的理解与处理、停用词表的构建与使用,以及GUI界面的...

    汉语语料库分词类词频表-高频词汇.xls

    分类词频是文本分析中非常重要的内容。本资源把常用的分类词收集起来,方便大家在做文本分析时使用。有了本资源,大家可以提高文本分析的效率

    Machine Learning with Spark

    本书标题《Machine Learning with Spark》,即《Spark机器学习》, 主要讲述的是使用Spark构建可扩展的机器学习应用,以此来支持现代数据驱动型业务。本书深入探讨了Spark核心使用方法(Spark Core),Spark机器学习...

    词频统计pta中文分词、统计词频、比对文本相似度.zip

    中文分词、统计词频、比对文本相似度.zip中文分词、统计词频、比对文本相似度.zip中文分词、统计词频、比对文本相似度.zip中文分词、统计词频、比对文本相似度.zip中文分词、统计词频、比对文本相似度.zip中文分词、...

    英文分词统计词频

    英文分词与中文分词有所不同,因为英文单词之间通常由空格或标点符号隔开,而中文则需要通过复杂的算法来识别词的边界。本项目是一个小型的英文分词并统计词频的程序,它利用了Java这一强大且广泛使用的编程语言,...

    基于机器学习的文本分类技术研究.pdf

    "基于机器学习的文本分类技术研究.pdf" 机器学习在文本分类中的应用 机器学习是近年来最热门的技术之一,它在文本分类领域中的应用也日益广泛。本文主要研究基于机器学习的文本分类技术,它可以自动对文本进行分类...

    20240909-110253 python 应用题 词频统计画圆

    20240909-110253 python 应用题 词频统计画圆

Global site tag (gtag.js) - Google Analytics