Anda tidak pernah membutuhkan CNF. Ini memiliki kelemahan mengubah struktur tata bahasa. Tetapi Anda perlu memperkenalkan non-terminal perantara sehingga tidak ada sisi kanan lebih dari 2 (2-bentuk) karena panjang RHS menentukan kompleksitas. Upaya terbaik untuk menjelaskan hal itu secara intuitif adalah, jika ingatanku, sebuah makalah oleh Beau Shiel, "Observations on Context Free Parsing", yang diterbitkan pada tahun 1976 dalam konferensi lingistik komputasi. Algoritma Earley menggunakan 2-form secara implisit. Itu hanya tersembunyi di dalam algoritma. Mengenai pemulihan dan penanganan hutan parse, Anda harus melihat web di "parsing intersection forest". Ini sebenarnya sangat mudah. Banyak makalah di web, jika Anda mendapatkan (dari kutipan atau daftar isi) judul atau penulis untuk mencarinya secara langsung.
Sebenarnya, Anda bisa melakukan lebih banyak daripada CF, dan masih mendapatkan hutan parse dalam waktu polinomial. Pertanyaannya adalah, kadang-kadang: apa yang dapat Anda lakukan dengannya begitu Anda memilikinya?
Salah satu tujuan dari artikel terakhir yang Anda sebutkan adalah untuk menunjukkan bahwa algoritma yang kompleks (seperti GLR) tidak harus membeli apa pun dalam waktu atau ruang, dan dapat mengubah hutan parse Anda.
Satu komentar tentang mengajar. Saya pikir Earley, seminal seperti itu, terlalu rumit untuk mengajar, dan dapat digantikan oleh algoritma yang lebih sederhana dengan konten pendidikan yang pada dasarnya sama. Mengajar adalah tentang konsep atau teknologi. Dalam algoritma Earley, konsep-konsep penting disembunyikan dalam kerumitan detail, dan dari sudut pandang teknologi itu sudah ketinggalan zaman. Itu adalah karya yang bagus, tetapi itu tidak berarti itu adalah pendekatan pedagogis terbaik.
Mungkin ada lebih banyak informasi dalam literatur linguistik komputasi daripada di saluran ilmu komputer yang biasa. Saya tidak memiliki buku Ceriel-Grune-Jacobs, tetapi saya akan terkejut jika mereka tidak memiliki semua referensi yang tepat (walaupun saya tidak yakin tentang kriteria seleksi mereka).
Lengkapi setelah permintaan dalam komentar (7 Juli 2013)
Pelengkap ini memperhatikan keberadaan algoritma yang lebih sederhana daripada Earley.
Seperti yang saya katakan, mencari web di "parsing forest persimpangan" harus dengan cepat memberi Anda referensi, dari mana Anda dapat menggali lebih jauh.
Gagasan dasarnya adalah bahwa semua jalur yang diurai dengan konstruksi hutan bersama tidak lain adalah konstruksi persimpangan lama Bar Hillel, Perles dan Shamir untuk bahasa reguler dan bahasa bebas konteks, menggunakan otomat terbatas dan tata bahasa bebas konteks. Dengan tata bahasa CF, Anda menerapkan konstruksi ke robot sepele yang hanya mengenali string input Anda. Itu semuanya. Hutan bersama hanyalah tata bahasa untuk persimpangan. Ini terkait dengan tata bahasa asli melalui homomorfisme, hanya mengenali string yang diberikan, tetapi dengan semua pohon parse tata bahasa asli hingga homomorfisma itu (yaitu, penggantian nama sederhana dari non-terminal).
Tata bahasa yang dihasilkan mengandung banyak hal yang tidak berguna, non-terminal dan aturan, yang tidak dapat dijangkau dari aksioma (tidak dapat ditemukan dalam string yang berasal dari simbol awal) atau yang tidak produktif (tidak dapat diturunkan ke terminal tali).
Kemudian, Anda harus membersihkannya dengan kuas yang baik di bagian akhir (mungkin panjang tetapi sederhana secara algoritmik), atau Anda dapat mencoba meningkatkan konstruksinya sehingga bulu yang tidak terlalu berguna untuk disikat pada akhirnya.
Sebagai contoh, konstruksi CYK persis seperti itu, tetapi diatur sedemikian rupa sehingga semua aturan dan non-terminal yang dibuat produktif, meskipun banyak yang tidak dapat dijangkau. Ini diharapkan dari teknik bottom-up.
Teknik top-down (seperti yang berbasis LR (k)) akan menghindari aturan yang tidak terjangkau dan non-terminal, tetapi akan membuat yang tidak produktif.
Banyak menyikat sebenarnya dapat dicapai dengan penggunaan pointer yang memadai, saya pikir, tapi saya belum melihat ini sejak lama.
Semua algoritma yang ada benar-benar mengikuti dasarnya model itu. Jadi itu benar-benar inti masalah, dan itu sangat sederhana. Lalu mengapa menguburnya dalam kompleksitas?
Banyak "optimisasi" diusulkan dalam literatur yang sering didasarkan pada keluarga LR (k), LL (k) konstruksi parser, mungkin dengan beberapa faktor statis dari konstruksi ini (Earley tidak memiliki anjak statis). Ini sebenarnya bisa diterapkan pada semua teknik yang dikenal, termasuk parser yang diutamakan lama. Saya menempatkan "optimisasi" di antara tanda kutip karena biasanya tidak jelas apa yang Anda optimalkan, atau bahkan apakah Anda benar-benar mengoptimalkannya, atau apakah manfaat peningkatannya sebanding dengan kompleksitas tambahan parser Anda. Anda akan menemukan sedikit data objektif, formal atau eksperimental, pada ini (ada beberapa), tetapi banyak lagi klaim. Saya tidak mengatakan bahwa tidak ada yang menarik. Ada beberapa ide cerdas.
Sekarang, setelah Anda tahu ide dasarnya, "optimisasi" atau perbaikan sering dapat diperkenalkan secara statis (mungkin secara bertahap) dengan membuat otomat push-down dari tata bahasa, mengikuti jenis teknik konstruksi parser yang Anda minati, dan kemudian menerapkannya. konstruksi lintas-produk untuk persimpangan dengan robot itu (hampir sama dengan melakukannya pada tata bahasa) atau ke tata bahasa yang berasal dari robot itu.
Kemudian Anda bisa memperkenalkan lonceng dan peluit, tetapi itu kebanyakan detail teknologi.
Philosophiæ Naturalis Principia Mathematica dari Isaac Newton dikabarkan merupakan bagian besar fisika dan matematika. Saya tidak berpikir itu ada dalam daftar bacaan banyak siswa. Semua hal lain dianggap sama, saya tidak berpikir itu sangat berguna untuk mengajarkan algoritma Earley, meskipun itu adalah bagian sejarah yang penting. Siswa sudah cukup belajar. Dengan risiko ditembak jatuh oleh banyak orang, saya pikir hal yang sama juga terjadi pada kertas Knuth LR (k). Ini adalah bagian yang luar biasa dari analisis teoretis, dan mungkin bacaan penting bagi ahli teori. Saya sangat ragu bahwa itu sangat penting untuk membangun parser mengingat keadaan teknologi saat ini, baik perangkat keras dan perangkat lunak. Waktu sudah lewat ketika parsing adalah bagian penting dari waktu kompilasi, atau ketika kecepatan kompiler adalah masalah kritis (saya tahu satu perusahaan yang meninggal karena kompilasi biaya sekitar 30 tahun yang lalu). Spesialis parsing mungkin ingin mempelajari pengetahuan khusus itu di beberapa titik, tetapi rata-rata siswa dalam ilmu komputer, pemrograman atau teknik tidak membutuhkannya.
Jika siswa harus menghabiskan lebih banyak waktu untuk penguraian, ada ekstensi lain yang mungkin lebih berguna dan lebih formatif, seperti yang digunakan dalam linguistik komputasi. Peran pertama pengajaran adalah mengekstraksi ide-ide sederhana yang membentuk pengetahuan ilmiah, bukan untuk memaksa siswa untuk menderita apa yang harus diderita para ilmuwan penelitian (mahasiswa doktoral terkecuali: itu adalah ritus perikop :-).
Lisensi CC BY-SA 3.0 dari penulis