java分词工具-ANSJ与IKAnalyzer比较分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java分词工具-ANSJ与IKAnalyzer比较分析相关的知识,希望对你有一定的参考价值。

最近做情感分析,想研究下具体哪个java分词工具好,于是测试了ANSJ和IKAnalyzer的比较:

都是用了默认值,没有进行添加词库和停用词。

ANSJ的代码:scala调用。

/**
* 中文分词
* example :
println("segment分词测试")
val stopWords = Config.STOP_WORDS.split("\\|",-1).toArray
val str = """据新华社电 中共中央总书记、国家主席、中央军委主席习近pin12日上午在第十八届中央纪委第六次全会上发表重要讲话。
他强调,坚决遏制腐败现象滋生蔓延势头。惩治腐败这一手必须紧抓不放、利剑高悬,坚持无禁区、全覆盖、零容忍。"""
var MySegment = new SegmentUtil(stopWords)
val ret = MySegment.segment(str)
println(ret)
println("segment分词测试----end")
* Segment(" ", null ,":", null )
* @param stopWords 停用词列表
* @param separator 分词结果的分隔符
* @param natureSeparator 词性分割符
* @param stopNatures 词性列表
*/
class ANSJ(
stopWords: Array[String] = null,
separator: String = " ",
natureSeparator: String = ":",
stopNatures: Array[String] = null) extends Serializable{

//初始化停用词、停用词性等操作
if (stopWords != null) {
val sws = new java.util.ArrayList[String]
for (item <- stopWords) sws.add(item)
FilterModifWord.insertStopWords(sws)
}
if (stopNatures != null) {
for (line <- stopNatures)
FilterModifWord.insertStopNatures(line)
}

/**
* @param input 待分词的句子
*/
def segment(input: String): Seq[String] = {
val term = NlpAnalysis.parse(input)
val filter = FilterModifWord.modifResult(term)
val word = if (stopNatures != null) {
for (i <- Range(0, filter.size()))
yield filter.get(i).getName + natureSeparator + filter.get(i).getNatureStr
} else for (i <- Range(0, filter.size())) yield filter.get(i).getName
// word.mkString(separator)
word
}

}

IKAnalyzer代码

public class IKAnalyzerUtil {
private Analyzer analyzer = null;
private String split = " ";

public IKAnalyzerUtil(String split ) {
this.split = split;
analyzer = new IKAnalyzer(true);
}

public IKAnalyzerUtil() {
analyzer = new IKAnalyzer(true);
}

public String segment(String input) {
StringReader words = new StringReader(input);
TokenStream ts = analyzer.tokenStream("", words);
CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);

StringBuffer sf = new StringBuffer();
try {
while (ts.incrementToken()) {
sf.append(term.toString() + split);
// System.out.print(term.toString() + "|");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
return sf.toString();
}

}
}

 

分词效果比较

原句:大陈岛位于浙江中部台州湾东南海域。1956年,浙江省467名青年志愿者奔赴大陈岛参与垦荒建设。2006年8月29日,时任浙江省委书记的习近pin到大陈岛视察,看望岛上的老垦荒队员。2010年4月27日,时任中共中央政治局常委、国家副主席的习近pin给大陈岛老垦荒队员回信。近日,台州市椒江区12名小学生以“大陈岛垦荒队员后代”的名义给习近pin写信,表达了传承大陈岛垦荒精神,做爱学习、爱劳动、爱祖国好少年的决心。
    ansj:大 陈岛 位于 浙江 中部 台州湾 东南 海域 。 1956年 , 浙江省 467名 青年 志愿者 奔赴 大 陈岛 参与 垦荒 建设 。 2006年 8月 29日 , 时任 浙江省委 书记 的 习近pin 到 大 陈岛 视察 , 看望 岛上 的 老 垦荒 队员 。 2010年 4月 27日 , 时任 中共中央 政治局 常委 、 国家 副 主席 的 习近pin 给 大 陈岛 老 垦荒 队员 回信 。 近日 , 台州市椒江区 12名 小学生 以 “ 大 陈岛 垦荒 队员 后代 ” 的 名义 给 习近pin 写信 , 表达 了 传承 大 陈岛 垦荒 精神 , 做爱 学习 、 爱 劳动 、 爱 祖国 好 少年 的 决心 。
ikanalyzer:大 陈 岛 位于 浙江 江中 中部 台州 湾 东南 南海 海域 1956 年 浙江省 467 名 青年 志愿者 奔赴 大 陈 岛 参与 垦荒 建设 2006 年 8 月 29 日 时任 浙江省委 省委书记 的 习近pin 到 大 陈 岛 视察 看望 岛上 的 老 垦荒 队员 2010 年 4 月 27 日 时任 中共中央政治局常委 国家副主席 的 习近pin 给 大 陈 岛 老 垦荒 队员 回信 近日 台州市 椒江区 12 名 小学生 以 大 陈 岛 垦荒 队员 后代 的 名义 给 习近pin 写信 表达 了 传承 大 陈 岛 垦荒 精神 做爱 爱学习 爱劳动 爱祖国 好少 少年 的 决心

原句:人民日报全媒体平台(中央厨房)布拉格3月29日电(记者杜尚泽、管克江)当地时间29日,国家主席习近pin在布拉格同捷克总统泽曼举行会谈。双方积极评价两国关系发展,就中捷关系、中欧关系、中国—中东欧国家合作及共同关心的国际和地区问题深入交换意见,达成广泛共识。两国元首一致同意,将中捷关系提升为战略伙伴关系,推动中捷关系再上新台阶。
ansj: 人民日报 全 媒体 平台 ( 中央 厨房 ) 布拉格 3月 29日 电 ( 记者 杜尚泽 、 管克江 ) 当地 时间 29日 , 国家 主席 习近pin 在 布拉格 同 捷克 总统 泽曼 举行 会谈 。 双方 积极 评价 两 国 关系 发展 , 就 中捷 关系 、 中 欧 关系 、 中国 — 中东欧 国家 合作 及 共同 关心 的 国际 和 地区 问题 深入 交换 意见 , 达成 广泛 共识 。 两 国 元首 一致 同意 , 将 中捷 关系 提升 为 战略 伙伴 关系 , 推动 中捷 关系 再 上 新 台阶 。
ikanalyzer:人民日报 全 媒体 平台 中央 厨房 布拉格 3 月 29 日 电 记者 杜 尚 泽 管 克 江 当地时间 29 日 国家主席 习近pin 在 布拉格 同 捷克 总统 泽 曼 举行会谈 双方 积极 评价 两国关系 发展 就中 中捷 关系 中欧 关系 中国 中东欧 东欧国家 合作 及 共同 关心 的 国际 和 地区 问题 深入 交换意见 达成 广泛 共识 两国 元首 一致同意 将 中捷 关系 提升 升为 战略伙伴 伙伴关系 推动 中捷 关系 再上 新台阶

原句:德勤分析师表示,农业的温和复苏和服务业的稳定表现是印度GDP向好的主要推动力。然而印度的工业活动有些放缓。印度评级和研究首席经济学家潘特也表示,印度经济持续改善,但向好幅度并不大,最近的工业生产数据凸显了印度经济可能并非如GDP数据那般强劲。今年前三个月,印度工业产出仅平均上涨0.6%。穆迪表示,由于出口拉动的希望不大,印度保持经济上行将需要投资的恢复。特别是鉴于外部需求可能继续疲软,保持增长势头需要其国内民间投资持续向好。
ansj2:德勤 分析师 表示 , 农业 的 温和 复苏 和 服务业 的 稳定 表现 是 印度 gdp 向好 的 主要 推动力 。 然而 印度 的 工业 活动 有些 放缓 。 印度 评级 和 研究 首席 经济学家 潘特 也 表示 , 印度 经济 持续 改善 , 但 向好 幅度 并 不 大 , 最近 的 工业 生产 数据 凸 显 了 印度 经济 可能 并非 如 gdp 数据 那般 强劲 。 今年 前 三个 月 , 印度 工业 产出 仅 平均 上涨 0.6% 。 穆迪 表示 , 由于 出口 拉动 的 希望 不 大 , 印度 保持 经济 上 行将 需要 投资 的 恢复 。 特别 是 鉴于 外部 需求 可能 继续 疲软 , 保持 增长 势头 需要 其 国内 民间 投资 持续 向好 。
ikanalyzer:德 勤 分析师 师表 表示 农业 的 温和 复苏 和服务 服务业 的 稳定 表现 现是 印度 gdp 向 好 的 主要 推动力 然而 印度 的 工业 活动 有些 放缓 印度 评级 和 研究 首席 经济学家 潘 特 也 表示 印度 经济 持续 改善 但 向 好 幅度 并不大 最近 的 工业生产 数据 凸显 了 印度 经济 可能 并非 非如 gdp 数据 那般 强劲 今年 年前 三个月 印度 工业 产出 仅 平均 上涨 0.6 穆迪 表示 由于 出口 拉动 的 希望 不大 印度 保持 经济上 上行 行将 需要 投资 的 恢复 特别是 鉴于 外部 需求 可能 继续 疲软 保持 增长势头 需要 其 国内 民间 投资 持续 向 好

总结:

两种分词有一定的差异,IKAnalyzer的分词采用智能方式,却把多意句子,分成多个词。IKAnalyzer默认会把特殊符号,标点符号等剔除。总体分词效果,从上面例句看,还是ANSJ的效果好些。

以上是关于java分词工具-ANSJ与IKAnalyzer比较分析的主要内容,如果未能解决你的问题,请参考以下文章

基于java的中文分词工具ANSJ

基于ansj_seg的分词实现

商品搜索引擎---分词(插件介绍与入门实例)

Ansj中文分词Java开发自定义和过滤词库

ikanalyzer 可以做词性标注吗

java使用Ansj实现字符串分词