/**
* @Title: SemanticMessageProcessor.java
* @Description: TODO
* @author: Calvinyang
* @date: Dec 22, 2014 4:37:50 PM
* Copyright: Copyright (c) 2013
* @version: 1.0
*/
package edu.fudan.weixin.model.processor;
import java.util.Map;
import org.fnlp.app.keyword.AbstractExtractor;
import org.fnlp.app.keyword.WordExtract;
import edu.fudan.eservice.common.utils.CommonUtil;
import edu.fudan.nlp.cn.tag.CWSTagger;
import edu.fudan.nlp.corpus.StopWords;
import edu.fudan.util.exception.LoadModelException;
import edu.fudan.weixin.model.message.JSONMessageBuilder;
import edu.fudan.weixin.model.message.NewsMessageBuilder;
import edu.fudan.weixin.utils.BstSearchHelper;
/**
* @author: Calvinyang
* @Description: 无法处理的文本消息处理
* @date: Dec 22, 2014 4:37:50 PM
*/
public class SemanticMessageProcessor extends LongTermProcessor {
@Override
public Map<String, Object> process(Map<String, Object> message) {
String content = String.valueOf(message.get("Content"));
if (!CommonUtil.isEmpty(content)) {
return super.process(message);
}
return null;
}
@Override
public JSONMessageBuilder _process(Map<String, Object> msg) {
String content = String.valueOf(msg.get("Content"));
// 调用复旦关键词提取
StringBuffer sb = new StringBuffer();
try {
ClassLoader cl = SemanticMessageProcessor.class.getClassLoader();
StopWords sw = new StopWords(cl.getResource("models/stopwords").getFile());
CWSTagger tagger = new CWSTagger(cl.getResource("models/seg.m").getPath());
AbstractExtractor extractor = new WordExtract(tagger, sw);
Map<String, Integer> map = extractor.extract(content, 3);
for(String key : map.keySet()) {
sb.append(key).append(" ");
}
} catch (LoadModelException e) {
e.printStackTrace();
}
if (sb.length() == 0) {
sb.append(content);
}
NewsMessageBuilder builder = BstSearchHelper.getNewsForKeywords(sb.toString().trim());
return builder == null || builder.getCount() == 1 ? null : (JSONMessageBuilder)builder;
}
}