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的更多相关文章

  1. [python] 使用Jieba工具中文分词及文本聚类概念

    声明:由于担心CSDN博客丢失,在博客园简单对其进行备份,以后两个地方都会写文章的~感谢CSDN和博客园提供的平台.        前面讲述了很多关于Python爬取本体Ontology.消息盒Inf ...

  2. 《机学一》特征工程1 ——文本处理:sklearn抽取、jieba中文分词、TF和IDF抽取

    零.机器学习整个实现过程: 一.机器学习数据组成 特征值: 目标值: 二.特征工程和文本特征提取 1.概要: 1.特征工程是什么 2.特征工程的意义:直接影响预测结果 3.scikit-learn库 ...

  3. SnowNLP:•中文分词•词性标准•提取文本摘要,•提取文本关键词,•转换成拼音•繁体转简体的 处理中文文本的Python3 类库

    SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和Te ...

  4. 大文本 通过 hadoop spark map reduce 获取 特征列 的 属性值 计算速度

    大文本 通过 hadoop spark map reduce   获取 特征列  的 属性值  计算速度

  5. NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)

    摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P4 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bce ...

  6. 转:从头开始编写基于隐含马尔可夫模型HMM的中文分词器

    http://blog.csdn.net/guixunlong/article/details/8925990 从头开始编写基于隐含马尔可夫模型HMM的中文分词器之一 - 资源篇 首先感谢52nlp的 ...

  7. SCWS中文分词,demo演示

    上文已经讲了关于SCSW中文分词的安装配置,本节进入demo演示: <?php header('Content-Type:text/html;charset=UTF-8'); echo '< ...

  8. SCWS 中文分词

    SCWS 中文分词v1.2.3 开源免费的中文分词系统,PHP分词的上乘之选! 首页 下载 演示 文档 关于 服务&支持 API/HTTP 论坛 捐赠 源码@github 文档目录 SCWS- ...

  9. 自然语言处理之中文分词器-jieba分词器详解及python实战

    (转https://blog.csdn.net/gzmfxy/article/details/78994396) 中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块,在进行中文自 ...

随机推荐

  1. java上传图片到数据库,涉及压缩文件zip/rar上传等

    项目中有这个需求: 1)上传文件通过公司平台的校验,校验成功后,通过接口,返回文件流: 2)我们根据这个文件流进行操作.这里,先将文件流复制文件到项目临时目录WEB-INF/temp;文件使用完毕,删 ...

  2. 1021 docker搭建mysql、网络模式、grid

    1.搭建并连接mysql服务 1.1.mysql官方命令 https://hub.docker.com/_/mysql/ #下载mysql镜像: docker pull mysql #启动mysql: ...

  3. IPv6 Tunnel Broker+ROS搭建6TO4(IPV6)网络

    准备条件:1.公网IPV4的IP2.ROS+IPV6的DHCP,本测试在ROS6.24版本下测试通过3. IPv6 Tunnel Broker:https://www.tunnelbroker.net ...

  4. SSH: sshd dead but subsys locked

    问题: 查看SSH的状态时,提示错误如下: /etc/init.d/sshd status error: sshd dead but subsys locked 解决方法: sshd -d rm -r ...

  5. Django视图View

    1.什么是Django的视图函数 一个视图函数(或者一个类),简称视图 是python的一个简单的函数,他是接受web请求 并且 处理逻辑 进而返回 响应 响应可以是一张网页的HTML内容,一个重定向 ...

  6. Spring MVC 学习 之 - URL参数传递

    在学习 Spring Mvc 过程中,有必要来先了解几个关键参数:    @Controller: 在类上注解,则此类将编程一个控制器,在项目启动 Spring 将自动扫描此类,并进行对应URL路由映 ...

  7. jeesite快速开发平台(二)----环境搭建

    转自:https://blog.csdn.net/u011781521/article/details/54880465

  8. StrConv 内码转换

    StrConv(string,conversion,LCID) string,预转换的字符串了(也可以使用byte数组). Conversion: 是一个整数,只决定转换方式,VB里定义了一些常量,如 ...

  9. window.location 属性

    属性 含义 值 protocol: 协议 "http:" hostname: 服务器的名字 "b.a.com" port: 端口 "88" ...

  10. Linux命令之sed批量替换字符串操作

    使用sed命令可以进行字符串的批量替换操作,以节省大量的时间及人力: 使用的格式如下: sed -i "s/oldstring/newstring/g" `grep oldstri ...