Lucene学习之——停用词
做中文文本聚类,研究中科院的imdict-chinese-analyzer分词器时,我自己加载的停用词表一直都跑不出正确的结果,于是,就追踪lucene是怎么加载自己的停用词表的。在源代码的WordListLoader.java类中,发现了这样的代码:
- public static HashSet getWordSet(Reader reader) throws IOException {
- HashSet result = new HashSet();
- BufferedReader br = null;
- try {
- if (reader instanceof BufferedReader) {
- br = (BufferedReader) reader;
- } else {
- br = new BufferedReader(reader);
- }
- String word = null;
- while ((word = br.readLine()) != null) {
- result.add(word.trim());
- }
- }
- finally {
- if (br != null)
- br.close();
- }
- return result;
- }
问题就变得清晰了,于是我在这行代码中加入了输出语句,把从文件中加载进去的停用词打印出来。这样,就找到了问题的根源了:停用词表的编码格式问题(我设置的编码格式为:Unicode)
把研究的结果总结如下:
1、Lucene支持的停用词表文件有utf-8.
2、停用词表的格式很简单:每词一行.
3、Luence中支持停用词的方式有5种(见org.apache.lucene.analysis.StopAnalyzer.java类的5种构造方法):StopAnalyzer.java类默认停用词,以String[]传入,以Set传入,以File传入,以Reader传入
4、 关于停用词处理的参考代码如下:
- package com.xh.TextClustering;
- import java.io.File;
- import java.io.IOException;
- import java.io.StringReader;
- import org.apache.lucene.analysis.Analyzer;
- import org.apache.lucene.analysis.Token;
- import org.apache.lucene.analysis.TokenStream;
- import org.apache.lucene.index.CorruptIndexException;
- import org.apache.lucene.store.LockObtainFailedException;
- public class StopAnalyzerTestChinese
- {
- static String source="我 是 中国人。";
- public static void main(String args[])
- {
- Indexer();
- }
- private static void Indexer()
- {
- //Analyzer analyzer=new StopAnalyzer();
- try {
- Analyzer analyzer=new StopAnalyzer(new File("chinese_stopword.dic"));
- // IndexWriter writer=new IndexWriter(IndexPath,analyzer,true,MaxFieldLength.UNLIMITED);
- // Document document=new Document();
- // Field field_content=new Field("content",source,Field.Store.YES,Field.Index.ANALYZED);
- // document.add(field_content);
- // ArrayList ItemList=new ArrayList();
- TokenStream stream=analyzer.tokenStream("content", new StringReader(source));
- while(true)
- {
- Token item=stream.next();
- if(null==item)break;
- System.out.println("{"+item.termText()+"}");
- }
- // writer.optimize();
- // writer.close();
- } catch (CorruptIndexException e) {
- e.printStackTrace();
- } catch (LockObtainFailedException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
注:参考中文停用词表在附件中。
Lucene学习之——停用词相关推荐
- NLP深入学习——过滤停用词(Filtering stop words)
文章目录 返回主目录 过滤停用词(Filtering stop words) Stemming操作 返回主目录 这是一个系列的文章,点击返回综合目录页 过滤停用词(Filtering stop wor ...
- Lucene的Smart CN实现分词、停用词、扩展词
Lucene 中提供了 SmartCN 为中文提供分词功能,实际应用中还会涉及到停用词.扩展词(特殊词.专业词)等,因此本文将聚焦在 SmartCN 而暂时不考虑其他中文分词类库. 1 简介 anal ...
- 如何在Hibernate Search 5.5.2 / Apache Lucene 5.4.x中处理停用词?
停用词,例如[" a"," an"," and"," are"," as"," at&qu ...
- Lucene分词器,使用中文分词器,扩展词库,停用词
2019独角兽企业重金招聘Python工程师标准>>> Lucene分词器,使用中文分词器,扩展词库,停用词 博客分类: 搜索引擎,爬虫 停止词:lucene的停止词是无功能意义的词 ...
- elasticSearch学习笔记04-同义词,停用词,拼音,高亮,拼写纠错
由于elasticSearch版本更新频繁,此笔记适用ES版本为 7.10.2 此笔记摘录自<Elasticsearch搜索引擎构建入门与实战>第一版 文中涉及代码适用于kibana开发工 ...
- 【NLP学习笔记】停用词(stop words)
此坑待填 停用词 1 定义 2 介绍 3 功能 4 种类 5 引用 1 定义 2 介绍 3 功能 4 种类 5 引用 [1] 停用词 [2] 自然语言处理-停用词 [3] Github-stopwor ...
- Lucene学习笔记(1)
Lucene学习笔记 可以搜索文本文件,理论上可以搜索任何类型的数据.只要先把数据转化为文本,就可以对数据进行索引和搜索. 使用了反向索引的机制,维护一个词/短语的表,对于每个词和短语都有一个链表描述 ...
- IKAnalyzer进行中文分词和去停用词
最近学习主题模型pLSA.LDA,就想拿来试试中文.首先就是找文本进行切词.去停用词等预处理,这里我找了开源工具IKAnalyzer2012,下载地址:(:(注意:这里尽量下载最新版本,我这里用的IK ...
- Lucene学习-深入Lucene分词器,TokenStream获取分词详细信息
Lucene学习-深入Lucene分词器,TokenStream获取分词详细信息 在此回复牛妞的关于程序中分词器的问题,其实可以直接很简单的在词库中配置就好了,Lucene中分词的所有信息我们都可以从 ...
最新文章
- Domino R8.5相关链接
- 抽象工厂+反射=反射工厂
- 2019天梯赛(总结-无题解)
- NYOJ-42 一笔画问题
- 信息竞赛进阶指南--归并排序求逆序对
- Redis实现计数器---接口防刷
- PPT怎么切换不同的母版
- 软件测试工程师必须要了解的4个证书
- DPlayer.js视频播放插件
- ubuntu 的挂起与休眠
- cyj等于什么英语单词_英语参考单词读写规律大全.doc
- Linux ELF 详解3 -- Symbol Table Symbol
- 学会这些方法,扩展磁盘分区还不是轻轻松松?
- linux网卡驱动离线安装_手动安装linux网卡驱动方法
- mysql造1000万数据_MySQL制作具有千万条测试数据的测试库
- 基于强化学习SAC_LSTM算法的机器人导航
- 示波器探头校准-补偿电容
- 立创eda学习笔记九:图层
- oracle 修改po税api_Oracle PO控制状态变更
- 信号完整性基础04:串扰(1)