/*
 * <summary></summary>
 * <author>He Han</author>
 * <email>hankcs.cn@gmail.com</email>
 * <create-date>2014/12/7 20:14</create-date>
 *
 * <copyright file="DemoPosTagging.java" company="上海林原信息科技有限公司">
 * Copyright (c) 2003-2014, 上海林原信息科技有限公司. All Right Reserved, http://www.linrunsoft.com/
 * This source is subject to the LinrunSpace License. Please contact 上海林原信息科技有限公司 to get more information.
 * </copyright>
 */
package com.hankcs.demo;

import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.corpus.dependency.CoNll.CoNLLSentence;
import com.hankcs.hanlp.corpus.dependency.CoNll.CoNLLWord;
import com.hankcs.hanlp.utility.TestUtility;

/**
 * 依存句法分析（CRF句法模型需要-Xms512m -Xmx512m -Xmn256m，MaxEnt和神经网络句法模型需要-Xms1g -Xmx1g -Xmn512m）
 * @author hankcs
 */
public class DemoDependencyParser extends TestUtility
{
    public static void main(String[] args)
    {
        CoNLLSentence sentence = HanLP.parseDependency("花鼓戏是哪个省的地方戏\n" +
                "　　花鼓戏，中国戏曲剧种，是各地方小戏花鼓、灯戏的总称。有湖南、湖北、皖北花鼓戏等，以湖南花鼓戏影响较大。花鼓戏源出于民歌，逐渐发展成一旦一丑的初级表演形式。清嘉庆时已有演出，同治初年已出现书生、书童、柳莺、婢女4个角色，演出也具有一定规模。\n" +
                "　　湖南花鼓戏又为湖南各地花鼓戏的总称，细分为：长沙花鼓戏（益阳花鼓戏）、岳阳花鼓戏（临湘花鼓戏）、衡州花鼓戏（衡阳花鼓戏）、邵阳花鼓戏、常德花鼓戏、永州花鼓戏（零陵花鼓戏）等六个流派。");
        System.out.println(sentence);
        // 可以方便地遍历它
        for (CoNLLWord word : sentence)
        {
            System.out.printf("%s --(%s)--> %s\n", word.LEMMA, word.DEPREL, word.HEAD.LEMMA);
        }
        // 也可以直接拿到数组，任意顺序或逆序遍历
        CoNLLWord[] wordArray = sentence.getWordArray();
        for (int i = wordArray.length - 1; i >= 0; i--)
        {
            CoNLLWord word = wordArray[i];
            System.out.printf("%s --(%s)--> %s\n", word.LEMMA, word.DEPREL, word.HEAD.LEMMA);
        }
        // 还可以直接遍历子树，从某棵子树的某个节点一路遍历到虚根
        CoNLLWord head = wordArray[12];
        while ((head = head.HEAD) != null)
        {
            if (head == CoNLLWord.ROOT) System.out.println(head.LEMMA);
            else System.out.printf("%s --(%s)--> ", head.LEMMA, head.DEPREL);
        }
    }
}
