庖丁分词(2.0.4-alpha)的分词策略

本文提供了一系列针对中文分词算法的测试案例,包括不同类型的句子结构、噪声词汇处理及未登录词的处理策略,旨在验证分词算法的有效性和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[code]public class AnalyzerTest extends TestCase {



protected PaodingAnalyzer analyzer = new PaodingAnalyzer();



protected StringBuilder sb = new StringBuilder();



protected String dissect(String input) {

try {

TokenStream ts = analyzer.tokenStream("", new StringReader(input));

Token token;

sb.setLength(0);

while ((token = ts.next()) != null) {

sb.append(token.termText()).append('/');

}

if (sb.length() > 0) {

sb.setLength(sb.length() - 1);

}

return sb.toString();

} catch (Exception e) {

e.printStackTrace();

return "error";

}

}



// --------------------------------------------------------------

// 仅包含词语的句子分词策略

// --------------------------------------------------------------



/**

* 句子全由词典词语组成,但词语之间没有包含、交叉关系

*/

public void test100() {

String result = dissect("台北中文国际");

assertEquals("台北/中文/国际", result);

}



/**

* 句子全由词典词语组成,但词语之间有包含关系

*/

public void test101() {

String result = dissect("北京首都机场");

assertEquals("北京/首都/首都机场/机场", result);

}



/**

* 句子全由词典词语组成,但词语之间有交叉关系

*/

public void test102() {

String result = dissect("东西已经拍卖了");

assertEquals("东西/已经/拍卖/卖了", result);

}



/**

* 句子全由词典词语组成,但词语之间有包含、交叉等复杂关系

*/

public void test103() {

String result = dissect("羽毛球拍");

assertEquals("羽毛/羽毛球/羽毛球拍/球拍", result);

}



// --------------------------------------------------------------

// noise词汇和单字的分词策略

// --------------------------------------------------------------



/**

* 词语之间有一个noise字(的)

*/

public void test200() {

String result = dissect("足球的魅力");

assertEquals("足球/魅力", result);

}



/**

* 词语之间有一个noise词语(因之)

*/

public void test201() {

String result = dissect("主人因之生气");

assertEquals("主人/生气", result);

}



/**

* 词语前后分别有单字和双字的noise词语(与,有关)

*/

public void test202() {

String result = dissect("与谋杀有关");

assertEquals("谋杀", result);

}



/**

* 前有noise词语(哪怕),后面跟随了连续的noise单字(了,你)

*/

public void test203() {

String result = dissect("哪怕朋友背叛了你");

assertEquals("朋友/背叛", result);

}



/**

* 前后连续的noise词汇(虽然,某些),词语中有noise单字(很)

*/

public void test204() {

String result = dissect("虽然某些动物很凶恶");

assertEquals("动物/凶恶", result);

}



// --------------------------------------------------------------

// 词典没有收录的字符串的分词策略

// --------------------------------------------------------------





/**

* 仅1个字的非词汇串(东,西,南,北)

*/

public void test300() {

String result = dissect("东&&西&&南&&北");

assertEquals("东/西/南/北", result);

}





/**

* 仅两个字的非词汇串(古哥,谷歌,收狗,搜狗)

*/

public void test302() {

String result = dissect("古哥&&谷歌&&收狗&&搜狗");

assertEquals("古哥/谷歌/收狗/搜狗", result);

}



/**

* 多个字的非词汇串

*/

public void test303() {

String result = dissect("这是鸟语:玉鱼遇欲雨");

assertEquals("这是/鸟语/玉鱼/鱼遇/遇欲/欲雨", result);

}



/**

* 两个词语之间有一个非词汇的字(真)

*/

public void test304() {

String result = dissect("朋友真背叛了你了!");

assertEquals("朋友/真/背叛", result);

}



/**

* 两个词语之间有一个非词汇的字符串(盒蟹)

*/

public void test305() {

String result = dissect("建设盒蟹社会");

assertEquals("建设/盒蟹/社会", result);

}



/**

* 两个词语之间有多个非词汇的字符串(盒少蟹)

*/

public void test306() {

String result = dissect("建设盒少蟹社会");

assertEquals("建设/盒少/少蟹/社会", result);

}



// --------------------------------------------------------------

// 不包含小数点的汉字数字

// --------------------------------------------------------------





/**

* 单个汉字数字

*/

public void test400() {

String result = dissect("二");

assertEquals("2", result);

}



/**

* 两个汉字数字

*/

public void test61() {

String result = dissect("五六");

assertEquals("56", result);

}



/**

* 多个汉字数字

*/

public void test62() {

String result = dissect("三四五六");

assertEquals("3456", result);

}



/**

* 十三

*/

public void test63() {

String result = dissect("十三");

assertEquals("13", result);

}



/**

* 二千

*/

public void test65() {

String result = dissect("二千");

assertEquals("2000", result);

}



/**

* 两千

*/

public void test651() {

String result = dissect("两千");

assertEquals("2000", result);

}



/**

* 2千

*/

public void test652() {

String result = dissect("2千");

assertEquals("2000", result);

}



/**

*

*/

public void test653() {

String result = dissect("3千万");

assertEquals("30000000", result);

}



/**

*

*/

public void test654() {

String result = dissect("3千万个案例");

assertEquals("30000000/30000000个/案例", result);

}





/**

*

*/

public void test64() {

String result = dissect("千万");

assertEquals("千万", result);

}



public void test66() {

String result = dissect("两两");

assertEquals("两两", result);

}



public void test67() {

String result = dissect("二二");

assertEquals("22", result);

}



public void test68() {

String result = dissect("2.2两");

assertEquals("2.2/2.2两", result);

}



public void test69() {

String result = dissect("二两");

assertEquals("2/2两", result);

}



public void test7() {

String result = dissect("哪怕二");

assertEquals("2", result);

}



}
[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值