nltk.tree.Tree
рдореЗрдВ chomsky_normal_form()
рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╛рдХрд░рдг рдирд╣реАрдВ рд╣реИред рдЪреВрдВрдХрд┐ рд╕реАрдПрдирдПрдл рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рдПрдХ рд░реВрдк рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
NLTK рдореЗрдВ chomsky_normal_form()
рдПрдХ рдЯреНрд░реА-рдмрд┐рдирд╛рд░рд╛рдЗрдЬрд╝реЗрд╢рди рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕реАрдзреЗ рд╡реНрдпрд╛рдХрд░рдг рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рджреЗрдЦреЗрдВ https://github.com/nltk/nltk/blob/develop/nltk/treetransforms.py
CNF рдореЗрдВ рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдмрд▓реНрдХрд┐ рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкрд░ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдП рддреЛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдпреЛрдЧрджрд╛рди рджреЗрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИ
рдореИрдВ рдареАрдХ рдЗрд╕реА рдХреЗ рд▓рд┐рдП рдЗрдзрд░-рдЙрдзрд░ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ рдФрд░ рдпрд╣реАрдВ рдареЛрдХрд░ рдЦрд╛ рдЧрдпрд╛,
рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдирдПрд▓рдЯреАрдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдХреЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрдирд╛рдпрд╛ рд╣реИ (рдФрд░ рдЗрд╕рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рд╕реАрдХреЗрд╡рд╛рдИ рдкрд╛рд░реНрд╕рд░ рднреА, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢реВрдиреНрдп рдкреНрд░рдмрдВрдзрди рдХреЗ рдмрд┐рдирд╛, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд╡реИрд╕реЗ рднреА рдХрдИ рд╡реНрдпрд╛рдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдЯреАрдЖрдИрдПрд╕ рдкрд░реАрдХреНрд╖рдг рд╡реНрдпрд╛рдХрд░рдг ), рдПрдХ рдкреАрдЖрд░ рднреЗрдЬрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА, рдмрд╕ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдмрдиреА рд╣реБрдИ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ https://github.com/nltk/nltk/issues/1722 рдореЗрдВ рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж)
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрджрд┐ рдЕрдиреНрдп рдЕрдВрдХ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХреЛрдИ рд╕реАрд╡рд╛рдИрдХреЗ рдкрд╛рд░реНрд╕рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рднреА рднреЗрдЬрдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреА
@virresh @alvations #1722 рдХреЛ рдмрд╛рд╕реА рд╣реЛрдиреЗ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдЬреАрд╡рди рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред
@virresh рдпрджрд┐ рдЖрдк рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореЗрд░реЗ рдореЗрд╣рдорд╛рди
https://github.com/aetilley/pcfg/blob/master/src/pcfg.py#L524
рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдПрд▓реНрдЧреЛрд░рд┐рдердо рдореЗрдВ рдЪрд░рдгреЛрдВ рдХреЛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рднреА рдпрд╛рдж рд╣реИ рдХрд┐ рд╡реЗ рд╕рдордХрдХреНрд╖ рдереЗред рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВред
рдореИрдВ рджреВрд╕рд░реЗ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред
рд╕реАрдПрдлрд╝рдЬреА рдХреЗ рд▓рд┐рдП рд╕реАрдПрдирдПрдл рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ; рд╡реЗ рдбреБрдкреНрд▓реАрдХреЗрдЯ рдкреНрд░реЛрдбрдХреНрд╢рдВрд╕ рд▓реМрдЯрд╛ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
import nltk
grammar = nltk.data.load("grammars/large_grammars/atis.cfg")
grammar = grammar.chomsky_normal_form()
print(len(grammar.productions()))
print(len(list(set(grammar.productions()))))
рд╡реНрдпрд╛рдХрд░рдг рдореЗрдВ 20344
рдкреНрд░реЛрдбрдХреНрд╢рдВрд╕ рд╣реИрдВ, рдЬреЛ рдПрдХ рд╕реЗрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрдиреЗ рдкрд░ 12396
рдкреНрд░реЛрдбрдХреНрд╢рдВрд╕ рджреЗрддреЗ рд╣реИрдВред