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) 中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块,在进行中文自 ...
随机推荐
- java上传图片到数据库,涉及压缩文件zip/rar上传等
项目中有这个需求: 1)上传文件通过公司平台的校验,校验成功后,通过接口,返回文件流: 2)我们根据这个文件流进行操作.这里,先将文件流复制文件到项目临时目录WEB-INF/temp;文件使用完毕,删 ...
- 1021 docker搭建mysql、网络模式、grid
1.搭建并连接mysql服务 1.1.mysql官方命令 https://hub.docker.com/_/mysql/ #下载mysql镜像: docker pull mysql #启动mysql: ...
- IPv6 Tunnel Broker+ROS搭建6TO4(IPV6)网络
准备条件:1.公网IPV4的IP2.ROS+IPV6的DHCP,本测试在ROS6.24版本下测试通过3. IPv6 Tunnel Broker:https://www.tunnelbroker.net ...
- SSH: sshd dead but subsys locked
问题: 查看SSH的状态时,提示错误如下: /etc/init.d/sshd status error: sshd dead but subsys locked 解决方法: sshd -d rm -r ...
- Django视图View
1.什么是Django的视图函数 一个视图函数(或者一个类),简称视图 是python的一个简单的函数,他是接受web请求 并且 处理逻辑 进而返回 响应 响应可以是一张网页的HTML内容,一个重定向 ...
- Spring MVC 学习 之 - URL参数传递
在学习 Spring Mvc 过程中,有必要来先了解几个关键参数: @Controller: 在类上注解,则此类将编程一个控制器,在项目启动 Spring 将自动扫描此类,并进行对应URL路由映 ...
- jeesite快速开发平台(二)----环境搭建
转自:https://blog.csdn.net/u011781521/article/details/54880465
- StrConv 内码转换
StrConv(string,conversion,LCID) string,预转换的字符串了(也可以使用byte数组). Conversion: 是一个整数,只决定转换方式,VB里定义了一些常量,如 ...
- window.location 属性
属性 含义 值 protocol: 协议 "http:" hostname: 服务器的名字 "b.a.com" port: 端口 "88" ...
- Linux命令之sed批量替换字符串操作
使用sed命令可以进行字符串的批量替换操作,以节省大量的时间及人力: 使用的格式如下: sed -i "s/oldstring/newstring/g" `grep oldstri ...