使用LUCENE快速实现属于自己的英文分词程序——附简单实现

来源:互联网 发布:linux怎么上传文件 编辑:程序博客网 时间:2024/04/24 14:18

简单的英文分词程序现在已经有很多现成的JAR包实现了此功能,最流行的就是LUCENE里的analysis包,analysis包里包含许多类型的分词器、过滤器、分析器,可以让我们自由组合实现我们需要的功能。

 

使用LUCENE的analysis包,可以快速实现按照字符分割的英文分词,附带过滤停用词功能的分词器(有默认的停用词表,也可以自己指定,指定方式有多种:包括停用词表的文本文档;把停用词加载到容器集合里面等等),词干提取分词器(就是分词器附带stemming功能)等等。

 

以下是我简单实现附带过滤停用词功能的分词器的代码,使用是LUCENE 2.4.0版本实现的。

 

   
    public static ArrayList tokenizer() { 
        ArrayList wordList = new ArrayList();
        try {   
            //stopwords = new File((new File("")).getCanonicalPath()+"/stop_words_eng.txt");           
           // Analyzer textAnalyzer = new StandardAnalyzer(stopwords);
            Analyzer textAnalyzer = new StandardAnalyzer(nonStopwords);           
            TokenStream stream = textAnalyzer.tokenStream("content", new StringReader(EnglishTextStandardAnalyzer.text));
            while (true) {
                Token item = stream.next(new Token());
                if (item == null) {
                    break;
                }
               // System.out.print("{" + item.term() + "} ");              
                Iterator I = wordList.iterator();
                boolean flag = false;
                while(I.hasNext()) {
                    Word word = (Word)I.next();
                    if(word.getWordText().equalsIgnoreCase(item.term())) {
                        flag = true;
                        word.addWordFrequency();
                        break;
                    }
                }
                if(!flag) {                   
                    Word temp = new Word(item.term());
                    wordList.add(temp);
                }
            }
        } catch (IOException ex) {
            Logger.getLogger(EnglishTextStandardAnalyzer.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println("segmentation successes!!");
        return wordList;
    }
 

 

程序返回英文文本所包含的单词对象,其属性包括单词内容以及其词频

原创粉丝点击