package org.ansj.recognition.impl; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.ansj.domain.Nature; import org.ansj.domain.Result; import org.ansj.domain.Term; import org.ansj.recognition.Recognition; /** * 基于规则的新词发现 jijiang feidiao * * @author ansj * */ public class BookRecognition implements Recognition { /** * */ private static final long serialVersionUID = 1L; private static final Nature nature = new Nature("book"); private static Map<String, String> ruleMap = new HashMap<String, String>(); static { ruleMap.put("《", "》"); } @Override public void recognition(Result result) { List<Term> terms = result.getTerms() ; String end = null; String name; LinkedList<Term> mergeList = null; List<Term> list = new LinkedList<Term>(); for (Term term : terms) { name = term.getName(); if (end == null) { if ((end = ruleMap.get(name)) != null) { mergeList = new LinkedList<Term>(); mergeList.add(term); } else { list.add(term); } } else { mergeList.add(term); if (end.equals(name)) { Term ft = mergeList.pollFirst(); for (Term sub : mergeList) { ft.merage(sub); } ft.setNature(nature); list.add(ft); mergeList = null; end = null; } } } if (mergeList != null) { for (Term term : list) { list.add(term); } } result.setTerms(list) ; } }