关闭

Lucene 分词 统计分词次数

标签: Lucene 分词 统计分词数量lucene根据分词数目不同存入不同文件
127人阅读 评论(0) 收藏 举报
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("");

        }
    }
}
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:408次
    • 积分:53
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档