前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用lucene分词

使用lucene分词

作者头像
allsmallpig
发布2021-02-25 10:28:38
6560
发布2021-02-25 10:28:38
举报
文章被收录于专栏:allsmallpi博客
代码语言:javascript
复制
            org.apache.lucene
            lucene-core
            3.6.2
        
        
            org.apache.lucene
            lucene-memory
            3.6.2
        
        
            org.apache.lucene
            lucene-highlighter
            3.6.2
        
        
            org.apache.lucene
            lucene-analyzers
            3.6.2
        
        
            lucene
            ikanalyzer
            2012

首先使用maven引入jar

下面是java代码

代码语言:javascript
复制
package com.os.core.util.lucene;

import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.wltea.analyzer.lucene.IKAnalyzer;

/**
 * Created by PengSongHe on 2016/11/29.
 */
public class WordUtil {
    /** 测试文章 */
    static String keyWord = "人生小孩若能永远像两三岁小孩,本来没有责任,那就本来没有苦。到了长成,责任自然压在你的肩头上,如何能躲?不过有大小的分别罢了。尽得大的责任,就得大快乐;尽得小的责任,就得小快乐。你若是要躲,倒是自投苦海,永远不能解除了。";
    /** 获取关键字个数 */
    private final static Integer NUM=10;
    /** 截取关键字在几个单词以上的数量 */
    private final static Integer QUANTITY=1;

    /**
     * 传入String类型的文章,智能提取单词放入list中
     * @param article
     * @param a
     * @return
     * @throws IOException
     */
    private static List extract(String article,Integer a) throws IOException {
        List list =new ArrayList();         //定义一个list来接收将要截取出来单词
        IKAnalyzer analyzer = new IKAnalyzer();             //初始化IKAnalyzer
        analyzer.setUseSmart(true);                         //将IKAnalyzer设置成智能截取
        TokenStream tokenStream=                            //调用tokenStream方法(读取文章的字符流)
                analyzer.tokenStream("", new StringReader(article));
        while (tokenStream.incrementToken()) {              //循环获得截取出来的单词
            CharTermAttribute charTermAttribute =           //转换为char类型
                    tokenStream.getAttribute(CharTermAttribute.class);
            String keWord= charTermAttribute.toString();    //转换为String类型
            if (keWord.length()>a) {                     //判断截取关键字在几个单词以上的数量(默认为2个单词以上)
                list.add(keWord);                           //将最终获得的单词放入list集合中
            }
        }
        return list;
    }

    /**
     * 将list中的集合转换成Map中的key,value为数量默认为1
     * @param list
     * @return
     */
    private static Map list2Map(List list){
        Map map=new HashMap();
        for(String key:list){                      //循环获得的List集合
            if (list.contains(key)) {              //判断这个集合中是否存在该字符串
                map.put(key, map.get(key) == null ? 1 : map.get(key)+1);
            }                                       //将集中获得的字符串放在map的key键上
        }                                          //并计算其value是否有值,如有则+1操作
        return map;
    }

    /**
     * 提取关键字方法
     * @param article
     * @param a
     * @param n
     * @return
     * @throws IOException
     */
    public static String[] getKeyWords(String article,Integer a,Integer n) throws IOException {

        List keyWordsList= extract(article,a);            //调用提取单词方法
        Map map=list2Map(keyWordsList);      //list转map并计次数
        //使用Collections的比较方法进行对map中value的排序
        ArrayList> list = new ArrayList>(map.entrySet());
        Collections.sort(list, new Comparator>() {
            public int compare(Map.Entry o1, Map.Entry o2) {
                return (o2.getValue() - o1.getValue());
            }
        });
        if (list.size()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/01/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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