zoukankan      html  css  js  c++  java
  • springboot+Mybatis+Websocket(Kbase项目)

    前言:最近由于Java开发小组内人手不够,被放进了这个小组。于是乎,走上了工程型开发的道路。嗯,道阻且长,道阻且长。

    现整理归纳一下开发心得(温和、虔诚、坚持)和技术收获:

    一:批量读写数据(mapper 和 xml文件之间的配合)

    DimValXXX这个是我的自定义实体类名。现需要将其批量的数据写入数据库,mapper文件如下:

    boolean batchInsertDimValTag(@Param(value="list") List<DimValTagNewQaDB> list);

     xml文件如下:

    <insert id="batchInsertDimValTag">
            insert all
            <foreach collection="list" item="item" separator="" open=""  close="" index="i">
                into dim_val_tag_new_QA(dim_value_id,dim_tag_id,v) values (#{item.dim_value_id},#{item.dim_tag_id},#{item.v})
            </foreach>
            select 1 from dual
    </insert>

     二:数据库的左连接右连接。(这个之前专门写过介绍SQL的帖子。)

    三:Hanlp分词与词频统计,以及可以替换自定义用户词典。

    其中content表示待分词的文本字符串,topNum表示期望输出的前X个高频词语。

    public List segment(String content, int topNum) {
    String filterStr = "`~!@#$^&*()=|{}':;',\[\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、? ";
    System.out.println("首次编译运行时,HanLP会自动构建词典缓存,请稍候…… ");
    //第一次运行会有文件找不到的错误但不影响运行,缓存完成后就不会再有了
    System.out.println("标准分词:");
    System.out.println(" ");
    //Map<String, WordLabe> extractLabelMap = new HashMap<String, WordLabe>(16);
    Map<String ,Integer> word_Fren = new HashMap<String, Integer>(16);

    List<Term> termList = HanLP.segment(content);

    List<String> list = termList.stream().map(a -> a.word).filter(s -> !filterStr.contains(s)).collect(Collectors.toList());

    //计算词频并封装在ExtractLaabelDto
    for (String word : list){
    if(word == null || word.equals("null")){
    continue;
    }
    //判断不存在则新增(去重)
    if(word_Fren.get(word) == null){
    //计算获取词频(获取Word在list中重复的次数)
    // int count = Collections.frequency(list,word);
    word_Fren.put(word, 1);
    }
    else{
    int count = word_Fren.get(word);
    word_Fren.put(word,count+1);
    }
    }

    System.out.println("统计完词频的结果:");
    System.out.println(word_Fren);
    //map转list
    List<Map.Entry<String,Integer>> word_Fren_list = new ArrayList<>(word_Fren.entrySet());
    System.out.println("转化为list之后的结果:");
    System.out.println(word_Fren_list);

    //对list进行排序,并通过Comparator传入自定义的排序规则
    Collections.sort(word_Fren_list,new Comparator<Map.Entry<String, Integer>>() {
    @Override
    public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
    return o2.getValue().compareTo(o1.getValue()); //重写排序规则,降序排列。o1和o2替换位置的话,为升序排列。
    }
    });
    System.out.println("排序之后的结果:");
    System.out.println(word_Fren_list);
    List<String> result = new ArrayList<String>();
    int size = word_Fren_list.size()-1;
    //输出前topNum个词语。
    for(int i=0;i<=topNum;i++){
    String key = word_Fren_list.get(i).getKey();
    result.add(key);
    }
    return result;
    }
  • 相关阅读:
    ADO.NET中DataSet的应用(读书笔记5)
    ADO.NET中DataTable的应用(读书笔记4)
    如何在前端界面操作数据表(读书笔记3)
    如何在各类空间中输入输出数据(读书笔记2)
    关于利用input的file属性在页面添加图片的问题
    本地存储
    react
    微信开发
    node
    SVN和GIT
  • 原文地址:https://www.cnblogs.com/maowuyu-xb/p/13402377.html
Copyright © 2011-2022 走看看