กำลังกู้คืนป่าแยกวิเคราะห์จากตัวแยกวิเคราะห์ Earley หรือไม่


25

เมื่อไม่นานมานี้ฉันอ่านหนังสือบนตัวแยกวิเคราะห์ Earleyและคิดว่าเป็นหนึ่งในอัลกอริทึมที่หรูหราที่สุดที่ฉันเคยเห็นมา อย่างไรก็ตามอัลกอริทึมในความหมายดั้งเดิมของมันคือตัวจดจำและไม่ใช่ตัวแยกวิเคราะห์ซึ่งหมายความว่ามันสามารถตรวจจับได้ว่าสตริงนั้นตรงกับ CFG เฉพาะหรือไม่ แต่ไม่สร้างทรีสำหรับแยกวิเคราะห์ คำถามของฉันคือวิธีการกู้คืนไม่ใช่ทรีการแยกวิเคราะห์แต่เป็นการแยกวิเคราะห์ฟอเรสต์ของ parses ที่เป็นไปได้ทั้งหมดของสตริงอินพุตที่กำหนด

ใน "เทคนิคการแยกวิเคราะห์: คู่มือการปฏิบัติ" ของกรุนและจาค็อบพวกเขาแสดงให้เห็นถึงอัลกอริธึมที่สามารถใช้ในการกู้คืนป่าแยกจากผลของ Earley Recognizer แต่มันขึ้นอยู่กับวิธีการแยกวิเคราะห์ของอังเกอร์ซึ่งรันไทม์ O (n k + 1 ) โดยที่ k คือความยาวของการผลิตที่ยาวที่สุดในไวยากรณ์ ซึ่งหมายความว่ารันไทม์ไม่ใช่พหุนามในขนาดของไวยากรณ์ ยิ่งกว่านั้นกระดาษต้นฉบับของ Earley บนอัลกอริทึมซึ่งแนะนำอัลกอริทึมสำหรับการกู้คืนการแยกวิเคราะห์ป่าไม่ถูกต้อง (ดูตัวอย่างหน้า 762 ของบทความนี้โดย Tomita) แม้ว่าหลาย ๆ แหล่งข้อมูลยังอ้างว่าเป็นวิธีที่เหมาะสมในการกู้คืนการแยกวิเคราะห์ .

คำถามของฉันคือว่าเป็นไปได้ในเวลาพหุนามเพื่อกู้คืนการแยกวิเคราะห์ฟอเรสต์ที่กำหนด ฉันได้พบกระดาษที่นี่ที่ให้อัลกอริทึมสำหรับการผลิตการแยกวิเคราะห์ป่าขนาดลูกบาศก์สำหรับการแยกวิเคราะห์ใด ๆ โดยใช้การจำลองของ PDA ดังนั้นดูเหมือนว่ามันควรจะเป็นไปได้ แต่ฉันยังไม่พบวิธีที่จะทำเช่นนี้ เป็นการดีที่ฉันต้องการทำสิ่งนี้โดยไม่ต้องแปลงไวยากรณ์อินพุตเป็น CNF (ซึ่งแน่นอนจะแก้ปัญหา) เนื่องจากป่าแจงป่าผลลัพธ์ที่ได้จะยุ่งสวย

ขอบคุณสำหรับความช่วยเหลือใด ๆ ที่คุณสามารถนำเสนอ!


มันต้องเป็นอัลกอริธึมที่อิงจากการแยกวิเคราะห์ Earley หรือคุณไม่สนใจที่จะใช้ตัวแยกวิเคราะห์ CFG ทั่วไปอื่นหรือไม่?
Alex สิบ Brink

1
ฉันต้องการอัลกอริทึมที่ใช้ตัวแยกวิเคราะห์ Earley ฉันได้สอนหลักสูตรคอมไพเลอร์และใช้เวลาสองสามวันในการพยายามหาคำตอบสำหรับคำถามนี้และมันทำให้ฉันรำคาญจริงๆ
templatetypedef

Runtimes แบบเอ็กซ์โพเนนเชียลไม่น่าแปลกใจเนื่องจากคำต่างๆสามารถมีต้นไม้แยกวิเคราะห์ได้หลายแบบ ในความเป็นจริงพวกเขาสามารถมีได้ไม่ จำกัด จำนวนมากหากคุณอนุญาต CFG โดยพลการ
Raphael

3
@ ราฟาเอลบทบาทของการแยกวิเคราะห์ป่าไม้มีความแม่นยำในการใช้กลไกการแบ่งปันที่จะช่วยให้แสดงต้นไม้ทั้งหมดได้อย่างไร้ขีด จำกัด ด้วยโครงสร้างที่ จำกัด พร้อมความซับซ้อนของพื้นที่ขนาดเล็ก แน่นอนว่านี่อาจทิ้งงานให้กับคนตัดไม้
Babou

คุณอาจต้องการที่จะดูที่Marpa มันเป็นโมดูล Perl และห้องสมุด C ที่ใช้ตัวแยกวิเคราะห์ Earley และสนับสนุนการแยกวิเคราะห์ป่าอย่างสมบูรณ์
hippietrail

คำตอบ:


14

แน่นอนว่าการทำเช่นนั้นขึ้นอยู่กับการแสดงที่ถูกต้องสำหรับ "ป่าที่อัดแน่น" ซึ่งแสดงถึงต้นไม้ที่แยกวิเคราะห์ทั้งหมดสำหรับประโยค

ฉันคิดว่าสถานที่ที่คุณต้องการเริ่มมองหาอยู่ที่วิทยานิพนธ์ของ Joshua Goodman (แยกวิเคราะห์จากข้างใน Harvard, 1999) โดยพื้นฐานแล้วความคิดคือคุณสามารถกำหนดอัลกอริทึมการแยกวิเคราะห์ภายใต้ semiring ที่แน่นอน คุณจะสามารถคำนวณปริมาณและโครงสร้างทุกชนิดแทนการแยกวิเคราะห์ต้นไม้เปล่า (เป็นตัวจำแนกลายมือหรือเป็นตัวแยกวิเคราะห์) ทั้งนี้ขึ้นอยู่กับ semiring หนึ่ง semiring ที่คุณสามารถกำหนด (ซึ่งกู๊ดแมนทำในวิทยานิพนธ์ของเขา) เป็น semiring ที่ค่าเป็นชุดของการแยกวิเคราะห์ เมื่อคุณแยกวิเคราะห์ประโยคในที่สุดคุณจะได้รับการแยกวิเคราะห์ต้นไม้ทั้งหมดในโหนดการแยกวิเคราะห์หลัก

อีกครั้งคุณจะต้องระมัดระวังเกี่ยวกับการทำให้มันเป็นไปได้ผ่านการเป็นตัวแทนที่ถูกต้อง


ขอบคุณสำหรับการอ้างอิง! ดูเหมือนว่าเป็นแหล่งข้อมูลที่ดีและฉันจะใช้เวลาดูมัน
templatetypedef

8

มีกระดาษที่อธิบายวิธีการ:

การแยกแบบ SPPF จาก Earley Recognisersโดย Elisabeth Scott

มันอธิบายถึงวิธีการสร้างป่าแจงป่าสองมิติในเวลาลูกบาศก์


2
ดูเหมือนว่าลิงก์นี้จะใช้งานไม่ได้ในขณะนี้ คุณมีการอ้างอิง (ชื่อกระดาษที่ตีพิมพ์รายชื่อผู้เขียน) และ / หรือลิงค์ที่อัพเดทหรือไม่?
DW

1
ดูweb.archive.org/web/20130508170633/http://thor.info.uaic.ro/ … : "การแยกแบบ SPPF จากการจำแนกตัวรู้จำ Earley", Elizabeth Scott การเชื่อมโยงอื่น ๆ : dinhe.net/~aredridel/.notmine/PDFs/...
a3nm

นี่คือคำตอบที่ถูกต้องสำหรับคำถาม "วิธีการแยกวิเคราะห์ป่าจากตัวจดจำ Earley"
tjvr

มีการดำเนินงานที่ดีนี้ใน JS นี่: joshuagrams.github.io/pep
tjvr

สิ่งที่มีความหมายโดย binarized ในบริบทนี้?
Bruce Adams

6

คุณไม่ต้องการ 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 จากผู้เขียน


2
"Earley ... ซับซ้อนเกินไปสำหรับการสอนและอาจถูกแทนที่ด้วยอัลกอริทึมที่ง่ายกว่า ... " คุณช่วยยกตัวอย่างอัลกอริทึมที่ง่ายกว่านี้ได้ไหม?
wjl

@wjl ฉันตอบคุณในภาคผนวกของคำตอบข้างต้น ฉันไม่ได้ชี้ไปที่อัลกอริทึมเฉพาะแม้ว่าคุณอาจพบบางอย่างในครอก ฉันพยายามอธิบายว่าทำไมการทำอัลกอริธึมที่ง่ายกว่าและมีประสิทธิภาพนั้นค่อนข้างง่าย Earley's อาจจะซับซ้อนที่สุดของพวกเขาทั้งหมด การอธิบาย Bar Hillel และคณะ การก่อสร้างประมาณครึ่งหน้าของตำราเรียนพูดหน้าที่มีหลักฐาน
babou

@wjl การตอบคำขอของคุณทำให้ฉันต้องใช้เวลาพอสมควร มันช่วยคุณได้ไหม . . . . . หากคุณต้องการอัลกอริทึมที่แท้จริงมีหนึ่งในลิงค์สุดท้ายของคำถามเริ่มต้น
babou

ใช่ขอบคุณ; ฉันขอขอบคุณรายละเอียดเพิ่มเติม ฉันกำลังทำงานกับไลบรารี parser ทั่วไปสำหรับงานบางอย่างที่ฉันทำและได้ทำการค้นคว้ามากมายเกี่ยวกับอัลกอริทึมที่แตกต่างกัน ฉันกำลังโน้มตัวไปสู่การใช้งานแบบ Early ตั้งแต่สำหรับฉันดูเหมือนว่าจะง่ายต่อการเข้าใจอัลกอริทึมและมันง่ายที่จะขยายไปยังไวยากรณ์ที่เชื่อมต่อกันและ "กล่องดำ" (อาจเป็นบริบทที่อ่อนไหว) เทอร์มินัล ฉันอ่านมันและพิมพ์เอกสารบางส่วนที่คุณชี้ไป แต่ฉันยังไม่ได้อ่านอย่างจริงจัง
wjl

@wjl หากนั่นคือสิ่งที่คุณกำลังทำอยู่คุณควรดูที่หัวข้อต่อไปนี้: ภาษาที่อ่อนไหวตามบริบทอย่างอ่อนโยนระบบการเขียนใหม่ที่ไม่มีบริบทเชิงเส้น (LCFRS) และไวยากรณ์การต่อข้อมูลช่วง ไม่แน่ใจว่าฉันเข้าใจเทอร์มินัล "กล่องดำ" คืออะไร - - อีเมล: babou ที่ inbox.com - -
babou

5

กระดาษที่อธิบายถึงวิธีการสร้างป่าแยกวิเคราะห์แบบสองมิติในเวลาลูกบาศก์ (กล่าวถึงในโพสต์โดย Angelo Borsotti) คือ: "SPPF-Style Parsing จาก Earley Recognizers" โดย Elizabeth Scott คุณสามารถค้นหาได้ที่นี่: http://dx.doi.org/10.1016/j.entcs.2008.03.044

ในบทความนี้การอธิบายการสร้างป่าแบ่งบรรจุ (SPPF) ที่ใช้ร่วมกันซึ่งอธิบายถึงต้นไม้ในการแยกวิเคราะห์ที่เป็นไปได้ทั้งหมด ต้นไม้ย่อยจะถูกแบ่งปันเมื่อใดก็ตามที่เป็นไปได้และโหนดที่สอดคล้องกับการสืบทอดที่แตกต่างกันของสตริงย่อยเดียวกันจาก nonterminal เดียวกันจะถูกรวมเข้าด้วยกัน


ขอบคุณสำหรับตัวชี้ การสร้างการแยกวิเคราะห์ป่าในเวลาลูกบาศก์เป็นมาตรฐาน Binarization เป็นวิธีเดียวที่จะได้รับลูกบาศก์เวลาดังนั้นคำกล่าวของ OP เกี่ยวกับความซับซ้อนของขนาดไวยากรณ์ของ wrt จึงไม่เกี่ยวข้อง อีกประเด็นหนึ่งคือการเข้าใจในวิธีการแยกวิเคราะห์ป่า นั่นอาจขึ้นอยู่กับอัลกอริทึม ปัญหาอื่น ๆ คือปริมาณการแบ่งปันในป่าที่ใช้ร่วมกันและประสิทธิภาพเชิงกลยุทธ์ของการแยกวิเคราะห์ (Earley อาจเป็นความคิดที่ไม่ดี) ทั้งหมดนี้ถูกพัฒนาในการอ้างอิงล่าสุดของ OP มุมมองที่เป็นทางการทั่วไปของปัญหาถูกร่างในคำตอบของฉัน
babou

1

ฉันต้องการที่จะสะท้อนคำตอบข้างต้นโดยการแนะนำให้คุณอ่านกระดาษนี้:

http://dx.doi.org/10.1016/j.entcs.2008.03.044

ฉันต้องการที่จะมีคุณสมบัติแม้ว่าโดยบอกว่าฉันได้ใช้อัลกอริทึมในบทความนี้และฉันเชื่อว่ามีข้อผิดพลาด โดยเฉพาะอย่างยิ่งประโยคแรกของย่อหน้าที่ 2 ของส่วนที่ 4 ป้ายกำกับรุ่นก่อนที่คุณทำกับสิ่งที่ Earley จะเรียกว่า "สแกน" ขั้นตอนควรชี้จาก p ถึง q ไม่ใช่วิธีอื่น

โดยเฉพาะอย่างยิ่งบรรทัดต่อไปนี้:

ตั้งค่า E0 ให้เป็นรายการ (S :: = ·α, 0) สำหรับ i> 0 initialise Ei โดยการเพิ่มรายการ p = (A :: = αai·β, j) สำหรับแต่ละ q = (A :: = α·aiβ, j) ∈ Ei − 1 และถ้าα = สร้าง a ตัวชี้รุ่นก่อนหน้าระบุว่า i - 1 จาก q เป็น p

ควรอ่าน "จาก p ถึง q" และไม่ควร "จาก q ถึง p"

ฉันใช้อัลกอริทึมตามที่ระบุไว้เดิมซึ่งทำให้ฉันมีข้อผิดพลาดในบางกรณีทดสอบสร้างขึ้นด้วยมือซึ่งได้รับการแก้ไขเมื่อฉันเปลี่ยนทิศทางของตัวชี้ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.