Classifier4J是一个轻量级的分类工具,支持贝叶斯分类、向量空间模型、信息摘要等。然而它却不支持中文,异常信息大致如下:

Exception in thread "main" java.util.NoSuchElementExceptionat java.util.HashMap$HashIterator.nextEntry(HashMap.java:813)at java.util.HashMap$ValueIterator.next(HashMap.java:839)at java.util.Collections.max(Collections.java:657)

主要原因在于Classifier4J自带的DefaultTokenizer使用正则表达式“\W”进行分词,这种方式对英文还好,因为英文有着天然的分隔符,然而对中文则是不适用的。因而我们需要自己实现Classifier4J对中文的支持,分词工具选用庖丁分词。在包 net.sf.classifier4J中加入以下类:

package net.sf.classifier4J;import java.io.IOException;
import java.io.StringReader;
import java.util.Vector;import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.TermAttribute;import net.paoding.analysis.analyzer.PaodingAnalyzer;/*** @author hongyu*/
public class PaodingTokenizer implements ITokenizer {private Analyzer paoding;public PaodingTokenizer() {paoding = new PaodingAnalyzer();}@Overridepublic String[] tokenize(String input) {if(input != null) {StringReader inputReader = new StringReader(input);TokenStream ts = paoding.tokenStream("", inputReader);TermAttribute termAtt = (TermAttribute)ts.getAttribute(TermAttribute.class);Vector<String> tokens = new Vector<String>();try {while(ts.incrementToken()) {tokens.add(termAtt.term());}return tokens.toArray(new String[0]);} catch (IOException e) {return new String[0];}} else {return new String[0];}}}

net.sf.classifier4J.Utilities的第二个构造方法修改如下:

    public static Map getWordFrequency(String input, boolean caseSensitive) {//return getWordFrequency(input, caseSensitive, new DefaultTokenizer(), new DefaultStopWordsProvider());return getWordFrequency(input, caseSensitive, new PaodingTokenizer(), new DefaultStopWordsProvider());}

net.sf.classifier4J.vector.VectorClassifier中第一个构造方法第一行做如下修改:

        //tokenizer = new DefaultTokenizer();tokenizer = new PaodingTokenizer();

另外还有一些其他小的bug:

1,为了能够正确处理查询字符串出现在首部的情况,SimpleClassifier最后一个方法修改如下:

    public double classify(String input) {if ((input != null) && (input.indexOf(searchWord) >= 0)) {return 1;} else {return 0;}}

2,为了能够正确的对中文信息提取摘要,Utilities的getSentences方法修改如下:

    public static String[] getSentences(String input) {if (input == null) {return new String[0];} else {// split on a ".", a "!", a "?" followed by a space or EOL//return input.split("(\\.|!|\\?)+(\\s|\\z)");return input.split("(\\。|\\.|!|\\?)+(\\s|\\z)?");}}

3,中文句子一般以句号结尾,因而SimpleSummariser中第122行修改为:

result.append("。");

以下是几个简单的测试类:

1,基本分类器:

public class BasicUsage {public static void main(String args[]) throws Exception {SimpleClassifier classifier = new SimpleClassifier();classifier.setSearchWord("中华");String sentence = "中华人民共和国";System.out.println("The string '" + sentence +"' contains the word '中华': " + classifier.isMatch(sentence));System.out.println("The match rate is: " + classifier.classify(sentence));}} 

运行结果:

The string '中华人民共和国' contains the word '中华': true
The match rate is: 1.0

2,贝叶斯分类器:

public class Bayesian {public static void main(String args[]) throws Exception {IWordsDataSource wds = new SimpleWordsDataSource();IClassifier classifier = new BayesianClassifier(wds);System.out.println( "Matches = " + classifier.classify("中华人民共和国") );}} 

运行结果:

Matches = 0.5

3,信息摘要:

public class Summariser {public static void main(String args[]) {String input = "中华人民共和国简称中国,位于欧亚大陆东部,太平洋西岸。中国具有五千年的文明史,是世界四大文明古国之一。";ISummariser summariser = new SimpleSummariser();String result = summariser.summarise(input, 1);System.out.println(result);}} 

运行结果:

中华人民共和国简称中国,位于欧亚大陆东部,太平洋西岸。

4,向量空间模型:

public class Vector {public static void main(String args[]) throws Exception {TermVectorStorage storage = new HashMapTermVectorStorage();VectorClassifier vc = new VectorClassifier(storage);vc.teachMatch("草本","含羞草");double result = vc.classify("草本", "含羞草");System.out.println(result);}} 

运行结果:

0.9999999999999998

最后,Classifier4J只定义了英文中的停用词,对于中文而言,庖丁分词的词典中已经包含了停用词。

Classifier4J的中文支持相关推荐

  1. matlab2018无法使用qcat,解决Matlab 2018a源代码的中文支持问题

    1. 问题 Matlab 2018a源代码的中文支持问题: Matlab软件要求源文件mfile采用GBK编码.但是在调用程序过程中,程序有时候必须用UTF-8编码,例如shaperead中文地图程序 ...

  2. JSON asp(vbs)中文支持问题

    JSON asp(vbs)中文支持问题 <% '************************************************************************* ...

  3. WINCE6.0 中文支持

    WINCE6.0 中文支持(转) 2009-07-28 09:42 在以前用PB做CE5.0的时候,选择中文很简单: 现在用CE6.0,其实也很简单 ,但是我今天居然忘了, 又花费了点时间去catal ...

  4. irrlicht1.3中文支持

    irrlicht1.3的中文支持补丁,需要的朋友可以下载,如何使用里面有说明./Files/flysnow/IrrlichtML-1.3-win32Linux.zip 转载于:https://www. ...

  5. centos6.2安装桌面环境 与中文支持

    yum groupinstall "X Window System" //安装Xorg yum groupinstall "Desktop" //安装GNOME ...

  6. Linux(CentOS)中常用软件安装,使用及异常——XManager, 中文支持,JDK

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  7. OpenReports中文支持方案

    此文章在<OpenReports中文支持完全解决方案.doc>的基础上做优化,并贴出代码.已测试通过. 一.主要解决的问题 1 页面显示支持中文 2 与服务器或数据库的交互支持中文 3 查 ...

  8. Python 数据分析三剑客之 Matplotlib(二):文本描述 / 中文支持 / 画布 / 网格等基本图像属性

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

  9. linux mint php mysql_linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /e ...

最新文章

  1. 寒武纪上市:AI芯片和普通芯片有何不同?全球AI芯片公司大全都在这里了
  2. android 使用shell模拟触屏_Appium常用操作之「微信滑屏、触屏操作」
  3. 全国计算机一级考试难度高吗,计算机等级考试分几级 考试难度大不大
  4. 2019最新版Eclipse下载与安装
  5. 实用小工具-动软代码生成器
  6. 运动控制芯片 Motion Control ICs
  7. 仅仅CSS就实现了轮播图----利用关键帧动画实现轮播图效果
  8. 当无边框窗口被子窗口遮挡导致难以调节窗口大小时,可通过处理 NCHITTEST 消息重新支持调节窗口大小
  9. keil软件下载安装与新建工程
  10. 计算机专业我的工匠梦作文,【推荐】我的科技梦作文7篇
  11. 信号类型(雷达)——连续波雷达(二)
  12. 简单暴力的排序方式:直接排序
  13. 微信小程序云开发(2)— 云数据库
  14. kali-linux的快速下载(小白教程)
  15. Office2013 图标显示不正常的解决办法
  16. 计算机网络系统中常用的四对双绞线电缆,计算机网络中常用的三种有线传输媒体是什么?...
  17. Log4j2高危漏洞CNVD-2021-95914分析复现修复
  18. 打印图像模糊问题解决方法
  19. 快速将多个Excel表格合并为1个,你会吗?
  20. 软件测试对比软件开发,你适合哪款?

热门文章

  1. 获得1.5亿区块链投资后,矩阵元怎么做区块链?
  2. Editplus中添加System.out.println()快捷键
  3. JavaWeb: Redis存储Session方案
  4. [转]Error: SQL BPA command line has encountered a problem and needs to close
  5. Golang:无惧makefile
  6. 寒假打工去,不能继续写博客,表示好心痛啊。。。
  7. Arrays.asList()的坑
  8. redis bio线程任务队列
  9. RabbbitMq Return 消息机制
  10. Bootstrap栅格系统研究