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.Net+盘古分词 实现搜索 Quartz.Net(定时任务) 实现热词统计

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

Lucene中文分词mmseg4j

mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法实现的中文分词器,并实现 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene...

Lucene分词与查询

package com.demo.ajax; public class Building { private Integer id; private String name; ...
  • sbvfhp
  • sbvfhp
  • 2011-10-19 17:29
  • 3212

用于Lucene的各中文分词比较

用于Lucene的各中文分词比较 作者: Claymore 时间: 2011-09-09 17:53:26 Arial Tahoma Verdana 宋体 楷体  字体减小 字体加大 ...

Lucene—IKAnalyzer分词器配置扩充词典

一.IKAnalyzer包 Ik分词器下载地址:点击打开链接 解压之后将IKAnalyzer包加入到自己的工程. 二.IK分词独立使用 (1)程序目录结构   (2)示例程序:IKAnalyzerT...
  • csmnjk
  • csmnjk
  • 2016-06-29 13:28
  • 1713

lucene之 MMAnalyzer 中文分词组件

支持英文、数字、中文(简体)混合分词 常用的数量和人名的匹配 超过22万词的词库整理 实现正向最大匹配算法 //采用正向最大匹配的中文分词算法,相当于分词粒度等于0 MMAna...

Lucene4.3开发之中文分词器

对于Lucene4.3开发首先摆在我们面前的第一个必须要解决的问题,就是关于中文分词的问题,因为Lucene毕竟是国外的大牛们开发的,显然会比较侧重英文文章,不过还好,在Lucene的下载包里同步了S...

Lucene的分词器Analyzer

1、抽象类Analyzer 其主要包含两个接口,用于生成TokenStream: TokenStream tokenStream(String fieldName, Reader read...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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