คุณไม่ต้องการ CNF มันมีข้อเสียเปรียบในการเปลี่ยนโครงสร้างไวยากรณ์ แต่คุณจำเป็นต้องแนะนำอุปกรณ์ที่ไม่ใช่ขั้วกลางเพื่อไม่ให้ทางขวามือยาวเกิน 2 (ฟอร์ม 2) เนื่องจากความยาว RHS กำหนดความซับซ้อน ความพยายามที่ดีที่สุดในการอธิบายว่าสังหรณ์ใจคือถ้าหน่วยความจำทำหน้าที่เป็นกระดาษโดย Beau Shiel "การสังเกตการณ์เกี่ยวกับการแยกบริบทฟรี" ตีพิมพ์ในปี 1976 ในการประชุมภาษาศาสตร์คอมพิวเตอร์ อัลกอริธึมของ Earley ใช้ 2 รูปแบบโดยปริยาย มันถูกซ่อนอยู่ในอัลกอริทึม เกี่ยวกับการกู้คืนและการจัดการป่าแจงคุณควรดูเว็บที่ "แยกวิเคราะห์ป่า" จริงๆแล้วมันตรงไปตรงมามาก เอกสารจำนวนมากอยู่บนเว็บถ้าคุณได้รับ (จากการอ้างอิงหรือสารบัญ) ชื่อหรือผู้แต่งเพื่อค้นหาโดยตรง
ที่จริงแล้วคุณสามารถทำมากกว่า CF และยังได้รับการแยกวิเคราะห์ป่าในเวลาพหุนาม บางครั้งคำถามก็คือคุณสามารถทำอะไรกับมันได้บ้าง
วัตถุประสงค์หนึ่งของบทความสุดท้ายที่คุณพูดถึงคือการแสดงให้เห็นว่าอัลกอริทึมที่ซับซ้อน (เช่น GLR) ไม่จำเป็นต้องซื้ออะไรในเวลาหรือในอวกาศและอาจเปลี่ยนป่าแยกวิเคราะห์ของคุณ
ข้อสังเกตหนึ่งเกี่ยวกับการสอน ฉันคิดว่า Earley ซึ่งเป็นเซมินารีนั้นซับซ้อนเกินไปสำหรับการสอนและอาจถูกแทนที่ด้วยอัลกอริทึมที่ง่ายกว่าโดยมีเนื้อหาทางการศึกษาเดียวกัน การสอนเป็นเรื่องเกี่ยวกับแนวคิดหรือเทคโนโลยี ในอัลกอริทึมของ Earley แนวคิดสำคัญถูกซ่อนอยู่ในความซับซ้อนของรายละเอียดและจากมุมมองทางเทคโนโลยีที่ล้าสมัย มันเป็นกระดาษที่ดี แต่ก็ไม่ได้หมายความว่ามันเป็นวิธีการสอนที่ดีที่สุด
อาจมีข้อมูลเพิ่มเติมในวรรณคดีภาษาศาสตร์คอมพิวเตอร์มากกว่าในช่องทางวิทยาการคอมพิวเตอร์ทั่วไป ฉันไม่มีหนังสือ Ceriel-Grune-Jacobs แต่ฉันจะแปลกใจหากพวกเขาไม่มีการอ้างอิงที่เหมาะสมทั้งหมด (แม้ว่าฉันไม่แน่ใจเกี่ยวกับเกณฑ์การเลือกของพวกเขา)
เติมเต็มตามคำขอในความคิดเห็น (7 กรกฎาคม 2013)
ส่วนประกอบนี้เกี่ยวข้องกับการดำรงอยู่ของอัลกอริทึมที่ง่ายกว่าของ Earley
ดังที่ฉันได้กล่าวไปแล้วการค้นหาเว็บที่ "ป่าแยกสี่แยก" ควรให้การอ้างอิงกับคุณอย่างรวดเร็วซึ่งคุณสามารถขุดเพิ่มเติมได้
แนวคิดพื้นฐานคือเส้นทางทั้งหมดที่แยกวิเคราะห์ด้วยการสร้างป่าที่ใช้ร่วมกันนั้นไม่มีอะไรนอกจากการก่อสร้างทางแยกเก่าของ Bar Hillel, Perles และ Shamir สำหรับภาษาปกติและภาษาที่ไม่มีบริบทโดยใช้ระบบอัตโนมัติที่ จำกัด และไวยากรณ์ที่ไม่มีบริบท รับไวยากรณ์ CF คุณใช้สิ่งก่อสร้างกับหุ่นยนต์เล็กน้อยที่จดจำเฉพาะสตริงอินพุตของคุณ นั้นคือทั้งหมด. ฟอเรสต์ที่ใช้ร่วมกันเป็นเพียงหลักไวยากรณ์สำหรับการแยก มันเกี่ยวข้องกับไวยากรณ์ดั้งเดิมผ่านโฮโมมอร์ฟิซึมตระหนักถึงสตริงที่กำหนดเท่านั้น แต่ด้วยการแยกวิเคราะห์ต้นไม้ของไวยากรณ์ดั้งเดิมจนถึงโฮโมมอร์ฟิซึม (เช่นเปลี่ยนชื่อง่าย ๆ ของเทอร์มินัล)
ไวยากรณ์ที่เกิดขึ้นประกอบด้วยสิ่งที่ไร้ประโยชน์มากมาย, ไม่ใช่เทอร์มินัลและกฎ, ซึ่งไม่สามารถเข้าถึงได้จากสัจพจน์ (ไม่พบในสตริงที่มาจากสัญลักษณ์เริ่มต้น) หรือที่ไม่มีประสิทธิผล (ไม่สามารถรับเข้ามาในเทอร์มินัลได้ สตริง)
จากนั้นคุณต้องทำความสะอาดด้วยแปรงที่ดีในตอนท้าย (อาจจะยาว แต่เป็นวิธีง่าย ๆ ) หรือคุณสามารถลองปรับปรุงโครงสร้างเพื่อที่ว่าจะมีขนแปรงที่ไร้ประโยชน์น้อยลงในที่สุด
ยกตัวอย่างเช่นการก่อสร้าง CYK นั้นถูกต้อง แต่มีการจัดระเบียบเพื่อให้กฎทั้งหมดและไม่ใช่เทอร์มินัลที่สร้างนั้นมีประสิทธิผลแม้ว่าหลาย ๆ คนจะไม่สามารถเข้าถึงได้ สิ่งนี้คาดว่าจะได้จากเทคนิคจากล่างขึ้นบน
เทคนิคจากบนลงล่าง (เช่นเทคนิคที่ใช้ LR (k)) จะหลีกเลี่ยงกฎที่เข้าไม่ถึงและไม่ใช่เทอร์มินัล แต่จะสร้างกฎที่ไม่ก่อผล
การแปรงจำนวนมากสามารถทำได้จริงโดยการใช้ตัวชี้อย่างเพียงพอฉันคิดว่า แต่ฉันไม่ได้ดูสิ่งนี้เป็นเวลานาน
อัลกอริทึมที่มีอยู่ทั้งหมดปฏิบัติตามรูปแบบนั้นจริง นั่นคือหัวใจสำคัญของเรื่องและมันง่ายมาก ถ้าอย่างนั้นทำไมต้องฝังไว้ในความซับซ้อน?
"optimisations" จำนวนมากถูกนำเสนอในครอกมักจะขึ้นอยู่กับ LR (k), LL (k) ครอบครัวของการแยกวิเคราะห์การก่อสร้างอาจมีบางส่วนคงที่ของกองกำลังเหล่านี้ (Earley ไม่มีแฟคตอริ่งคงที่) มันสามารถนำไปใช้กับเทคนิคที่เป็นที่รู้จักทั้งหมดรวมถึง parsers ลำดับความสำคัญเก่า ฉันใส่ "การเพิ่มประสิทธิภาพ" ระหว่างคำพูดเพราะมักจะไม่ชัดเจนในสิ่งที่คุณเพิ่มประสิทธิภาพหรือไม่ว่าคุณจะเพิ่มประสิทธิภาพจริงหรือประโยชน์ของการปรับปรุงที่มีค่าความซับซ้อนเพิ่มของ parser ของคุณ คุณจะพบข้อมูลวัตถุประสงค์เล็ก ๆ น้อย ๆ อย่างเป็นทางการหรือทดลองบนนี้ (มีบางส่วน) แต่การเรียกร้องเพิ่มเติม ฉันไม่ได้บอกว่าไม่มีอะไรน่าสนใจ มีความคิดที่ฉลาด
ตอนนี้เมื่อคุณทราบแนวคิดพื้นฐานแล้ว "การเพิ่มประสิทธิภาพ" หรือการปรับปรุงสามารถนำมาใช้แบบคงที่ (อาจเพิ่มขึ้น) โดยการสร้างออโตเมติกแบบกดลงจากไวยากรณ์ตามเทคนิคการสร้างแบบแยกวิเคราะห์ที่คุณสนใจแล้วนำไปใช้ การสร้างข้ามผลิตภัณฑ์สำหรับการตัดกันกับหุ่นยนต์นั้น (เกือบเหมือนกับสิ่งที่ทำกับไวยากรณ์) หรือไวยากรณ์ที่ได้มาจากหุ่นยนต์นั้น
จากนั้นคุณสามารถแนะนำระฆังและนกหวีด แต่นั่นเป็นรายละเอียดทางเทคโนโลยีเป็นส่วนใหญ่
Philosophiæ Naturalis Principia Mathematica ของ Isaac Newton นั้นเป็นวิชาฟิสิกส์และคณิตศาสตร์ที่ยอดเยี่ยม ฉันไม่คิดว่ามันเป็นเรื่องอ่านของนักเรียนหลายคน ทุกอย่างเท่าเทียมกันฉันไม่คิดว่ามันมีประโยชน์มากในการสอนอัลกอริทึมของ Earley แม้ว่ามันจะเป็นส่วนที่สำคัญทางประวัติศาสตร์ นักเรียนมีเพียงพอที่จะเรียนรู้ตามที่เป็นอยู่ เมื่อหลายคนเสี่ยงต่อการถูกยิงฉันคิดเหมือนกันมากสำหรับกระดาษ Knuth LR (k) เป็นการวิเคราะห์เชิงทฤษฎีที่ยอดเยี่ยมและอาจเป็นการอ่านที่สำคัญสำหรับนักทฤษฎี ฉันสงสัยอย่างยิ่งว่ามันเป็นสิ่งจำเป็นอย่างยิ่งสำหรับการสร้าง parsers เนื่องจากสถานะปัจจุบันของเทคโนโลยีทั้งฮาร์ดแวร์และซอฟต์แวร์ เวลาผ่านไปแล้วเมื่อการแยกวิเคราะห์เป็นส่วนสำคัญในการรวบรวมเวลา หรือเมื่อความเร็วของคอมไพเลอร์เป็นปัญหาสำคัญ (ฉันรู้ว่ามี บริษัท หนึ่งแห่งที่เสียค่าใช้จ่ายในการรวบรวมประมาณ 30 ปีที่แล้ว) ผู้เชี่ยวชาญด้านการวิเคราะห์คำอาจต้องการเรียนรู้ว่าความรู้เฉพาะทางในบางจุด แต่นักเรียนโดยเฉลี่ยในสาขาวิทยาศาสตร์คอมพิวเตอร์การเขียนโปรแกรมหรือวิศวกรรมไม่จำเป็นต้องใช้
หากนักเรียนต้องใช้เวลามากขึ้นในการวิเคราะห์คำมีส่วนขยายอื่น ๆ ที่อาจมีประโยชน์และมีโครงสร้างมากขึ้นเช่นส่วนที่ใช้ในภาษาศาสตร์เชิงคำนวณ บทบาทแรกของการสอนคือการสกัดความคิดง่ายๆที่จัดโครงสร้างความรู้ทางวิทยาศาสตร์ไม่ใช่เพื่อบังคับให้นักเรียนต้องทนทุกข์ในสิ่งที่นักวิทยาศาสตร์การวิจัยต้องทนทุกข์ทรมาน (นักศึกษาปริญญาเอกยกเว้น: มันเป็นพิธีการทาง :-)
ใบอนุญาต CC BY-SA 3.0 จากผู้เขียน