做中文文本聚类,研究中科院的imdict-chinese-analyzer分词器时,我自己加载的停用词表一直都跑不出正确的结果,于是,就追踪lucene是怎么加载自己的停用词表的。在源代码的WordListLoader.java类中,发现了这样的代码:

  1. public static HashSet getWordSet(Reader reader) throws IOException {
  2. HashSet result = new HashSet();
  3. BufferedReader br = null;
  4. try {
  5. if (reader instanceof BufferedReader) {
  6. br = (BufferedReader) reader;
  7. } else {
  8. br = new BufferedReader(reader);
  9. }
  10. String word = null;
  11. while ((word = br.readLine()) != null) {
  12. result.add(word.trim());
  13. }
  14. }
  15. finally {
  16. if (br != null)
  17. br.close();
  18. }
  19. return result;
  20. }

问题就变得清晰了,于是我在这行代码中加入了输出语句,把从文件中加载进去的停用词打印出来。这样,就找到了问题的根源了:停用词表的编码格式问题(我设置的编码格式为:Unicode)

把研究的结果总结如下:

1、Lucene支持的停用词表文件有utf-8.

2、停用词表的格式很简单:每词一行.

3、Luence中支持停用词的方式有5种(见org.apache.lucene.analysis.StopAnalyzer.java类的5种构造方法):StopAnalyzer.java类默认停用词,以String[]传入,以Set传入,以File传入,以Reader传入

4、  关于停用词处理的参考代码如下:

  1. package com.xh.TextClustering;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.io.StringReader;
  5. import org.apache.lucene.analysis.Analyzer;
  6. import org.apache.lucene.analysis.Token;
  7. import org.apache.lucene.analysis.TokenStream;
  8. import org.apache.lucene.index.CorruptIndexException;
  9. import org.apache.lucene.store.LockObtainFailedException;
  10. public class StopAnalyzerTestChinese
  11. {
  12. static  String  source="我 是 中国人。";
  13. public static void main(String args[])
  14. {
  15. Indexer();
  16. }
  17. private static void Indexer()
  18. {
  19. //Analyzer analyzer=new StopAnalyzer();
  20. try {
  21. Analyzer analyzer=new StopAnalyzer(new File("chinese_stopword.dic"));
  22. //          IndexWriter writer=new IndexWriter(IndexPath,analyzer,true,MaxFieldLength.UNLIMITED);
  23. //          Document document=new Document();
  24. //          Field field_content=new Field("content",source,Field.Store.YES,Field.Index.ANALYZED);
  25. //          document.add(field_content);
  26. //          ArrayList ItemList=new ArrayList();
  27. TokenStream stream=analyzer.tokenStream("content", new StringReader(source));
  28. while(true)
  29. {
  30. Token item=stream.next();
  31. if(null==item)break;
  32. System.out.println("{"+item.termText()+"}");
  33. }
  34. //          writer.optimize();
  35. //          writer.close();
  36. } catch (CorruptIndexException e) {
  37. e.printStackTrace();
  38. } catch (LockObtainFailedException e) {
  39. e.printStackTrace();
  40. } catch (IOException e) {
  41. e.printStackTrace();
  42. }
  43. }
  44. }

注:参考中文停用词表在附件中。

Lucene学习之——停用词相关推荐

  1. NLP深入学习——过滤停用词(Filtering stop words)

    文章目录 返回主目录 过滤停用词(Filtering stop words) Stemming操作 返回主目录 这是一个系列的文章,点击返回综合目录页 过滤停用词(Filtering stop wor ...

  2. Lucene的Smart CN实现分词、停用词、扩展词

    Lucene 中提供了 SmartCN 为中文提供分词功能,实际应用中还会涉及到停用词.扩展词(特殊词.专业词)等,因此本文将聚焦在 SmartCN 而暂时不考虑其他中文分词类库. 1 简介 anal ...

  3. 如何在Hibernate Search 5.5.2 / Apache Lucene 5.4.x中处理停用词?

    停用词,例如[" a"," an"," and"," are"," as"," at&qu ...

  4. Lucene分词器,使用中文分词器,扩展词库,停用词

    2019独角兽企业重金招聘Python工程师标准>>> Lucene分词器,使用中文分词器,扩展词库,停用词 博客分类: 搜索引擎,爬虫 停止词:lucene的停止词是无功能意义的词 ...

  5. elasticSearch学习笔记04-同义词,停用词,拼音,高亮,拼写纠错

    由于elasticSearch版本更新频繁,此笔记适用ES版本为 7.10.2 此笔记摘录自<Elasticsearch搜索引擎构建入门与实战>第一版 文中涉及代码适用于kibana开发工 ...

  6. 【NLP学习笔记】停用词(stop words)

    此坑待填 停用词 1 定义 2 介绍 3 功能 4 种类 5 引用 1 定义 2 介绍 3 功能 4 种类 5 引用 [1] 停用词 [2] 自然语言处理-停用词 [3] Github-stopwor ...

  7. Lucene学习笔记(1)

    Lucene学习笔记 可以搜索文本文件,理论上可以搜索任何类型的数据.只要先把数据转化为文本,就可以对数据进行索引和搜索. 使用了反向索引的机制,维护一个词/短语的表,对于每个词和短语都有一个链表描述 ...

  8. IKAnalyzer进行中文分词和去停用词

    最近学习主题模型pLSA.LDA,就想拿来试试中文.首先就是找文本进行切词.去停用词等预处理,这里我找了开源工具IKAnalyzer2012,下载地址:(:(注意:这里尽量下载最新版本,我这里用的IK ...

  9. Lucene学习-深入Lucene分词器,TokenStream获取分词详细信息

    Lucene学习-深入Lucene分词器,TokenStream获取分词详细信息 在此回复牛妞的关于程序中分词器的问题,其实可以直接很简单的在词库中配置就好了,Lucene中分词的所有信息我们都可以从 ...

最新文章

  1. Domino R8.5相关链接
  2. 抽象工厂+反射=反射工厂
  3. 2019天梯赛(总结-无题解)
  4. NYOJ-42 一笔画问题
  5. 信息竞赛进阶指南--归并排序求逆序对
  6. Redis实现计数器---接口防刷
  7. PPT怎么切换不同的母版
  8. 软件测试工程师必须要了解的4个证书
  9. DPlayer.js视频播放插件
  10. ubuntu 的挂起与休眠
  11. cyj等于什么英语单词_英语参考单词读写规律大全.doc
  12. Linux ELF 详解3 -- Symbol Table Symbol
  13. 学会这些方法,扩展磁盘分区还不是轻轻松松?
  14. linux网卡驱动离线安装_手动安装linux网卡驱动方法
  15. mysql造1000万数据_MySQL制作具有千万条测试数据的测试库
  16. 基于强化学习SAC_LSTM算法的机器人导航
  17. 示波器探头校准-补偿电容
  18. 立创eda学习笔记九:图层
  19. oracle 修改po税api_Oracle PO控制状态变更
  20. 信号完整性基础04:串扰(1)

热门文章

  1. Java编程之URI
  2. JAVA字符流与字符集编码
  3. 黑客游戏系列--------第四关
  4. rpm升级时spec文件执行的流程
  5. Bootstrap框架系列 - 初识
  6. PL/SQL Developer连接本地Oracle 11g 64位数据库和快捷键设置
  7. Mac升级到EI Captain之后pip install 无法使用问题
  8. SharePoint 2007 URL地址快速一览表
  9. Android开源介绍-UI组件
  10. 脚本配置文件(通过一个案例解释下什么叫脚本配置文件)