Lucene4:获取中文分词结果,根据文本计算boost
1. 要求
环境:
Lucene 4.1版本/IKAnalyzer 2012 FF版本/mmseg4j 1.9版本
实现功能:
1).给定输入文本,获取中文拆分词结果;
2).给定输入文本,对该文本按一定规则进行权重打分;如:文本中包含指定关键词的频率越高,分值越高。
2. 实现代码

package com.clzhang.sample.lucene; import java.io.*;
import java.util.*; import org.apache.lucene.analysis.Analyzer; import com.chenlb.mmseg4j.Dictionary;
import com.chenlb.mmseg4j.analysis.SimpleAnalyzer;
import com.chenlb.mmseg4j.analysis.ComplexAnalyzer;
import com.chenlb.mmseg4j.analysis.MaxWordAnalyzer;
import org.wltea.analyzer.lucene.IKAnalyzer; import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; /**
* 环境:Lucene 4.1版本/IKAnalyzer 2012 FF版本/mmseg4j 1.9版本
* 1.给定输入文本,获取中文拆分词结果;
* 2.给定输入文本,对该文本按一定规则进行权重打分;
* 如:文本中包含指定关键词的频率越高,分值越高。
* @author Administrator
*
*/
public class AnalyzerTool {
// mmseg4j字典路径
private static final String MMSEG4J_DICT_PATH = "C:\\solr\\news\\conf";
private static Dictionary dictionary = Dictionary.getInstance(MMSEG4J_DICT_PATH); // 负面关键词信息,如果文本中包含这些词,那么该文本的打分值将变高。
private static List<String> lstNegativeWord; static {
lstNegativeWord = new ArrayList<String>(); // 下列词语必须存在于词典中:或者是分词器自带的词典,或者是自定义词典;
// 否则计算权重结果不准,因为有关键词没有被分词器拆分出来。
lstNegativeWord.add("不雅");
lstNegativeWord.add("被免");
lstNegativeWord.add("偷拍");
} /**
* 测试各种解析器对同样文本的解析结果
* @param content
* @throws Exception
*/
public static void testAnalyzer(String content) throws Exception {
Analyzer analyzer = new IKAnalyzer(); // 等于new IKAnalyzer(false);
System.out.println("new IKAnalyzer()解析输出:" + getAnalyzedStr(analyzer, content)); analyzer = new IKAnalyzer(true);
System.out.println("new IKAnalyzer(true)解析输出:" + getAnalyzedStr(analyzer, content)); analyzer = new SimpleAnalyzer(dictionary);
System.out.println("new SimpleAnalyzer()解析输出:" + getAnalyzedStr(analyzer, content)); analyzer = new ComplexAnalyzer(dictionary);
System.out.println("new ComplexAnalyzer()解析输出:" + getAnalyzedStr(analyzer, content)); analyzer = new MaxWordAnalyzer(dictionary);
System.out.println("new MaxWordAnalyzer()解析输出:" + getAnalyzedStr(analyzer, content));
} /**
* 取得权重结果,规则:在输入字符串中查找关键词,关键词出现频率越多,权重越高
* @param str
* @return
* @throws Exception
*/
public static float getBoost(String str) throws Exception {
float result = 1.0F; // 默认解析器,可以更改为其它解析器
Analyzer analyzer = new IKAnalyzer();
// Analyzer analyzer = new SimpleAnalyzer(dictionary);
List<String> list = getAnalyzedStr(analyzer, str);
for(String word: lstNegativeWord) {
if(list.contains(word)) {
result += 10F; // 每出现一种负面关键词(不管出现几次),分值加10
}
} return result;
} /**
* 调用分词器解析输入内容,将每个分词加入到List,然后返回此List
* @param content
* @return
* @throws Exception
*/
public static List<String> getAnalyzedStr(Analyzer analyzer, String content) throws Exception {
TokenStream stream = analyzer.tokenStream(null, new StringReader(content));
CharTermAttribute term = stream.addAttribute(CharTermAttribute.class); List<String> result = new ArrayList<String>();
while(stream.incrementToken()) {
result.add(term.toString());
} return result;
} public static void main(String[] args) throws Exception {
// 注意:亭湖新区/亭湖这两个词必须存在于IKAnalyzer/mmseg4j两个用户自定义词典中
String content = "亭湖新区因不雅难过分视频被免官员国企老总名单公布"; System.out.println("原文:" + content);
testAnalyzer(content);
System.out.println("默认解析器打分结果:" + getBoost(content));
}
}

输出:
原文:亭湖新区因不雅难过分视频被免官员国企老总名单公布
加载扩展词典:ext.dic
......
加载扩展停止词典:stopword.dic
new IKAnalyzer()解析输出:[亭湖新区, 亭湖, 新区, 因, 不雅, 难过, 过分, 视频, 被免, 免官, 官员, 国企, 老总, 名单, 公布]
new IKAnalyzer(true)解析输出:[亭湖新区, 因, 不雅, 难, 过分, 视频, 被免, 官员, 国企, 老总, 名单, 公布]
new SimpleAnalyzer()解析输出:[亭湖新区, 因, 不雅, 难过, 分, 视频, 被, 免, 官员, 国企, 老总, 名单, 公布]
new ComplexAnalyzer()解析输出:[亭湖新区, 因, 不雅, 难过, 分, 视频, 被, 免, 官员, 国企, 老总, 名单, 公布]
new MaxWordAnalyzer()解析输出:[亭湖, 新区, 因, 不雅, 难过, 分, 视频, 被, 免, 官员, 国企, 老总, 名单, 公布]
默认解析器打分结果:21.0
Lucene4:获取中文分词结果,根据文本计算boost的更多相关文章
- [python] 使用Jieba工具中文分词及文本聚类概念
声明:由于担心CSDN博客丢失,在博客园简单对其进行备份,以后两个地方都会写文章的~感谢CSDN和博客园提供的平台. 前面讲述了很多关于Python爬取本体Ontology.消息盒Inf ...
- 《机学一》特征工程1 ——文本处理:sklearn抽取、jieba中文分词、TF和IDF抽取
零.机器学习整个实现过程: 一.机器学习数据组成 特征值: 目标值: 二.特征工程和文本特征提取 1.概要: 1.特征工程是什么 2.特征工程的意义:直接影响预测结果 3.scikit-learn库 ...
- SnowNLP:•中文分词•词性标准•提取文本摘要,•提取文本关键词,•转换成拼音•繁体转简体的 处理中文文本的Python3 类库
SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和Te ...
- 大文本 通过 hadoop spark map reduce 获取 特征列 的 属性值 计算速度
大文本 通过 hadoop spark map reduce 获取 特征列 的 属性值 计算速度
- NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)
摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P4 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bce ...
- 转:从头开始编写基于隐含马尔可夫模型HMM的中文分词器
http://blog.csdn.net/guixunlong/article/details/8925990 从头开始编写基于隐含马尔可夫模型HMM的中文分词器之一 - 资源篇 首先感谢52nlp的 ...
- SCWS中文分词,demo演示
上文已经讲了关于SCSW中文分词的安装配置,本节进入demo演示: <?php header('Content-Type:text/html;charset=UTF-8'); echo '< ...
- SCWS 中文分词
SCWS 中文分词v1.2.3 开源免费的中文分词系统,PHP分词的上乘之选! 首页 下载 演示 文档 关于 服务&支持 API/HTTP 论坛 捐赠 源码@github 文档目录 SCWS- ...
- 自然语言处理之中文分词器-jieba分词器详解及python实战
(转https://blog.csdn.net/gzmfxy/article/details/78994396) 中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块,在进行中文自 ...
随机推荐
- USACO 2016 January Contest, Gold解题报告
1.Angry Cows http://www.usaco.org/index.php?page=viewproblem2&cpid=597 dp题+vector数组运用 将从左向右与从右向左 ...
- 【转】深入理解Java的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- python 下载图片的方法
a='http://wx1.sinaimg.cn/mw600/006HOayNgy1fqjdi2nxohj32pw3o8x6s.jpg' #图片下载地址 ( 这里改成 文件txt地址)w='/U ...
- Java 学习思路
内容中包含 base64string 图片造成字符过多,拒绝显示
- 详解Oracle的几种分页查询语句
转载自:http://database.51cto.com/art/200904/118737.htm 分页查询格式: SELECT * FROM (SELECT A.*, ROWNUM RN FRO ...
- 关于oracle数据库启动报ORA-01122,ORA-01110,ORA-01203错误的解决方法
ORACLE 数据库空间裸设备出问题了,启动oracle失败,解决方法问题现象: 启动ORACLE的时候报如下的错误: Database mounted. ORA-01 ...
- 如何在Solr中实现多core查询
基于solr或者elasticsearch提供的多核,多索引,多shard等查询能力,一般都是由lucene提供的多索引查询的功能演化而来的,这个功能在单机版的lucene里面确实没有发挥多大的威力, ...
- solr删除全部索引数据
SOLR 删除全部索引数据: <delete><query>*:*</query></delete><commit/>
- Python开发一个简单的BBS论坛
项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可 ...
- 好记性不如烂笔头-linux学习笔记3mysql数据库导入导出
1 数据库文件导出 mysqldump -uroot -p123456 test > 1.sql 2数据库文件导入 mysql -uroot -p123456 test <1.sql 3 ...