Nltk: chomsky_normal_form() untuk tata bahasa

Dibuat pada 13 Nov 2017  ·  4Komentar  ·  Sumber: nltk/nltk

nltk.tree.Tree memiliki fungsi chomsky_normal_form() , tetapi tata bahasa tidak. Karena CNF adalah bentuk tata bahasa , itu juga seharusnya.

enhancement nice idea parsing

Semua 4 komentar

chomsky_normal_form() di NLTK adalah fungsi binarisasi pohon. Saya pikir itu tidak dapat langsung diterapkan ke tata bahasa, lihat https://github.com/nltk/nltk/blob/develop/nltk/treetransforms.py

Transformasi tata bahasa ke CNF agak rumit dan belum diimplementasikan. Akan lebih baik jika ada upaya untuk itu, tetapi itu mungkin bukan hal yang sepele.

Jika ada yang tertarik untuk berkontribusi, algoritme yang baik untuk memulai adalah

  • Lange dan Lei (2009). "Ke CNF atau tidak ke CNF? Versi Algoritma CYK yang Efisien Namun Rapi"

Saya sedang mencari-cari persis ini dan tersandung di sini,
Saya telah membuat fungsi ini dengan mengeksploitasi internal nltk untuk salah satu proyek saya (dan parser CKY di atasnya juga, meskipun tanpa penanganan nol, tapi saya yakin ini berguna untuk banyak tata bahasa, misalnya tata bahasa uji ATIS ), akan dengan senang hati mengirim PR, hanya ingin mengonfirmasi apakah masalah ini masih berlaku dan tersedia untuk dikerjakan (terutama setelah komentar terakhir di https://github.com/nltk/nltk/issues/1722)

Juga jika tidak ada parser CYK seperti yang disebutkan dalam edisi lain, saya akan dengan senang hati mengirim PR untuk itu juga

@virresh @alvations Maaf membiarkan #1722 menjadi basi. Hidup telah menghalangi.

@virresh Jika Anda ingin

https://github.com/aetilley/pcfg/blob/master/src/pcfg.py#L524

Saya ingat itu menyusun ulang langkah-langkah dalam algoritme yang biasa tetapi saya juga ingat meyakinkan diri saya sendiri bahwa itu setara. Lanjutkan dengan hati hati.

Saya akan menutup masalah lainnya.

Ada masalah dengan CNF untuk CFG; mereka mengembalikan produksi duplikat. Anda dapat menguji ini dengan:

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()))))

tata bahasa memiliki 20344 produksi, yang ketika dikonversi ke set memberikan 12396 produksi.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat