// Stanford Dependencies - Code for producing and using Stanford dependencies. // Copyright © 2005-2014 The Board of Trustees of // The Leland Stanford Junior University. All Rights Reserved. // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // For more information, bug reports, fixes, contact: // Christopher Manning // Dept of Computer Science, Gates 1A // Stanford CA 94305-9010 // USA // parser-support@lists.stanford.edu // http://nlp.stanford.edu/software/stanford-dependencies.shtml package edu.stanford.nlp.trees.international.pennchinese; import edu.stanford.nlp.international.Language; import edu.stanford.nlp.trees.GrammaticalRelation; import edu.stanford.nlp.trees.HeadFinder; import edu.stanford.nlp.trees.tregex.TregexPatternCompiler; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import static edu.stanford.nlp.trees.GrammaticalRelation.DEPENDENT; import static edu.stanford.nlp.trees.GrammaticalRelation.GOVERNOR; /** * ChineseGrammaticalRelations is a * set of {@link GrammaticalRelation} objects for the Chinese language. * Examples are from CTB_001.fid * * @author Galen Andrew * @author Pi-Chuan Chang * @author Huihsin Tseng * @author Marie-Catherine de Marneffe * @see edu.stanford.nlp.trees.GrammaticalStructure * @see GrammaticalRelation * @see ChineseGrammaticalStructure */ public class ChineseGrammaticalRelations { /** This class is just a holder for static classes * that act a bit like an enum. */ private ChineseGrammaticalRelations() {} // By setting the HeadFinder to null, we find out right away at // runtime if we have incorrectly set the HeadFinder for the // dependency tregexes private static final TregexPatternCompiler tregexCompiler = new TregexPatternCompiler((HeadFinder) null); /** Return an unmodifiable list of grammatical relations. * Note: the list can still be modified by others, so you * should still get a lock with {@code valuesLock()} before * iterating over this list. * * @return A list of grammatical relations */ public static List<GrammaticalRelation> values() { return Collections.unmodifiableList(values); } public static final ReadWriteLock valuesLock = new ReentrantReadWriteLock(); public static Lock valuesLock() { return valuesLock.readLock(); } public static GrammaticalRelation valueOf(String s) { return GrammaticalRelation.valueOf(s, values(), valuesLock()); } /* * The "predicate" grammatical relation. */ // Fri Feb 20 15:42:54 2009 (pichuan) // I'm surprise this relation has patterns. // However it doesn't seem to match anything in CTB6. /* public static final GrammaticalRelation PREDICATE = new GrammaticalRelation(Language.Chinese, "pred", "predicate", PredicateGRAnnotation.class, DEPENDENT, "IP", new String[]{ " IP=target !> IP" }); public static class PredicateGRAnnotation extends GrammaticalRelationAnnotation { } */ /** * The "argument" grammatical relation. */ public static final GrammaticalRelation ARGUMENT = new GrammaticalRelation(Language.Chinese, "arg", "argument", DEPENDENT); /** * The "conjunct" grammatical relation. * Example: * <code> * <pre> * (ROOT * (IP * (NP * (NP (NR 上海) (NR 浦东)) * (NP (NN 开发) * (CC 与) * (NN 法制) (NN 建设))) * (VP (VV 同步)))) * * "The development of Shanghai 's Pudong is in step with the * establishment of its legal system" * * conj(建设, 开发) * </pre> * </code> */ public static final GrammaticalRelation CONJUNCT = new GrammaticalRelation(Language.Chinese, "conj", "conjunct", DEPENDENT, "FRAG|INC|IP|VP|NP|ADJP|PP|ADVP|UCP", tregexCompiler, "NP|ADJP|PP|ADVP|UCP < (!PU=target $+ CC)", // Split the first rule to the second rule to avoid the duplication: // ccomp(前来-12, 投资-13) // conj(前来-12, 投资-13) // // (IP // (VP // (VP (VV 前来)) // (VP // (VCD (VV 投资) (VV 办厂))) // (CC 和) // (VP (VV 洽谈) // (NP (NN 生意)))))) "VP < (!PU=target !$- VP $+ CC)", // TODO: this following line has to be fixed. // I think for now it just doesn't match anything. "VP|NP|ADJP|PP|ADVP|UCP < ( __=target $+ PU $+ CC)", //"VP|NP|ADJP|PP|ADVP|UCP < ( __=target $+ (PU < 、) )", // Consider changing the rule ABOVE to these rules. "VP < ( /^V/=target $+ ((PU < 、) $+ /^V/))", "NP < ( /^N/=target $+ ((PU < 、) $+ /^N/))", "ADJP < ( JJ|ADJP=target $+ ((PU < 、) $+ JJ|ADJP))", "PP < ( /^P/=target $+ ((PU < 、) $+ /^P/))", //"ADVP < ( /^AD/=target $+ ((PU < 、) $+ /^AD/))", "ADVP < ( /^AD/ $+ ((PU < 、) $+ /^AD/=target))", "UCP < ( __=target $+ (PU < 、) )", // This is for the 'conj's separated by commas. // For now this creates too much duplicates with 'ccomp'. // Need to look at more examples. "PP < (PP $+ PP=target )", "NP <( NP=target $+ ((PU < 、) $+ NP) )", "NP <( NN|NR|NT|PN=target $+ ((PU < ,|、) $+ NN|NR|NT|PN) )", "VP < (CC $+ VV=target)", // Original version of this did not have the outer layer of // the FRAG|INC|IP|VP. This caused a bug where the basic // dependencies could have cycles. "FRAG|INC|IP|VP < (VP < VV|VC|VRD|VCD|VE|VA < NP|QP|LCP $ IP|VP|VRD|VCD|VE|VC|VA=target) ", "IP|VP < ( IP|VP < NP|QP|LCP $ IP|VP=target )" ); /** * The "copula" grammatical relation. */ public static final GrammaticalRelation AUX_MODIFIER = new GrammaticalRelation(Language.Chinese, "cop", "copula", DEPENDENT, "VP", tregexCompiler, " VP < VC=target"); /** * The "coordination" grammatical relation. * A coordination is the relation between * an element and a conjunction.<p> * <p/> * Example: * <code> * <pre> * (ROOT * (IP * (NP * (NP (NR 上海) (NR 浦东)) * (NP (NN 开发) * (CC 与) * (NN 法制) (NN 建设))) * (VP (VV 同步)))) * * cc(建设, 与) * </pre> * </code> */ public static final GrammaticalRelation COORDINATION = new GrammaticalRelation(Language.Chinese, "cc", "coordination", DEPENDENT, "VP|NP|ADJP|PP|ADVP|UCP|IP|QP", tregexCompiler, "VP|NP|ADJP|PP|ADVP|UCP|IP|QP < (CC=target)"); /** * The "punctuation" grammatical relation. This is used for any piece of * punctuation in a clause, if punctuation is being retained in the * typed dependencies. */ public static final GrammaticalRelation PUNCTUATION = new GrammaticalRelation(Language.Chinese, "punct", "punctuation", DEPENDENT, ".*", tregexCompiler, "__ < PU=target"); /** * The "subject" grammatical relation. */ public static final GrammaticalRelation SUBJECT = new GrammaticalRelation(Language.Chinese, "subj", "subject", ARGUMENT); /** * The "nominal subject" grammatical relation. A nominal subject is * a subject which is an noun phrase.<p> * <p/> * Example: * <code> * <pre> * (ROOT * (IP * (NP * (NP (NR 上海) (NR 浦东)) * (NP (NN 开发) * (CC 与) * (NN 法制) (NN 建设))) * (VP (VV 同步)))) * * nsubj(同步, 建设) * </pre> * </code> */ public static final GrammaticalRelation NOMINAL_SUBJECT = new GrammaticalRelation(Language.Chinese, "nsubj", "nominal subject", SUBJECT, "IP|VP", tregexCompiler, "IP <( ( NP|QP=target!< NT ) $++ ( /^VP|VCD|IP/ !< VE !<VC !<SB !<LB ))", "NP !$+ VP < ( ( NP|DP|QP=target !< NT ) $+ ( /^VP|VCD/ !<VE !< VC !<SB !<LB))"); /** * The "topic" grammatical relation. * Example: * <code> * <pre> * (IP * (NP (NN 建筑)) * (VP (VC 是) * (NP * (CP * (IP * (VP (VV 开发) * (NP (NR 浦东)))) * (DEC 的)) * (QP (CD 一) * (CLP (M 项))) * (ADJP (JJ 主要)) * (NP (NN 经济) (NN 活动))))) * * top(是, 建筑) * </pre> * </code> */ public static final GrammaticalRelation TOP_SUBJECT = new GrammaticalRelation(Language.Chinese, "top", "topic", SUBJECT, "IP|VP", tregexCompiler, "IP|VP < ( NP|DP=target $+ ( VP < VC|VE ) )", "IP < (IP=target $+ ( VP < VC|VE))"); /** * The "nsubjpass" grammatical relation. * The noun is the subject of a passive sentence. * The passive marker in Chinese is "被". * <p>Example: * <code> * <pre> * (IP * (NP (NN 镍)) * (VP (SB 被) * (VP (VV 称作) * (NP (PU “) * (DNP * (NP * (ADJP (JJ 现代)) * (NP (NN 工业))) * (DEG 的)) * (NP (NN 维生素)) * (PU ”))))) * * nsubjpass(称作-3, 镍-1) * </pre> * </code> */ public static final GrammaticalRelation NOMINAL_PASSIVE_SUBJECT = new GrammaticalRelation(Language.Chinese, "nsubjpass", "nominal passive subject", NOMINAL_SUBJECT, "IP", tregexCompiler, "IP < (NP=target $+ (VP|IP < SB|LB))"); /** * The "clausal subject" grammatical relation. A clausal subject is * a subject which is a clause. * <p /> Examples: * <code> * <pre> * </pre> * </code> * <p /> * Note: This one might not exist in Chinese, or very rare. */ public static final GrammaticalRelation CLAUSAL_SUBJECT = new GrammaticalRelation(Language.Chinese, "csubj", "clausal subject", SUBJECT, "IP", tregexCompiler // This following rule is too general and collides with 'ccomp'. // Delete it for now. // TODO: come up with a new rule. Does this exist in Chinese? //"IP < (IP=target $+ ( VP !< VC))", ); /** * The "comp" grammatical relation. */ public static final GrammaticalRelation COMPLEMENT = new GrammaticalRelation(Language.Chinese, "comp", "complement", ARGUMENT); /** * The "obj" grammatical relation. */ public static final GrammaticalRelation OBJECT = new GrammaticalRelation(Language.Chinese, "obj", "object", COMPLEMENT); /** * The "direct object" grammatical relation. * <p />Examples: * <code> * <pre> *(IP * (NP (NR 上海) (NR 浦东)) * (VP * (VCD (VV 颁布) (VV 实行)) * (AS 了) * (QP (CD 七十一) * (CLP (M 件))) * (NP (NN 法规性) (NN 文件)))) * * In recent years Shanghai 's Pudong has promulgated and implemented * some regulatory documents. * * dobj(颁布, 文件) * </pre> * </code> */ public static final GrammaticalRelation DIRECT_OBJECT = new GrammaticalRelation(Language.Chinese, "dobj", "direct object", OBJECT, "CP|VP", tregexCompiler, "VP < ( /^V*/ $+ NP $+ NP|DP=target ) !< VC ", " VP < ( /^V*/ $+ NP|DP=target ! $+ NP|DP) !< VC ", "CP < (IP $++ NP=target ) !<< VC"); /* * The "indirect object" grammatical relation. */ // deleted by pichuan: no real matches /* public static final GrammaticalRelation INDIRECT_OBJECT = new GrammaticalRelation(Language.Chinese, "iobj", "indirect object", IndirectObjectGRAnnotation.class, OBJECT, "VP", new String[]{ " CP !> VP < ( VV $+ ( NP|DP|QP|CLP=target . NP|DP ) )" }); public static class IndirectObjectGRAnnotation extends GrammaticalRelationAnnotation { } */ /** * The "range" grammatical relation. The indirect * object of a VP is the quantifier phrase which is the (dative) object * of the verb.<p> * (VP (VV 成交) * (NP (NN 药品)) * (QP (CD 一亿多) * (CLP (M 元)))) * <code>range </code>(成交, 元) */ public static final GrammaticalRelation RANGE = new GrammaticalRelation(Language.Chinese, "range", "range", OBJECT, "VP", tregexCompiler, " VP < ( NP|DP|QP $+ NP|DP|QP=target)", "VP < ( VV $+ QP=target )"); /** * The "prepositional object" grammatical relation. * (PP (P 根据) * (NP * (DNP * (NP * (NP (NN 国家)) * (CC 和) * (NP (NR 上海市))) * (DEG 的)) * (ADJP (JJ 有关)) * (NP (NN 规定)))) * Example: * pobj(根据-13, 规定-19) */ public static final GrammaticalRelation PREPOSITIONAL_OBJECT = new GrammaticalRelation(Language.Chinese, "pobj", "prepositional object", OBJECT, "^PP", tregexCompiler, "/^PP/ < /^P/ < /^NP|^DP|QP/=target"); /** * The "localizer object" grammatical relation. * (LCP * (NP (NT 近年)) * (LC 来)) * lobj(来-4, 近年-3) */ public static final GrammaticalRelation TIME_POSTPOSITION = new GrammaticalRelation(Language.Chinese, "lobj", "localizer object", OBJECT, "LCP", tregexCompiler, "LCP < ( NP|QP|DP=target $+ LC)"); /** * The "attributive" grammatical relation. * (IP * (NP (NR 浦东)) * (VP (VC 是) * (NP (NN 工程))))) * <code> attr </code> (是, 工程) */ public static final GrammaticalRelation ATTRIBUTIVE = new GrammaticalRelation(Language.Chinese, "attr", "attributive", COMPLEMENT, "VP", tregexCompiler, "VP < /^VC$/ < NP|QP=target"); /** * The "clausal" grammatical relation. * (IP * (VP * (VP * (ADVP (AD 一)) * (VP (VV 出现))) * (VP * (ADVP (AD 就)) * (VP (SB 被) * (VP (VV 纳入) * (NP (NN 法制) (NN 轨道))))))))))) * <code> ccomp </code> (出现, 纳入) */ public static final GrammaticalRelation CLAUSAL_COMPLEMENT = new GrammaticalRelation(Language.Chinese, "ccomp", "clausal complement", COMPLEMENT, "VP|ADJP|IP", tregexCompiler, " VP < VV|VC|VRD|VCD !< NP|QP|LCP < IP|VP|VRD|VCD=target > IP|VP "); // " VP|IP < ( VV|VC|VRD|VCD !$+ NP|QP|LCP ) > (IP < IP|VP|VRD|VCD=target) " // "VP < (S=target < (VP !<, TO|VBG) !$-- NP)", /** * The "xclausal complement" grammatical relation. * Example: */ // pichuan: this is difficult to recognize in Chinese. // remove the rules since it (always) collides with ccomp public static final GrammaticalRelation XCLAUSAL_COMPLEMENT = new GrammaticalRelation(Language.Chinese, "xcomp", "xclausal complement", COMPLEMENT, "VP|ADJP", tregexCompiler // TODO: these rules seem to always collide with ccomp. // Is this really desirable behavior? //"VP !> (/^VP/ < /^VC$/ ) < (IP=target < (VP < P))", //"ADJP < (IP=target <, (VP <, P))", //"VP < (IP=target < (NP $+ NP|ADJP))", //"VP < (/^VC/ $+ (VP=target < VC < NP))" ); /** * The "cp marker" grammatical relation. * (CP * (IP * (VP * (VP (VV 振兴) * (NP (NR 上海))) * (PU ,) * (VP (VV 建设) * (NP * (NP (NN 现代化)) * (NP (NN 经济) (PU 、) (NN 贸易) (PU 、) (NN 金融)) * (NP (NN 中心)))))) * (DEC 的)) * Example: *<code> cpm </code> (振兴, 的) */ public static final GrammaticalRelation COMPLEMENTIZER = new GrammaticalRelation(Language.Chinese, "cpm", "complementizer", COMPLEMENT, "^CP", tregexCompiler, "/^CP/ < (__ $++ DEC=target)"); /* * The "adjectival complement" grammatical relation. * Example: */ // deleted by pichuan: no real matches /* public static final GrammaticalRelation ADJECTIVAL_COMPLEMENT = new GrammaticalRelation(Language.Chinese, "acomp", "adjectival complement", AdjectivalComplementGRAnnotation.class, COMPLEMENT, "VP", tregexCompiler, new String[]{ "VP < (ADJP=target !$-- NP)" }); public static class AdjectivalComplementGRAnnotation extends GrammaticalRelationAnnotation { } */ /** * The "localizer complement" grammatical relation. * (VP (VV 占) * (LCP * (QP (CD 九成)) * (LC 以上))) * (PU ,) * (VP (VV 达) * (QP (CD 四百三十八点八亿) * (CLP (M 美元)))) * <code> loc </code> (占-11, 以上-13) */ public static final GrammaticalRelation LC_COMPLEMENT = new GrammaticalRelation(Language.Chinese, "loc", "localizer complement", COMPLEMENT, "VP|IP", tregexCompiler, "VP|IP < LCP=target "); /** * The "resultative complement" grammatical relation. */ public static final GrammaticalRelation RES_VERB = new GrammaticalRelation(Language.Chinese, "rcomp", "result verb", COMPLEMENT, "VRD", tregexCompiler, "VRD < ( /V*/ $+ /V*/=target )"); /** * The "modifier" grammatical relation. */ public static final GrammaticalRelation MODIFIER = new GrammaticalRelation(Language.Chinese, "mod", "modifier", DEPENDENT); /** * The "coordinated verb compound" grammatical relation. * (VCD (VV 颁布) (VV 实行)) * comod(颁布-5, 实行-6) */ public static final GrammaticalRelation VERB_COMPOUND = new GrammaticalRelation(Language.Chinese, "comod", "coordinated verb compound", MODIFIER, "VCD", tregexCompiler, "VCD < ( VV|VA $+ VV|VA=target)"); /** * The "modal" grammatical relation. * (IP * (NP (NN 利益)) * (VP (VV 能) * (VP (VV 得到) * (NP (NN 保障))))))))) * <code> mmod </code> (得到-64, 能-63) */ public static final GrammaticalRelation MODAL_VERB = new GrammaticalRelation(Language.Chinese, "mmod", "modal verb", MODIFIER, "VP", tregexCompiler, "VP < ( VV=target !< /^没有$/ $+ VP|VRD )"); /** * The "passive" grammatical relation. */ public static final GrammaticalRelation AUX_PASSIVE_MODIFIER = new GrammaticalRelation(Language.Chinese, "pass", "passive", MODIFIER, "VP", tregexCompiler, new String[]{ "VP < SB|LB=target" }); /** * The "ba" grammatical relation. */ public static final GrammaticalRelation BA = new GrammaticalRelation(Language.Chinese, "ba", "ba", DEPENDENT, "VP|IP", tregexCompiler, "VP|IP < BA=target "); /** * The "temporal modifier" grammatical relation. * (IP * (VP * (NP (NT 以前)) * (ADVP (AD 不)) * (ADVP (AD 曾)) * (VP (VV 遇到) (AS 过)))) *(VP * (LCP * (NP (NT 近年)) * (LC 来)) * (VP * (VCD (VV 颁布) (VV 实行)) * <code> tmod </code> (遇到, 以前) */ public static final GrammaticalRelation TEMPORAL_MODIFIER = new GrammaticalRelation(Language.Chinese, "tmod", "temporal modifier", MODIFIER, "VP|IP", tregexCompiler, "VP|IP < (NP=target < NT !.. /^VC$/ $++ VP)"); /* This rule actually matches nothing. There's another tmod rule. This is removed for now. (pichuan) Sun Mar 8 18:22:40 2009 */ /* public static final GrammaticalRelation TEMPORAL_MODIFIER = new GrammaticalRelation(Language.Chinese, "tmod", "temporal modifier", TemporalModifierGRAnnotation.class, MODIFIER, "VP|IP|ADJP", tregexCompiler, new String[]{ " VC|VE ! >> VP|ADJP < NP=target < NT", "VC|VE !>>IP <( NP=target < NT $++ VP !< VC|VE )" }); public static class TemporalModifierGRAnnotation extends GrammaticalRelationAnnotation { } */ /** * The "temporal clause" grammatical relation. *(VP(PP (P 等) (LCP (IP * (VP (VV 积累) (AS 了) * (NP (NN 经验)))) * (LC 以后))) * (ADVP (AD 再)) * (VP (VV 制定) * (NP (NN 法规) (NN 条例)))) * (PU ”))) * (DEC 的)) * (NP (NN 做法))))))) * <code> lccomp </code> (以后, 积累) */ // pichuan: previously "tclaus" public static final GrammaticalRelation TIME = new GrammaticalRelation(Language.Chinese, "lccomp", "clausal complement of localizer", MODIFIER, "LCP", tregexCompiler, "/LCP/ < ( IP=target $+ LC )"); /** * The "relative clause modifier" grammatical relation. * (CP (IP (VP (NP (NT 以前)) * (ADVP (AD 不)) * (ADVP (AD 曾)) * (VP (VV 遇到) (AS 过)))) * (DEC 的)) * (NP * (NP * (ADJP (JJ 新)) * (NP (NN 情况))) * (PU 、) * (NP * (ADJP (JJ 新)) * (NP (NN 问题))))))) * (PU 。))) * the new problem that has not been encountered. * <code> rcmod </code> (问题, 遇到) */ public static final GrammaticalRelation RELATIVE_CLAUSE_MODIFIER = new GrammaticalRelation(Language.Chinese, "rcmod", "relative clause modifier", MODIFIER, "NP", tregexCompiler, // TODO: we should figure out various ways to improve this pattern to // improve both its precision and recall "NP $++ (CP=target ) > NP ", "NP < ( CP=target $++ NP )" ); /** * The "number modifier" grammatical relation. * (NP * (NP (NN 拆迁) (NN 工作)) * (QP (CD 若干)) * (NP (NN 规定))) * nummod(件-24, 七十一-23) * nummod(规定-48, 若干-47) */ public static final GrammaticalRelation NUMERIC_MODIFIER = new GrammaticalRelation(Language.Chinese, "nummod", "numeric modifier", MODIFIER, "QP|NP", tregexCompiler, "QP < CD=target", "NP < ( QP=target !<< CLP )"); /** * The "ordnumber modifier" grammatical relation. */ public static final GrammaticalRelation ODNUMERIC_MODIFIER = new GrammaticalRelation(Language.Chinese, "ordmod", "numeric modifier", MODIFIER, "NP|QP", tregexCompiler, "NP < QP=target < ( OD !$+ CLP )", "QP < (OD=target $+ CLP)"); /** * The "classifier modifier" grammatical relation. * (QP (CD 七十一) * (CLP (M 件))) * (NP (NN 法规性) (NN 文件))))) * <code> clf </code> (文件-26, 件-24) */ public static final GrammaticalRelation NUMBER_MODIFIER = new GrammaticalRelation(Language.Chinese, "clf", "classifier modifier", MODIFIER, "^NP|DP|QP", tregexCompiler, "NP|QP < ( QP =target << M $++ NN|NP|QP)", "DP < ( DT $+ CLP=target )"); /** * The "noun compound modifier" grammatical relation. * Example: * (ROOT * (IP * (NP * (NP (NR 上海) (NR 浦东)) * (NP (NN 开发) * (CC 与) * (NN 法制) (NN 建设))) * (VP (VV 同步)))) * <code> nn </code> (浦东, 上海) */ public static final GrammaticalRelation NOUN_COMPOUND_MODIFIER = new GrammaticalRelation(Language.Chinese, "nn", "nn modifier", MODIFIER, "^NP", tregexCompiler, "NP < (NN|NR|NT=target $+ NN|NR|NT)", "NP < (NN|NR|NT $+ FW=target)", " NP < (NP=target !$+ PU|CC $++ NP|PRN )"); /** * The "adjetive modifier" grammatical relation. * (NP * (ADJP (JJ 新)) * (NP (NN 情况))) * (PU 、) * (NP * (ADJP (JJ 新)) * (NP (NN 问题))))))) * <code> amod </code> (情况-34, 新-33) */ public static final GrammaticalRelation ADJECTIVAL_MODIFIER = new GrammaticalRelation(Language.Chinese, "amod", "adjectival modifier", MODIFIER, "NP|CLP|QP", tregexCompiler, "NP|CLP|QP < (ADJP=target $++ NP|CLP|QP ) "); /** * The "adverbial modifier" grammatical relation. * (VP * (ADVP (AD 基本)) * (VP (VV 做到) (AS 了))) * advmod(做到-74, 基本-73) */ public static final GrammaticalRelation ADVERBIAL_MODIFIER = new GrammaticalRelation(Language.Chinese, "advmod", "adverbial modifier", MODIFIER, "VP|ADJP|IP|CP|PP|NP|QP", tregexCompiler, "VP|ADJP|IP|CP|PP|NP < (ADVP=target !< (AD < /^(\\u4e0d|\\u6CA1|\\u6CA1\\u6709)$/))", "VP|ADJP < AD|CS=target", "QP < (ADVP=target $+ QP)", "QP < ( QP $+ ADVP=target)"); /** * The "verb modifier" grammatical relation. */ public static final GrammaticalRelation IP_MODIFIER = new GrammaticalRelation(Language.Chinese, "vmod", "participle modifier", MODIFIER, "NP", tregexCompiler, "NP < IP=target "); /** * The "parenthetical modifier" grammatical relation. */ public static final GrammaticalRelation PRN_MODIFIER = new GrammaticalRelation(Language.Chinese, "prnmod", "prn odifier", MODIFIER, "NP", tregexCompiler, "NP < PRN=target "); /** * The "negative modifier" grammatical relation. *(VP * (NP (NT 以前)) * (ADVP (AD 不)) * (ADVP (AD 曾)) * (VP (VV 遇到) (AS 过)))) * neg(遇到-30, 不-28) */ public static final GrammaticalRelation NEGATION_MODIFIER = new GrammaticalRelation(Language.Chinese, "neg", "negation modifier", ADVERBIAL_MODIFIER, "VP|ADJP|IP", tregexCompiler, "VP|ADJP|IP < (AD|VV=target < /^(\\u4e0d|\\u6CA1|\\u6CA1\\u6709)$/)", "VP|ADJP|IP < (ADVP|VV=target < (AD < /^(\\u4e0d|\\u6CA1|\\u6CA1\\u6709)$/))"); /** * The "determiner modifier" grammatical relation. * (NP * (DP (DT 这些)) * (NP (NN 经济) (NN 活动))) * det(活动-61, 这些-59) */ public static final GrammaticalRelation DETERMINER = new GrammaticalRelation(Language.Chinese, "det", "determiner", MODIFIER, "^NP|DP", tregexCompiler, "/^NP/ < (DP=target $++ NP )" //"DP < DT < QP=target" ); /* * The "possession modifier" grammatical relation. */ // Fri Feb 20 15:40:13 2009 (pichuan) // I think this "poss" relation is just WRONG. // DEC is a complementizer or a nominalizer, // this rule probably originally want to capture "DEG". // But it seems like it's covered by "assm" (associative marker). /* public static final GrammaticalRelation POSSESSION_MODIFIER = new GrammaticalRelation(Language.Chinese, "poss", "possession modifier", PossessionModifierGRAnnotation.class, MODIFIER, "NP", tregexCompiler, new String[]{ "NP < ( PN=target $+ DEC $+ NP )" }); public static class PossessionModifierGRAnnotation extends GrammaticalRelationAnnotation { } */ /* * The "possessive marker" grammatical relation. */ // Similar to the comments to "poss", // I think this relation is wrong and will not appear. /* public static final GrammaticalRelation POSSESSIVE_MODIFIER = new GrammaticalRelation(Language.Chinese, "possm", "possessive marker", PossessiveModifierGRAnnotation.class, MODIFIER, "NP", tregexCompiler, new String[]{ "NP < ( PN $+ DEC=target ) " }); public static class PossessiveModifierGRAnnotation extends GrammaticalRelationAnnotation { } */ /** * The "dvp marker" grammatical relation. * (DVP * (VP (VA 简单)) * (DEV 的)) * (VP (VV 采取) * dvpm(简单-7, 的-8) */ public static final GrammaticalRelation DVP_MODIFIER = new GrammaticalRelation(Language.Chinese, "dvpm", "dvp marker", MODIFIER, "DVP", tregexCompiler, "DVP < (__ $+ DEV=target ) "); /** * The "dvp modifier" grammatical relation. * <code> * <pre> * (ADVP (AD 不)) * (VP (VC 是) * (VP * (DVP * (VP (VA 简单)) * (DEV 的)) * (VP (VV 采取) * * dvpmod(采取-9, 简单-7) * </pre> * </code> */ public static final GrammaticalRelation DVPM_MODIFIER = new GrammaticalRelation(Language.Chinese, "dvpmod", "dvp modifier", MODIFIER, "VP", tregexCompiler, " VP < ( DVP=target $+ VP) "); /** * The "associative marker" grammatical relation. * <code> * <pre> * (NP (DNP * (NP (NP (NR 浦东)) * (NP (NN 开发))) * (DEG 的)) * (ADJP (JJ 有序)) * (NP (NN 进行))) * * assm(开发-31, 的-32) * </pre> * </code> */ public static final GrammaticalRelation ASSOCIATIVE_MODIFIER = new GrammaticalRelation(Language.Chinese, "assm", "associative marker", MODIFIER, "DNP", tregexCompiler, " DNP < ( __ $+ DEG=target ) "); /** * The "associative modifier" grammatical relation. * (NP * (NP (NR 深圳) (ETC 等)) * (NP (NN 特区)))) * (DEG 的)) * (NP (NN 经验) (NN 教训)))) * assmod(教训-40, 特区-37) */ public static final GrammaticalRelation ASSOCIATIVEM_MODIFIER = new GrammaticalRelation(Language.Chinese, "assmod", "associative modifier", MODIFIER, "NP|QP", tregexCompiler, "NP|QP < ( DNP =target $++ NP|QP ) "); /** * The "prepositional modifier" grammatical relation. *(IP * (PP (P 对) * (NP (PN 此))) * (PU ,) * (NP (NR 浦东)) * (VP * (VP * (ADVP (AD 不)) * (VP (VC 是) * (VP * (DVP * (VP (VA 简单)) * (DEV 的)) * (VP (VV 采取) * <code> prep </code> (采取-9, 对-1) */ public static final GrammaticalRelation PREPOSITIONAL_MODIFIER = new GrammaticalRelation(Language.Chinese, "prep", "prepositional modifier", MODIFIER, "^NP|VP|IP", tregexCompiler, "/^NP/ < /^PP/=target", "VP < /^PP/=target", "IP < /^PP/=target "); /** * The "clause modifier of a preposition" grammatical relation. * (PP (P 因为) * (IP * (VP * (VP * (ADVP (AD 一)) * (VP (VV 开始))) * (VP * (ADVP (AD 就)) * (ADVP (AD 比较)) * (VP (VA 规范))))))) * <code> pccomp </code> (因为-18, 开始-20) */ // pichuan: previously "clmpd" public static final GrammaticalRelation CL_MODIFIER = new GrammaticalRelation(Language.Chinese, "pccomp", "clause complement of a preposition", MODIFIER, "^PP|IP", tregexCompiler, "PP < (P $+ IP|VP =target)", "IP < (CP=target $++ VP)"); /** * The "prepositional localizer modifier" grammatical relation. * (PP (P 在) * (LCP * (NP * (DP (DT 这) * (CLP (M 片))) * (NP (NN 热土))) * (LC 上))) * plmod(在-25, 上-29) */ public static final GrammaticalRelation PREPOSITIONAL_LOC_MODIFIER = new GrammaticalRelation(Language.Chinese, "plmod", "prepositional localizer modifier", MODIFIER, "PP", tregexCompiler, "PP < ( P $++ LCP=target )"); /** * The "aspect marker" grammatical relation. * (VP * (ADVP (AD 基本)) * (VP (VV 做到) (AS 了) * <code> asp </code> (做到,了) */ public static final GrammaticalRelation PREDICATE_ASPECT = new GrammaticalRelation(Language.Chinese, "asp", "aspect", MODIFIER, "VP", tregexCompiler, "VP < ( /^V*/ $+ AS=target)"); /** * The "participial modifier" grammatical relation. */ public static final GrammaticalRelation PART_VERB = new GrammaticalRelation(Language.Chinese, "prtmod", "particle verb", MODIFIER, "VP|IP", tregexCompiler, "VP|IP < ( MSP=target )"); /** * The "etc" grammatical relation. *(NP * (NP (NN 经济) (PU 、) (NN 贸易) (PU 、) (NN 建设) (PU 、) (NN 规划) (PU 、) (NN 科技) (PU 、) (NN 文教) (ETC 等)) * (NP (NN 领域))))) * <code> etc </code> (办法-70, 等-71) */ public static final GrammaticalRelation ETC = new GrammaticalRelation(Language.Chinese, "etc", "ETC", MODIFIER, "^NP", tregexCompiler, "/^NP/ < (NN|NR . ETC=target)"); /** * The "semantic dependent" grammatical relation. */ public static final GrammaticalRelation SEMANTIC_DEPENDENT = new GrammaticalRelation(Language.Chinese, "sdep", "semantic dependent", DEPENDENT); /** * The "xsubj" grammatical relation. *(IP * (NP (PN 有些)) * (VP * (VP * (ADVP (AD 还)) * (ADVP (AD 只)) * (VP (VC 是) * (NP * (ADJP (JJ 暂行)) * (NP (NN 规定))))) * (PU ,) * (VP (VV 有待) * (IP * (VP * (PP (P 在) * (LCP * (NP (NN 实践)) * (LC 中))) * (ADVP (AD 逐步)) * (VP (VV 完善)))))))))) * <code> xsubj </code> (完善-26, 有些-14) */ public static final GrammaticalRelation CONTROLLED_SUBJECT = new GrammaticalRelation(Language.Chinese, "xsubj", "controlled subject", SEMANTIC_DEPENDENT, "VP", tregexCompiler, "VP !< NP < VP > (IP !$- NP !< NP !>> (VP < VC ) >+(VP) (VP $-- NP=target))"); private static final GrammaticalRelation[] rawValues = { //ADJECTIVAL_COMPLEMENT, ADJECTIVAL_MODIFIER, ADVERBIAL_MODIFIER, ARGUMENT, ASSOCIATIVEM_MODIFIER, ASSOCIATIVE_MODIFIER, ATTRIBUTIVE, AUX_MODIFIER, AUX_PASSIVE_MODIFIER, BA, CLAUSAL_COMPLEMENT, CLAUSAL_SUBJECT, CL_MODIFIER, COMPLEMENT, COMPLEMENTIZER, CONJUNCT, CONTROLLED_SUBJECT, COORDINATION, DEPENDENT, DETERMINER, DIRECT_OBJECT, DVPM_MODIFIER, DVP_MODIFIER, ETC, GOVERNOR, //INDIRECT_OBJECT, IP_MODIFIER, LC_COMPLEMENT, MODAL_VERB, MODIFIER, NEGATION_MODIFIER, NOMINAL_PASSIVE_SUBJECT, NOMINAL_SUBJECT, NOUN_COMPOUND_MODIFIER, NUMBER_MODIFIER, NUMERIC_MODIFIER, OBJECT, ODNUMERIC_MODIFIER, PART_VERB, //POSSESSION_MODIFIER, //POSSESSIVE_MODIFIER, //PREDICATE, PREDICATE_ASPECT, PREPOSITIONAL_LOC_MODIFIER, PREPOSITIONAL_MODIFIER, PREPOSITIONAL_OBJECT, PRN_MODIFIER, PUNCTUATION, RANGE, RELATIVE_CLAUSE_MODIFIER, RES_VERB, SEMANTIC_DEPENDENT, SUBJECT, TEMPORAL_MODIFIER, TIME, TIME_POSTPOSITION, TOP_SUBJECT, VERB_COMPOUND, XCLAUSAL_COMPLEMENT, }; private static final List<GrammaticalRelation> values = new ArrayList<>(); // Cache frequently used views of the values list private static final List<GrammaticalRelation> synchronizedValues = Collections.synchronizedList(values); public static final Set<GrammaticalRelation> universalValues = new HashSet<>(); /** Map from Chinese GrammaticalRelation short names to their corresponding * GrammaticalRelation objects. */ public static final Map<String, GrammaticalRelation> shortNameToGRel = new ConcurrentHashMap<>(); static { for (int i = 0; i < rawValues.length; i++) { GrammaticalRelation gr = rawValues[i]; synchronizedValues.add(gr); } valuesLock().lock(); try { for (GrammaticalRelation gr : ChineseGrammaticalRelations.values()) { shortNameToGRel.put(gr.getShortName(), gr); } } finally { valuesLock().unlock(); } } }