Lucene 分词 统计分词次数

原创 2016年05月31日 11:44:46
package testSolrJ;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;

/**
 *
 * @author Administrator
 */
public class fenci {
    static String fileName = null;
    static String pathRead = null;
    static String pathWrite = null;

    private static IndexWriter indexDir = null;

    private Version luceneVersion = Version.LUCENE_40;

    public static void main(String[] args) throws Exception {
        fileName = "ADOSM4量表_DataDictionary_redcap2016";
        // final boolean write(final String file, final String content) {
        // return write(file, content, "UTF-8");
        // }
        // 1.创建Directroy
        // 2.创建IndexWriter
        IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_40, new StandardAnalyzer(Version.LUCENE_40));
        IndexWriter writer = null;
        try {
            // 创建索引在硬盘上
            Directory directory = FSDirectory.open(new File("E:/Users"));
            writer = new IndexWriter(directory, iwc);

            // 3.创建Document文档
            Document doc = null;
            BufferedReader reader = null;
            // StringBuilder fileContent = new StringBuilder();
            // 4.涓篋ocument娣诲姞Field
            File f = new File("E:/text");
            for (File file : f.listFiles()) {
                doc = new Document();
                // String context=FileUtils.getFileContent(file);
                doc.add(new Field("content", new FileReader(file)));

                doc.add(new Field("filename", file.getName(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                // 5

                writer.addDocument(doc);
            }
        } catch (CorruptIndexException e) {
            e.printStackTrace();
        } catch (LockObtainFailedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (CorruptIndexException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        Analyzer ik = new IKAnalyzer();
        String context = FileUtil.readTxtFile("E:/testSolrJ/自闭症/" + fileName + ".txt");

        //
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < 10; i++) {
            sb.append(context);
        }
        // 分词
        testAanlyzer(ik, context);
    }

    // private static Directory FSDirectory() {
    // // TODO Auto-generated method stub
    // return null;
    // }
    public static List<String> testAanlyzer(Analyzer analyzer, String text) throws Exception {

        HashMap<String, Integer> anlyzerOut = new HashMap<String, Integer>();
        long start = System.currentTimeMillis();
        TokenStream ts = analyzer.tokenStream("content", new StringReader(text));
        CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);
        System.out.println("分词效果如下:");
        List<String> list = new ArrayList<String>();
        int i = 0;
        while (ts.incrementToken()) {
            i++;

            String newString = new String(term.buffer(), 0, term.length());
            // System.out.println(newString);
            list.add(newString);
            if (anlyzerOut.get(newString) == null) {
                anlyzerOut.put(newString, 1);
            } else {
                anlyzerOut.put(newString, 1 + anlyzerOut.get(newString));
            }
        }
        long usetime = System.currentTimeMillis() - start;
        System.out.println("分词数量" + i + ",分词时间" + usetime + "毫秒");
        // File outFile = new File("E:/" + fileName + ".csv");
        hash2file(anlyzerOut, "E:/自闭症/" + fileName, ".csv");
        return list;
    }

    public static void hash2file(HashMap<String, Integer> anlyzerOut, String fileName, String fileExt) throws IOException {
        HashMap<Integer, String> fileNameHash = new HashMap<Integer, String>();
        HashMap<Integer, StringBuilder> outStringList = new HashMap<>();

        for (String key : anlyzerOut.keySet()) {
            if (outStringList.get(key.length()) == null) {
                outStringList.put(key.length(), new StringBuilder());
                fileNameHash.put(key.length(), fileName + "_" + key.length() + fileExt);
            }
            StringBuilder outString = outStringList.get(key.length());
            outString.append(key);
            outString.append(",");
            outString.append(anlyzerOut.get(key));
            outString.append("\r\n");
        }

        for (Integer key : outStringList.keySet()) {
            FileUtils.write(new File(fileNameHash.get(key)), outStringList.get(key));
        }

    }

    public static void Hebing(String name) {
        {
            File f = new File("");

        }
    }
}

基于LUCENE的java词频统计

package demo.analysis; import java.io.BufferedReader; import java.io.File; import java.io.FileInputS...

Lucene.Net+盘古分词 实现搜索 Quartz.Net(定时任务) 实现热词统计

一 :Lucene.Net  +盘古分词 实现搜索功能    1 、Lucene.Net的配置:         引入相关dll文件 ( Lucene.Net、log4net、PanGu、PanG...

Lucene的中文分词器IKAnalyzer

分词器对英文的支持是非常好的。   一般分词经过的流程:   1)切分关键词   2)去除停用词   3)把英文单词转为小写   但是老外写的分词器对中文分词一般都是单字...

Lucene分词原理与方式

-------------------------------------------------------- lucene的分词_分词器的原理讲解 --------------------...

自定义lucene的同义词分词器

1.自定义分词器首先要了解Analyzer、Tokenizer和TokenFilter三者之间的联系Analyzer包含两个核心组件,Tokenizer以及TokenFilter。两者的区别在于,前者...

Lucene7.0与HanLP分词器整合索引数据库建立索引文件

HanLP官网:http://hanlp.linrunsoft.com/ GitHup地址:https://github.com/hankcs/HanLP HanLP插件地址:https://gi...

lucene---中文分词IKAnalyzer和高亮highlighter的使用

最近lucene已经更新到lucene 3.0版本了 2.X版本的一些用法已经彻底不在支持了。  下面的例子主要是介绍中文分词器IKAnalyzer的使用和Lucene高亮显示。  lucene ...

Lucene分词器及高亮

分词器 在lucene中我们按照分词方式把文档进行索引,不同的分词器索引的效果不太一样,之前的例子使用的都是标准分词器,对于英文的效果很好,但是中文分词效果就不怎么样,他会按照汉字的字直接分词,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Lucene 分词 统计分词次数
举报原因:
原因补充:

(最多只允许输入30个字)