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); } }