Phrase & clause chunking¶
YAML-driven shallow chunker: maximal munch (longer span wins; priority
breaks ties), then entity locks as NP. Clause types come from
clause_rules.yml via ClauseParser, not from phrase_rules.yml.
from burmesenlp import BurmeseNLP, ClauseType
nlp = BurmeseNLP()
doc = nlp.process("မိုးရွာလျှင်အိမ်မှာနေမည်။")
for sent in doc.sentence_trees:
for clause in sent.clauses:
print(clause.type, clause.text)
for phr in clause.phrases:
print(" ", phr.type, phr.text, phr.semantic_role)
Pipeline order¶
ClauseParser consumes phrase chunks (plus markers from YAML), never
raw words alone. Relative constructions nest inside NP.
Hierarchy¶
Document
└── SyntaxSentence # doc.sentence_trees
└── Clause # MAIN | CONDITIONAL | …
└── Phrase # NP / VP / PP / …
└── children # RelativeModifier + HeadNoun
Flat doc.chunks remain phrase spans for backward compatibility.
Clause types (V1)¶
| Type | Markers (see YAML) |
|---|---|
MAIN |
end markers / remainder with VP |
CONDITIONAL |
လျှင်, ရင်, လျှင်မူ |
REASON |
ကြောင့်, သဖြင့်, … |
PURPOSE |
ရန်, အောင်, ဖို့ (requires NP before VP) |
CONTRAST |
သော်လည်း, သော်, … |
RELATIVE |
nested in NP only (သော, တဲ့, …) |
Bare VP + ရန် becomes a Purpose VP (role=PurposeVP), not a PURPOSE clause.
Grammar files¶
Under src/burmesenlp/corpus/grammar/:
phrase_rules.yml/phrase_markers.yml/phrase_exceptions.ymlclause_rules.yml— markers + phrase patternspostposition_roles.yml— default semantic roles for PPs (V1 assigns default only)