Java源码示例:org.apdplat.word.segmentation.Segmentation
示例1
@Override
protected NlpTokenizer<? extends NlpToken> getNlpTokenizer(Map<String, String> configurations) {
Segmentation segmentation = build(configurations);
WordTokenizer tokenizer = new WordTokenizer(segmentation);
return tokenizer;
}
示例2
@Override
public Segmentation build(Map<String, String> configurations) {
for (Entry<String, String> keyValue : configurations.entrySet()) {
String key = keyValue.getKey();
String value = keyValue.getValue();
WordConfTools.set(key, value);
}
String algorithm = get(configurations, "algorithm", "FullSegmentation");
Segmentation segmentation = SegmentationFactory.getSegmentation(SegmentationAlgorithm.valueOf(algorithm));
return segmentation;
}
示例3
@Override
protected Tokenizer getSegmenter() {
// 可以配置到word.local.conf
// 保持标点符号
WordConfTools.set("keep.punctuation", "true");
// 保持空格
WordConfTools.set("keep.whitespace", "true");
Segmentation segmentation = SegmentationFactory.getSegmentation(SegmentationAlgorithm.FullSegmentation);
WordTokenizer tokenizer = new WordTokenizer(segmentation);
return tokenizer;
}
示例4
@Override
protected NlpTokenizer<? extends NlpToken> getTokenizer() {
// 保持标点符号
WordConfTools.set("keep.punctuation", "true");
// 保持空格
WordConfTools.set("keep.whitespace", "true");
Segmentation segmentation = SegmentationFactory.getSegmentation(SegmentationAlgorithm.FullSegmentation);
return new WordTokenizer(segmentation);
}
示例5
public static void main(String[] args){
Segmentation segmentation = new MinimalWordCount();
if(args !=null && args.length > 0){
System.out.println(segmentation.seg(Arrays.asList(args).toString()));
return;
}
System.out.println(segmentation.seg("独立自主和平等互利的原则"));
System.out.println(segmentation.seg("我爱楚离陌"));
}
示例6
public static void main(String[] args){
Segmentation m = new FullSegmentation();
if(args !=null && args.length > 0){
System.out.println(m.seg(Arrays.asList(args).toString()));
return;
}
String text = "蝶舞打扮得漂漂亮亮出现在张公公面前";
System.out.println(m.seg(text));
}
示例7
public static void main(String[] args){
Segmentation segmentation = new MaxNgramScore();
if(args !=null && args.length > 0){
System.out.println(segmentation.seg(Arrays.asList(args).toString()));
return;
}
System.out.println(segmentation.seg("独立自主和平等互利的原则"));
System.out.println(segmentation.seg("我爱杨尚川"));
}
示例8
public WordTokenizer(Segmentation segmentation) {
this.segmentation = segmentation;
}
示例9
public WordAnalyzer(Segmentation segmentation) {
this.segmentation = segmentation;
}
示例10
public WordTokenizer(Segmentation segmentation) {
this.segmentation = segmentation;
}
示例11
public static void main(String[] args) {
Segmentation segmentation = new PureEnglish();
System.out.println(segmentation.seg("Your function may also be added permanently to Hive, however this requires a small modification to a Hive Java file and then rebuilding Hive."));
}
示例12
public ChineseWordAnalyzer(Segmentation segmentation) {
this.segmentation = segmentation;
}
示例13
public ChineseWordTokenizer(Segmentation segmentation) {
this.segmentation = segmentation;
}
示例14
/**
*
* 对文件进行分词
* @param input 输入文件
* @param output 输出文件
* @param removeStopWords 是否移除停用词
* @param segmentationAlgorithm 分词算法
* @param fileSegmentationCallback 分词结果回调
* @throws Exception
*/
public static void seg(File input, File output, boolean removeStopWords, SegmentationAlgorithm segmentationAlgorithm, FileSegmentationCallback fileSegmentationCallback) throws Exception{
LOGGER.info("开始对文件进行分词:"+input.toString());
Segmentation segmentation = SegmentationFactory.getSegmentation(segmentationAlgorithm);
float max=(float)Runtime.getRuntime().maxMemory()/1000000;
float total=(float)Runtime.getRuntime().totalMemory()/1000000;
float free=(float)Runtime.getRuntime().freeMemory()/1000000;
String pre="执行之前剩余内存:"+max+"-"+total+"+"+free+"="+(max-total+free);
//准备输出目录
if(!output.getParentFile().exists()){
output.getParentFile().mkdirs();
}
try(BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(input),"utf-8"));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output),"utf-8"))){
long size = Files.size(input.toPath());
LOGGER.info("size:"+size);
LOGGER.info("文件大小:"+(float)size/1024/1024+" MB");
int textLength=0;
int progress=0;
long start = System.currentTimeMillis();
String line = null;
while((line = reader.readLine()) != null){
if("".equals(line.trim())){
writer.write("\n");
continue;
}
textLength += line.length();
List<Word> words = segmentation.seg(line);
if(removeStopWords){
//停用词过滤
StopWord.filterStopWords(words);
}
if(words == null){
continue;
}
for(Word word : words){
if(fileSegmentationCallback != null) {
fileSegmentationCallback.callback(word);
}
writer.write(word.getText()+" ");
}
writer.write("\n");
progress += line.length();
if( progress > 500000){
progress = 0;
LOGGER.info("分词进度:"+(int)((float)textLength*2/size*100)+"%");
}
}
long cost = System.currentTimeMillis() - start;
float rate = textLength/cost;
LOGGER.info("字符数目:"+textLength);
LOGGER.info("分词耗时:"+getTimeDes(cost)+" 毫秒");
LOGGER.info("分词速度:"+rate+" 字符/毫秒");
}
max=(float)Runtime.getRuntime().maxMemory()/1000000;
total=(float)Runtime.getRuntime().totalMemory()/1000000;
free=(float)Runtime.getRuntime().freeMemory()/1000000;
String post="执行之后剩余内存:"+max+"-"+total+"+"+free+"="+(max-total+free);
LOGGER.info(pre);
LOGGER.info(post);
LOGGER.info("将文件 "+input.toString()+" 的分词结果保存到文件 "+output);
}
示例15
@Test
public void testSeg() {
Segmentation segmentation = new MaximumMatching();
List<String> text = new ArrayList<>();
text.add("长春市长春节致辞");
text.add("杨");
text.add("杨尚川好");
text.add("杨尚川是APDPlat应用级产品开发平台的作者");
text.add("他说的确实在理");
text.add("提高人民生活水平");
text.add("他俩儿谈恋爱是从头年元月开始的");
text.add("王府饭店的设施和服务是一流的");
text.add("和服务于三日后裁制完毕,并呈送将军府中");
text.add("研究生命的起源");
text.add("他明天起身去北京");
text.add("在这些企业中国有企业有十个");
text.add("他站起身来");
text.add("他们是来查金泰撞人那件事的");
text.add("行侠仗义的查金泰远近闻名");
text.add("他从马上摔下来了,你马上下来一下");
text.add("乒乓球拍卖完了");
text.add("咬死猎人的狗");
text.add("地面积了厚厚的雪");
text.add("这几块地面积还真不小");
text.add("大学生活象白纸");
text.add("结合成分子式");
text.add("有意见分歧");
text.add("发展中国家兔的计划");
text.add("明天他将来北京");
text.add("税收制度将来会更完善");
text.add("依靠群众才能做好工作");
text.add("现在是施展才能的好机会");
text.add("把手举起来");
text.add("茶杯的把手断了");
text.add("以新的姿态出现在世界东方");
text.add("使节约粮食进一步形成风气");
text.add("反映了一个人的精神面貌");
text.add("美国加州大学的科学家发现");
text.add("我好不挺好");
text.add("木有");
text.add("下雨天留客天天留我不留");
text.add("叔叔亲了我妈妈也亲了我");
List<String> expResult = new ArrayList<>();
expResult.add("[长春市, 长春, 节, 致辞]");
expResult.add("[杨]");
expResult.add("[杨尚川, 好]");
expResult.add("[杨尚川, 是, apdplat, 应用级, 产品开发, 平台, 的, 作者]");
expResult.add("[他, 说, 的确, 实在, 理]");
expResult.add("[提高, 人民, 生活, 水平]");
expResult.add("[他俩, 儿, 谈恋爱, 是从, 头年, 元月, 开始, 的]");
expResult.add("[王府, 饭店, 的, 设施, 和服, 务, 是, 一流, 的]");
expResult.add("[和服, 务, 于, 三日, 后, 裁制, 完毕, 并, 呈送, 将军府, 中]");
expResult.add("[研究生, 命, 的, 起源]");
expResult.add("[他, 明天, 起身, 去, 北京]");
expResult.add("[在, 这些, 企业, 中国, 有, 企业, 有, 十个]");
expResult.add("[他, 站起, 身, 来]");
expResult.add("[他们, 是, 来, 查, 金泰, 撞人, 那件事, 的]");
expResult.add("[行侠仗义, 的, 查, 金泰, 远近闻名]");
expResult.add("[他, 从, 马上, 摔下来, 了, 你, 马上, 下来, 一下]");
expResult.add("[乒乓球拍, 卖完, 了]");
expResult.add("[咬死, 猎人, 的, 狗]");
expResult.add("[地面, 积, 了, 厚厚的, 雪]");
expResult.add("[这, 几块, 地面, 积, 还真, 不小]");
expResult.add("[大学生, 活象, 白纸]");
expResult.add("[结合, 成分, 子式]");
expResult.add("[有意见, 分歧]");
expResult.add("[发展中国家, 兔, 的, 计划]");
expResult.add("[明天, 他, 将来, 北京]");
expResult.add("[税收制度, 将来, 会, 更, 完善]");
expResult.add("[依靠群众, 才能, 做好, 工作]");
expResult.add("[现在, 是, 施展才能, 的, 好机会]");
expResult.add("[把手, 举起来]");
expResult.add("[茶杯, 的, 把手, 断了]");
expResult.add("[以, 新的, 姿态, 出现在, 世界, 东方]");
expResult.add("[使节, 约, 粮食, 进一步, 形成, 风气]");
expResult.add("[反映, 了, 一个人, 的, 精神面貌]");
expResult.add("[美国加州大学, 的, 科学家, 发现]");
expResult.add("[我, 好不, 挺好]");
expResult.add("[木, 有]");
expResult.add("[下雨天, 留客, 天天, 留, 我, 不留]");
expResult.add("[叔叔, 亲了, 我, 妈妈, 也, 亲了, 我]");
for(int i=0; i<text.size(); i++){
List<Word> result = segmentation.seg(text.get(i));
for(Word word : result){
word.setPartOfSpeech(null);
}
assertEquals(expResult.get(i).toString(), result.toString());
}
}
示例16
@Test
public void testSeg() {
Segmentation segmentation = new ReverseMaximumMatching();
List<String> text = new ArrayList<>();
text.add("长春市长春节致辞");
text.add("好");
text.add("杨尚川好");
text.add("杨尚川是APDPlat应用级产品开发平台的作者");
text.add("他说的确实在理");
text.add("提高人民生活水平");
text.add("他俩儿谈恋爱是从头年元月开始的");
text.add("王府饭店的设施和服务是一流的");
text.add("和服务于三日后裁制完毕,并呈送将军府中");
text.add("研究生命的起源");
text.add("他明天起身去北京");
text.add("在这些企业中国有企业有十个");
text.add("他站起身来");
text.add("他们是来查金泰撞人那件事的");
text.add("行侠仗义的查金泰远近闻名");
text.add("他从马上摔下来了,你马上下来一下");
text.add("乒乓球拍卖完了");
text.add("咬死猎人的狗");
text.add("地面积了厚厚的雪");
text.add("这几块地面积还真不小");
text.add("大学生活象白纸");
text.add("结合成分子式");
text.add("有意见分歧");
text.add("发展中国家兔的计划");
text.add("明天他将来北京");
text.add("税收制度将来会更完善");
text.add("依靠群众才能做好工作");
text.add("现在是施展才能的好机会");
text.add("把手举起来");
text.add("茶杯的把手断了");
text.add("以新的姿态出现在世界东方");
text.add("使节约粮食进一步形成风气");
text.add("反映了一个人的精神面貌");
text.add("美国加州大学的科学家发现");
text.add("我好不挺好");
text.add("木有");
text.add("下雨天留客天天留我不留");
text.add("叔叔亲了我妈妈也亲了我");
List<String> expResult = new ArrayList<>();
expResult.add("[长春, 市长, 春节, 致辞]");
expResult.add("[好]");
expResult.add("[杨尚川, 好]");
expResult.add("[杨尚川, 是, apdplat, 应用级, 产品, 开发平台, 的, 作者]");
expResult.add("[他, 说, 的, 确实, 在理]");
expResult.add("[提高, 人民, 生活, 水平]");
expResult.add("[他俩, 儿, 谈恋爱, 是从, 头年, 元月, 开始, 的]");
expResult.add("[王府, 饭店, 的, 设施, 和, 服务, 是, 一流, 的]");
expResult.add("[和, 服务于, 三, 日后, 裁制, 完毕, 并, 呈送, 将军, 府中]");
expResult.add("[研究, 生命, 的, 起源]");
expResult.add("[他, 明天, 起身, 去, 北京]");
expResult.add("[在, 这些, 企业, 中, 国有企业, 有, 十个]");
expResult.add("[他, 站, 起身, 来]");
expResult.add("[他们, 是, 来, 查, 金泰, 撞人, 那件事, 的]");
expResult.add("[行侠仗义, 的, 查, 金泰, 远近闻名]");
expResult.add("[他, 从, 马上, 摔下, 来了, 你, 马, 上下, 来一下]");
expResult.add("[乒乓球, 拍卖, 完了]");
expResult.add("[咬死, 猎人, 的, 狗]");
expResult.add("[地, 面积, 了, 厚厚的, 雪]");
expResult.add("[这, 几块, 地, 面积, 还真, 不小]");
expResult.add("[大学生, 活象, 白纸]");
expResult.add("[结, 合成, 分子式]");
expResult.add("[有, 意见分歧]");
expResult.add("[发展, 中国, 家兔, 的, 计划]");
expResult.add("[明天, 他, 将来, 北京]");
expResult.add("[税收制度, 将来, 会, 更, 完善]");
expResult.add("[依靠群众, 才, 能做, 好工作]");
expResult.add("[现在, 是, 施展才能, 的, 好机会]");
expResult.add("[把手, 举起来]");
expResult.add("[茶杯, 的, 把手, 断了]");
expResult.add("[以, 新的, 姿态, 出现在, 世界, 东方]");
expResult.add("[使, 节约粮食, 进一步, 形成, 风气]");
expResult.add("[反映, 了, 一个人, 的, 精神面貌]");
expResult.add("[美国加州大学, 的, 科学家, 发现]");
expResult.add("[我, 好不, 挺好]");
expResult.add("[木, 有]");
expResult.add("[下雨天, 留客, 天天, 留, 我, 不留]");
expResult.add("[叔叔, 亲了, 我, 妈妈, 也, 亲了, 我]");
for(int i=0; i<text.size(); i++){
List<Word> result = segmentation.seg(text.get(i));
for(Word word : result){
word.setPartOfSpeech(null);
}
assertEquals(expResult.get(i).toString(), result.toString());
}
}
示例17
@Test
public void testSeg() {
Segmentation segmentation = new MinimumMatching();
List<String> text = new ArrayList<>();
text.add("长春市长春节致辞");
text.add("杨");
text.add("杨尚川好");
text.add("杨尚川是APDPlat应用级产品开发平台的作者");
text.add("他说的确实在理");
text.add("提高人民生活水平");
text.add("他俩儿谈恋爱是从头年元月开始的");
text.add("王府饭店的设施和服务是一流的");
text.add("和服务于三日后裁制完毕,并呈送将军府中");
text.add("研究生命的起源");
text.add("他明天起身去北京");
text.add("在这些企业中国有企业有十个");
text.add("他站起身来");
text.add("他们是来查金泰撞人那件事的");
text.add("行侠仗义的查金泰远近闻名");
text.add("他从马上摔下来了,你马上下来一下");
text.add("乒乓球拍卖完了");
text.add("咬死猎人的狗");
text.add("地面积了厚厚的雪");
text.add("这几块地面积还真不小");
text.add("大学生活象白纸");
text.add("结合成分子式");
text.add("有意见分歧");
text.add("发展中国家兔的计划");
text.add("明天他将来北京");
text.add("税收制度将来会更完善");
text.add("依靠群众才能做好工作");
text.add("现在是施展才能的好机会");
text.add("把手举起来");
text.add("茶杯的把手断了");
text.add("以新的姿态出现在世界东方");
text.add("使节约粮食进一步形成风气");
text.add("反映了一个人的精神面貌");
text.add("美国加州大学的科学家发现");
text.add("我好不挺好");
text.add("木有");
text.add("下雨天留客天天留我不留");
text.add("叔叔亲了我妈妈也亲了我");
List<String> expResult = new ArrayList<>();
expResult.add("[长春, 市长, 春节, 致辞]");
expResult.add("[杨]");
expResult.add("[杨尚川, 好]");
expResult.add("[杨尚川, 是, apdplat, 应用, 级, 产品, 开发, 平台, 的, 作者]");
expResult.add("[他, 说, 的确, 实在, 理]");
expResult.add("[提高, 人民, 生活, 水平]");
expResult.add("[他俩, 儿, 谈恋爱, 是从, 头年, 元月, 开始, 的]");
expResult.add("[王府, 饭店, 的, 设施, 和服, 务, 是, 一, 流, 的]");
expResult.add("[和服, 务, 于三, 日后, 裁制, 完毕, 并, 呈送, 将军, 府中]");
expResult.add("[研究, 生命, 的, 起源]");
expResult.add("[他, 明天, 起身, 去, 北京]");
expResult.add("[在, 这些, 企业, 中国, 有, 企业, 有十个]");
expResult.add("[他, 站起, 身, 来]");
expResult.add("[他们, 是, 来, 查, 金泰, 撞人, 那件, 事, 的]");
expResult.add("[行侠仗义, 的, 查, 金泰, 远近, 闻名]");
expResult.add("[他, 从, 马上, 摔下, 来了, 你, 马上, 下来, 一, 下]");
expResult.add("[乒乓, 球拍, 卖完, 了]");
expResult.add("[咬死, 猎人, 的, 狗]");
expResult.add("[地面, 积, 了, 厚厚, 的, 雪]");
expResult.add("[这, 几块, 地面, 积, 还真, 不小]");
expResult.add("[大学, 生活, 象, 白纸]");
expResult.add("[结合, 成分, 子式]");
expResult.add("[有意, 见, 分歧]");
expResult.add("[发展, 中国, 家兔, 的, 计划]");
expResult.add("[明天, 他, 将来, 北京]");
expResult.add("[税收, 制度, 将来, 会, 更, 完善]");
expResult.add("[依靠, 群众, 才能, 做好, 工作]");
expResult.add("[现在, 是, 施展, 才能, 的, 好机会]");
expResult.add("[把手, 举起, 来]");
expResult.add("[茶杯, 的, 把手, 断了]");
expResult.add("[以, 新的, 姿态, 出现, 在世, 界, 东方]");
expResult.add("[使节, 约, 粮食, 进一, 步, 形成, 风气]");
expResult.add("[反映, 了, 一, 个人, 的, 精神, 面貌]");
expResult.add("[美国, 加州, 大学, 的, 科学, 家, 发现]");
expResult.add("[我, 好不, 挺好]");
expResult.add("[木, 有]");
expResult.add("[下雨, 天, 留客, 天天, 留, 我, 不留]");
expResult.add("[叔叔, 亲了, 我, 妈妈, 也, 亲了, 我]");
expResult.add("[白马, 非, 马]");
for(int i=0; i<text.size(); i++){
List<Word> result = segmentation.seg(text.get(i));
for(Word word : result){
word.setPartOfSpeech(null);
}
assertEquals(expResult.get(i).toString(), result.toString());
}
}
示例18
@Test
public void testSeg() {
Segmentation segmentation = new ReverseMinimumMatching();
List<String> text = new ArrayList<>();
text.add("长春市长春节致辞");
text.add("杨");
text.add("杨尚川好");
text.add("杨尚川是APDPlat应用级产品开发平台的作者");
text.add("他说的确实在理");
text.add("提高人民生活水平");
text.add("他俩儿谈恋爱是从头年元月开始的");
text.add("王府饭店的设施和服务是一流的");
text.add("和服务于三日后裁制完毕,并呈送将军府中");
text.add("研究生命的起源");
text.add("他明天起身去北京");
text.add("在这些企业中国有企业有十个");
text.add("他站起身来");
text.add("他们是来查金泰撞人那件事的");
text.add("行侠仗义的查金泰远近闻名");
text.add("他从马上摔下来了,你马上下来一下");
text.add("乒乓球拍卖完了");
text.add("咬死猎人的狗");
text.add("地面积了厚厚的雪");
text.add("这几块地面积还真不小");
text.add("大学生活象白纸");
text.add("结合成分子式");
text.add("有意见分歧");
text.add("发展中国家兔的计划");
text.add("明天他将来北京");
text.add("税收制度将来会更完善");
text.add("依靠群众才能做好工作");
text.add("现在是施展才能的好机会");
text.add("把手举起来");
text.add("茶杯的把手断了");
text.add("以新的姿态出现在世界东方");
text.add("使节约粮食进一步形成风气");
text.add("反映了一个人的精神面貌");
text.add("美国加州大学的科学家发现");
text.add("我好不挺好");
text.add("木有");
text.add("下雨天留客天天留我不留");
text.add("叔叔亲了我妈妈也亲了我");
List<String> expResult = new ArrayList<>();
expResult.add("[长春, 市长, 春节, 致辞]");
expResult.add("[杨]");
expResult.add("[杨尚川, 好]");
expResult.add("[杨尚川, 是, apdplat, 应用级, 产品, 开发, 平台, 的, 作者]");
expResult.add("[他, 说, 的, 确实, 在理]");
expResult.add("[提高, 人民, 生活, 水平]");
expResult.add("[他俩, 儿, 谈, 恋爱, 是从, 头年, 元月, 开始, 的]");
expResult.add("[王府, 饭店, 的, 设施, 和, 服务, 是, 一流, 的]");
expResult.add("[和, 服务于, 三, 日后, 裁制, 完毕, 并, 呈送, 将军, 府中]");
expResult.add("[研究, 生命, 的, 起源]");
expResult.add("[他, 明天, 起身, 去, 北京]");
expResult.add("[在, 这些, 企业, 中, 国有, 企业, 有, 十个]");
expResult.add("[他, 站, 起身, 来]");
expResult.add("[他们, 是, 来, 查, 金泰, 撞人, 那, 件事, 的]");
expResult.add("[行, 侠, 仗义, 的, 查, 金泰, 远近, 闻名]");
expResult.add("[他, 从, 马上, 摔下, 来了, 你, 马上, 下来, 一下]");
expResult.add("[乒乓球, 拍卖, 完了]");
expResult.add("[咬死, 猎人, 的, 狗]");
expResult.add("[地, 面积, 了, 厚厚的, 雪]");
expResult.add("[这, 几块, 地, 面积, 还真, 不小]");
expResult.add("[大, 学生, 活象, 白纸]");
expResult.add("[结合, 成分, 子式]");
expResult.add("[有, 意见, 分歧]");
expResult.add("[发展, 中国, 家兔, 的, 计划]");
expResult.add("[明天, 他, 将来, 北京]");
expResult.add("[税收, 制度, 将来, 会, 更, 完善]");
expResult.add("[依靠, 群众, 才能, 做好, 工作]");
expResult.add("[现在, 是, 施展, 才能, 的, 好, 机会]");
expResult.add("[把手, 举, 起来]");
expResult.add("[茶杯, 的, 把手, 断了]");
expResult.add("[以, 新的, 姿态, 出, 现在, 世界, 东方]");
expResult.add("[使, 节约, 粮食, 进, 一步, 形成, 风气]");
expResult.add("[反映, 了, 一, 个人, 的, 精神, 面貌]");
expResult.add("[美国, 加州, 大学, 的, 科, 学家, 发现]");
expResult.add("[我, 好不, 挺好]");
expResult.add("[木, 有]");
expResult.add("[下, 雨天, 留客, 天天, 留, 我, 不留]");
expResult.add("[叔叔, 亲了, 我, 妈妈, 也, 亲了, 我]");
for(int i=0; i<text.size(); i++){
List<Word> result = segmentation.seg(text.get(i));
for(Word word : result){
word.setPartOfSpeech(null);
}
assertEquals(expResult.get(i).toString(), result.toString());
}
}