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. idea_pyspark 环境配置

    本文转载自:https://www.cnblogs.com/LazyJoJo/p/6910504.html 1.配置好Hadoop和spark 2.配置好Pytho3.5 3.安装py4j pip3 ...

  2. 找到一篇关于2.4/5G信道的新介绍

    关于部分手机无法搜索到5G wifi信号的解决方法第一次在论坛发基础理论贴,希望能普及关于5G wifi的基础知识.         发此贴的原因是基于本人突然发现:MX3刷了3.4.1系统后,搜索不 ...

  3. HDU-3944 DP?(组合数求模)

    一.题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3944 二.题意 给一个巨大的杨辉三角,采用类似DP入门题“数字三角形”的方式求从顶点$(0, 0) ...

  4. icape3 的使用

    在FPGA中,有时需要使用用户代码重配置FPGA,配置的内容可以是flash或者是其他的来源这样FPGA的启动模式有关,在本实验中配置文件是存放在flash中.实际的操作步骤如下: 1:生成一个工程, ...

  5. Python中小整数对象池和大整数对象池

    1. 小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 256] 这些整数对象是提 ...

  6. hadoop学习day2开发笔记

    1.将hdfs客户端开发所需的jar导入工程(jar包可在hadoop安装包中找到common/hdfs) 2.写代码 要对hdfs中的文件进行操作,代码中首先需要获得一个hdfs的客户端对象 Con ...

  7. OpenMP 奇偶换排序

    ▶ 使用 OpenMP 进行奇偶交换排序 ● 代码 #include <stdio.h> #include <stdlib.h> #include <omp.h> ...

  8. Air21

    handler package com.icil.edi.ws.milestoneService.handler; import java.text.SimpleDateFormat; import ...

  9. 「小程序JAVA实战」小程序的视频展示页面初始化(63)

    转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudeshipinzhanshiyemianchushihua62/ 进 ...

  10. Windows10 IME占用过高临时解决办法

    解决方案: 在管理员模式下运行命令提示符,并输入如下命令 if exist "%SystemRoot%\System32\InputMethod\CHS\ChsIME.exe" ( ...