• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
              C++博客 :: 首頁 :: 新隨筆 ::  ::  :: 管理
            1. 常見的中文分詞器有:極易分詞的(MMAnalyzer) 、"庖丁分詞"分詞器(PaodingAnalzyer)、IKAnalyzer 等等。其中 MMAnalyzer 和 PaodingAnalzyer 不支持 lucene3.0及以后版本。

               使用方式都類似,在構(gòu)建分詞器時(shí)

                 Analyzer analyzer 
            = new [My]Analyzer(); 

                 

            2. 這里只示例 IKAnalyzer,目前只有它支持Lucene3.0 以后的版本。 

               首先需要導(dǎo)入 IKAnalyzer3.
            2.0Stable.jar 包

             

            3. 示例代碼

                 view plaincopy to clipboardprint
            ?
            public class AnalyzerTest {   
                   @Test  
                   
            public void test() throws Exception {   
                          String text 
            = "An IndexWriter creates and maintains an index.";   
                          
            /* 標(biāo)準(zhǔn)分詞器:單子分詞 */  
                          Analyzer analyzer 
            = new StandardAnalyzer(Version.LUCENE_30);   
                          testAnalyzer(analyzer, text);   
                
                          String text2 
            = "測試中文環(huán)境下的信息檢索";   
                          testAnalyzer(
            new IKAnalyzer(), text2); // 使用IKAnalyzer,詞庫分詞   
                   }
               
                
                   
            /**  
                    * 使用指定的分詞器對(duì)指定的文本進(jìn)行分詞,并打印結(jié)果  
                    *  
                    * 
            @param analyzer  
                    * 
            @param text  
                    * 
            @throws Exception  
                    
            */
              
                   
            private void testAnalyzer(Analyzer analyzer, String text) throws Exception {   
                          System.out.println(
            "當(dāng)前使用的分詞器:" + analyzer.getClass());   
                
                          TokenStream tokenStream 
            = analyzer.tokenStream("content"new StringReader(text));   
                          tokenStream.addAttribute(TermAttribute.
            class);   
                
                          
            while (tokenStream.incrementToken()) {   
                                 TermAttribute termAttribute 
            = tokenStream.getAttribute(TermAttribute.class);   
                                 System.out.println(termAttribute.term());   
                          }
               
                   }
               
            }
               
               
            public class AnalyzerTest {
                   @Test
                   
            public void test() throws Exception {
                          String text 
            = "An IndexWriter creates and maintains an index.";
                          
            /* 標(biāo)準(zhǔn)分詞器:單子分詞 */
                          Analyzer analyzer 
            = new StandardAnalyzer(Version.LUCENE_30);
                          testAnalyzer(analyzer, text);
             
                          String text2 
            = "測試中文環(huán)境下的信息檢索";
                          testAnalyzer(
            new IKAnalyzer(), text2); // 使用IKAnalyzer,詞庫分詞
                   }

             
                   
            /**
                    * 使用指定的分詞器對(duì)指定的文本進(jìn)行分詞,并打印結(jié)果
                    *
                    * 
            @param analyzer
                    * 
            @param text
                    * 
            @throws Exception
                    
            */

                   
            private void testAnalyzer(Analyzer analyzer, String text) throws Exception {
                          System.out.println(
            "當(dāng)前使用的分詞器:" + analyzer.getClass());
             
                          TokenStream tokenStream 
            = analyzer.tokenStream("content"new StringReader(text));
                          tokenStream.addAttribute(TermAttribute.
            class);
             
                          
            while (tokenStream.incrementToken()) {
                                 TermAttribute termAttribute 
            = tokenStream.getAttribute(TermAttribute.class);
                                 System.out.println(termAttribute.term());
                          }

                   }

            }

              

            3. 如何擴(kuò)展詞庫:很多情況下,我們可能需要定制自己的詞庫,例如 XXX 公司,我們希望這能被分詞器識(shí)別,并拆分成一個(gè)詞。

               IKAnalyzer 可以很方便的實(shí)現(xiàn)我們的這種需求。

               新建 IKAnalyzer.cfg.xml

                 view plaincopy to clipboardprint
            ?
            <?xml version="1.0" encoding="UTF-8"?>  
            <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">    
            <properties>    
                   
            <!-- 1,文件要是 UTF-8 編碼。2,一行寫一個(gè)詞 -->  
                   
            <!--用戶可以在這里配置自己的擴(kuò)展字典-->  
                   
            <entry key="ext_dict">/mydict.dic</entry>  
            </properties>  
            <?xml version="1.0" encoding="UTF-8"?>
            <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> 
            <properties> 
                   
            <!-- 1,文件要是 UTF-8 編碼。2,一行寫一個(gè)詞 -->
                   
            <!--用戶可以在這里配置自己的擴(kuò)展字典-->
                   
            <entry key="ext_dict">/mydict.dic</entry>
            </properties> 

                   

                   解析:

                           
            <entry key="ext_dict">/mydict.dic</entry> 擴(kuò)展了一個(gè)自己的詞典,名字叫 mydict.dic

                           因此我們要建一個(gè)文本文件,名為:mydict.dic  (此處使用的 .dic 并非必須)

                           在這個(gè)文本文件里寫入:

                                北京XXXX科技有限公司

                           這樣就添加了一個(gè)詞匯。

                           如果要添加多個(gè),則新起一行:

                                詞匯一

                                詞匯二

                                詞匯三

                                

                           需要注意的是,這個(gè)文件一定要使用 UTF
            -8編碼

             

            4. 停用詞:

                有些詞在文本中出現(xiàn)的頻率非常高,但是對(duì)文本所攜帶的信息基本不產(chǎn)生影響,例如英文的
            "a、an、the、of",或中文的"的、了、著",以及各種標(biāo)點(diǎn)符號(hào)等,這樣的詞稱為停用詞(stop word)。

                文本經(jīng)過分詞之后,停用詞通常被過濾掉,不會(huì)被進(jìn)行索引。在檢索的時(shí)候,用戶的查詢中如果含有停用詞,檢索系統(tǒng)也會(huì)將其過濾掉(因?yàn)橛脩糨斎氲牟樵冏址惨M(jìn)行分詞處理)。

                排除停用詞可以加快建立索引的速度,減小索引庫文件的大小。

                IKAnalyzer 中自定義停用詞也非常方便,和配置 
            "擴(kuò)展詞庫" 操作類型,只需要在 IKAnalyzer.cfg.xml 加入如下配置:

                   
            <entry key="ext_stopwords">/ext_stopword.dic</entry> 

                   同樣這個(gè)配置也指向了一個(gè)文本文件 
            /ext_stopword.dic (后綴名任意),格式如下:

                       也

                      了

                      仍

                      從

                      



            本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http:
            //blog.csdn.net/wenlin56/archive/2010/12/13/6074124.aspx

            Feedback

            # re: Lucene入門級(jí)筆記五 -- 分詞器,使用中文分詞器,擴(kuò)展詞庫,停用詞  回復(fù)  更多評(píng)論   

            2016-07-05 20:08 by 回家看回家看
            54544554
            91精品国产91久久久久福利| 亚洲国产成人久久综合一| 中文精品久久久久国产网址| 久久亚洲AV成人无码电影| 亚洲国产成人精品女人久久久 | 久久人人爽人人爽人人片AV东京热| 99国产精品久久久久久久成人热| 综合人妻久久一区二区精品| 九九精品久久久久久噜噜| 久久人人爽人人澡人人高潮AV | 免费一级做a爰片久久毛片潮 | 久久综合狠狠综合久久97色| 精品免费久久久久国产一区| 国产精品成人久久久久三级午夜电影| 欧美亚洲国产精品久久蜜芽| 日本一区精品久久久久影院| 亚洲国产成人久久综合碰碰动漫3d| 香蕉久久夜色精品国产小说| 久久www免费人成精品香蕉| 久久久久国产一区二区三区| 亚洲一区精品伊人久久伊人| 亚洲欧美成人久久综合中文网 | 久久午夜福利电影| 久久只这里是精品66| 性做久久久久久久| 久久国产高清字幕中文| 国产精品99久久久久久猫咪| 无码8090精品久久一区| 无码人妻精品一区二区三区久久久| 嫩草伊人久久精品少妇AV| 精品999久久久久久中文字幕| 久久精品一区二区影院| 2021国内精品久久久久久影院| 人妻丰满AV无码久久不卡| 婷婷综合久久狠狠色99h| 合区精品久久久中文字幕一区 | 久久精品国产亚洲av高清漫画| 久久最近最新中文字幕大全| 伊人久久大香线蕉AV一区二区| 国产精品禁18久久久夂久 | 一本久久综合亚洲鲁鲁五月天|