Skip to content

词性标注工具类

yiflow edited this page Jul 18, 2017 · 3 revisions

#词性标注

Ansj具有词性标注的功能,ps:我以前做搜索的,觉得这玩意没大用,但是随着在工程上的应用。词性标注越来越重要了。 所以有必要单拿出来,和大家分享一下

  • Ansj词性标注是基于HMM的。

    主要利用了ngram的方式,相对而言作的还是比较粗糙

  • 词性标注的规范

    说句实话,这个自由度一直很高,因为既要支持用户自定义辞典。而用户的词性关我屁事。所以没有一个完整的统一。但是在实际使用中我们还是尽量以北大标注为准,在另一个文档中,有一份词性说明。我自己增加了nw词性,这个词性意思是是一个新词,但是具体是什么。我不知道。

  • 什么地方需要词性标注

    除了nlpanalysis 自带词性标注。其他的方式都是需要词性标注的。词性标注的方式是以工具类的形式调用。下面是调用代码,可以看到我们是利用new NatureRecognition(terms).recognition();对分词结果进行的标注。

    package org.ansj.demo;

    import java.io.IOException;
    import java.util.List;
    
    import org.ansj.domain.Term;
    import org.ansj.recognition.impl.NatureRecognition;
    import org.ansj.splitWord.analysis.ToAnalysis;
    
    /**
     * 词性标注
     * 
     * @author ansj
     * 
     */
    public class NatureDemo {
        public static void main(String[] args) throws IOException {
    		List<Term> terms = ToAnalysis.parse("Ansj中文分词是一个真正的ict的实现.并且加入了自己的一些数据结构和算法的分词.实现了高效率和高准确率的完美结合!");
    		new NatureRecognition(terms).recognition(); //词性标注
    		System.out.println(terms);
    	}
    }
  • 我只想用ansj的词性标注。我没有分词结果

    好吧,你怎么这么多事,:-)开玩笑。是因为我在实际工程中遇到了这个问题看下面demo

    package org.ansj.demo;    
    import java.util.Arrays;
    import java.util.List;
    import org.ansj.domain.Term;
    import org.ansj.recognition.impl.NatureRecognition;
    
    /**
     * 对非ansj的分词结果进行词性标注
     * @author ansj
     *
     */
    public class NatureTagDemo {
        public static void main(String[] args) {
    		String[] strs = {"对", "非", "ansj", "的", "分词", "结果", "进行", "词性", "标注"} ;
    		List<String> lists = Arrays.asList(strs) ;
    		List<Term> recognition = NatureRecognition.recognition(lists, 0) ;
    		System.out.println(recognition);
    	}
    }