Wvtool学习(三):实现wvtool停词过滤的功能

已经分好词的文本中还有许多与我们需要无关的词,这就需要我们进行停词过滤了,而wvtool已经实现了这样的功能! 废话不多说,上代码吧:

 

  
  
  
  
  1. import java.io.BufferedReader;  
  2. import java.io.File;  
  3. import java.io.FileInputStream;  
  4. import java.io.FileReader;  
  5. import java.io.InputStream;  
  6. import java.io.InputStreamReader;  
  7. import java.io.Reader;  
  8. import java.io.StringReader;  
  9.  
  10. import edu.udo.cs.wvtool.config.WVTConfiguration;  
  11. import edu.udo.cs.wvtool.generic.inputfilter.SelectingInputFilter;  
  12. import edu.udo.cs.wvtool.generic.loader.UniversalLoader;  
  13. import edu.udo.cs.wvtool.generic.tokenizer.NGramTokenizer;  
  14. import edu.udo.cs.wvtool.generic.tokenizer.SimpleTokenizer;  
  15. import edu.udo.cs.wvtool.generic.wordfilter.StopWordFilterFile;  
  16. import edu.udo.cs.wvtool.main.WVTDocumentInfo;  
  17. import edu.udo.cs.wvtool.util.TokenEnumeration;  
  18.  
  19. /*  
  20.  * 这个程序实现把html文档解码成纯文本的形式  
  21.  * 原html文档:text.html  
  22.  * 内容:  
  23. <html>  
  24.     <head>  
  25.         <title>雅虎新闻  
  26.         </title>  
  27.     </head>  
  28.     <body>  
  29.         这是测试文档。  
  30.     </body>  
  31. </html>  
  32.  * */ 
  33.  
  34. public class Demo01_1 {  
  35.     public static String pathString="D:\\工作管理\\weka学习\\wvtool-1.1\\wvtool-1.1\\examples\\data\\";  
  36.     public static void main(String[] args) throws Exception {  
  37.         /*  
  38.          * 1、实例化一个加载器  
  39.          * */ 
  40.         UniversalLoader loader=new UniversalLoader();  
  41.         /*  
  42.          * 2、实例化一个文档信息类  
  43.          * */ 
  44.         WVTDocumentInfo info=new WVTDocumentInfo(pathString+"text.html""html""utf-8""chinese");  
  45.         /*  
  46.          * 3、把文档以输入流的方式加载到内存中  
  47.          * */ 
  48.         InputStream stream=loader.loadDocument(info);  
  49.         /*  
  50.          * 4、实例化一个过滤器  
  51.          * InputFilter that automatically selects an appropriate filter   
  52.          * according to the the file ending. The following rules are used.  
  53.          * HTM, HTML, htm, html -> SimpleTagIgnoringReader  
  54.          *XML, xml -> XMLInputFilter  
  55.          *PDF, pdf -> PDFInputFilter  
  56.          *all other -> TextInputFilter  
  57.          * */ 
  58.         SelectingInputFilter filter=new SelectingInputFilter();  
  59.         /*  
  60.          * 5、把html文档进行解码成纯文本文件  
  61.          * */ 
  62.         Reader readers=filter.convertToPlainText(stream,info);  
  63.          /*  
  64.           * 6、将解码的文档输出  
  65.           * */ 
  66.         BufferedReader reader=new BufferedReader(readers);  
  67.           
  68.         String string=reader.readLine().toString();  
  69.          //由于解码出来的文档中包含了大量的空格,而且奇怪的是这些  
  70.          //空格的char值是9(十进制),所以就只能以这样的方式输出了  
  71.         string=string.replace(string.valueOf((char)9), "");  
  72.         //这里需要把string重新包装成Reader  
  73.         Reader reader2=new StringReader(string);  
  74. //      System.out.println(string);  
  75.         /*  
  76.          * 7、分词  
  77.          * 我个人觉得这个分词其实很弱,好像只是依据你所设定的规则把句子断开,而不是真正意义上的分词  
  78.          * */ 
  79.         NGramTokenizer tokenizer=new NGramTokenizer(1,new SimpleTokenizer());  
  80.     //  NGramTokenizer tokenizer=new NGramTokenizer(2,new SimpleTokenizer());  
  81.       
  82.         TokenEnumeration enumeration=tokenizer.tokenize(reader2, info);  
  83.           
  84. //      while(enumeration.hasMoreTokens()){  
  85. //          System.out.print(enumeration.nextToken()+"|");  
  86. //      }  
  87.         File file=new File(pathString+"ext_stopword.dic");  
  88.           
  89.         //对于中文时常会出现的乱码问题,解决的方法就是下面的代码  
  90.         /*  
  91.          * 对于词典文件的编码方式明确指定即可,不然 无法实现过滤的功能  
  92.          * */ 
  93.         Reader reader3=new InputStreamReader(new FileInputStream(file),"unicode");  
  94.         //  
  95.           
  96.           
  97.         /*  
  98.          * 8、停词过滤  
  99.          * 由于wvtool并不支持直接的中文停词,所以需要从外部文件中加载进来,  
  100.          * 只是加载的词典有这样的约束:每个词必须单独一行  
  101.          * 我从网上下载到的IK_Analyzer中找到了这样的一个停词词典:  
  102. 文件名:ext_stopword.dic  
  103.  
  104.  
  105.  
  106.  
  107.  
  108. 使  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135. 于是呢就想着用这个词典过滤一下吧!  
  136. 但是由于以前分成的词都是两个一组的,为了测试,先分成单字词吧:  
  137. 把这句代码:NGramTokenizer tokenizer=new NGramTokenizer(2,new SimpleTokenizer());  
  138. 中的2换成1就可以了  
  139.          * */ 
  140.         StopWordFilterFile filter1=new StopWordFilterFile(1, reader3);  
  141.           
  142.         TokenEnumeration enumeration2=filter1.filter(enumeration, info);  
  143.          //输出结果  
  144.         while(enumeration2.hasMoreTokens()){  
  145.             System.out.print(enumeration2.nextToken()+"/");  
  146.         }  
  147.         System.out.println();  
  148.         //结果为:雅/虎/新/闻/这/测/试/文/档/    
  149.         /*  
  150.          * 如果细心,就可以发现 “是” 字已经没有了! 实现更多的过滤,  
  151.          * 只需要把需要过滤的词加入词典文件就可以了  
  152.          * */ 
  153.     }  
  154. }  

弄了这么久,终于可以慢慢深入进去了!

你可能感兴趣的:(职场,休闲,停词过滤,wvtool)