python: ค้นหาคำในพจนานุกรมอย่างรวดเร็วด้วยไวด์การ์ด*

เมื่อพิจารณาจากข้อความซึ่งแบ่งออกเป็นรายการคำ ฉันต้องการค้นหาแต่ละคำในพจนานุกรมของคำ ซึ่งก็อ่านจากไฟล์ข้อความและ split('\n') เช่นกัน

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

ประสิทธิภาพเป็นสิ่งสำคัญในกรณีนี้ ฉันคิดว่าเป็น Btree...แต่

  1. แพ็คเกจและประเภทข้อมูลที่ดีที่สุดสำหรับการติดตั้งอย่างรวดเร็วใน Python คืออะไร
  2. กรุณาให้ตัวอย่างรหัส

person Lorenz Lo Sauer    schedule 03.10.2011    source แหล่งที่มา
comment
ดูเหมือนว่าคุณต้องการแพ็คเกจ trie   -  person Voo    schedule 03.10.2011
comment
สิ่งที่ไวด์การ์ดจะช้าลงอย่างแน่นอน Dicts ใช้งานได้กับแฮช (เวลาคงที่ในการเข้าถึง)   -  person JBernardo    schedule 03.10.2011
comment
@JBernardo: ไม่ มันแค่หมายความว่าองค์ประกอบต้องเริ่มต้นด้วยอะไรก็ตามที่มาก่อน 'ดาว'   -  person Lorenz Lo Sauer    schedule 03.10.2011
comment
นั่นเป็นเหตุผลที่คุณจะสูญเสียการค้นหาเวลาอย่างต่อเนื่อง กล่าวคือ มันจะช้าลง   -  person JBernardo    schedule 03.10.2011


คำตอบ (2)


ใช้ dawg ซึ่งมีประสิทธิภาพมากกว่า Trie ในแง่ของการสิ้นเปลืองพื้นที่ มีการใช้งานหลามอยู่บ้าง แต่สำหรับการเริ่มต้น โปรดดูที่นี่

person hymloth    schedule 03.10.2011
comment
จากเว็บไซต์: ...ถ้าคุณไม่สนเรื่องความจำหรือความเร็ว[sic!] ก็แค่เก็บคำพูด... เร็วกว่าไหม? - person Lorenz Lo Sauer; 03.10.2011
comment
น้องจะเร็วขึ้นแน่นอน คำพูดจากเว็บไซต์เป็นเรื่องน่าขัน เพียงเก็บคำศัพท์ของคุณในฐานข้อมูล SQL หรือหมุนเครื่อง 100 เครื่องในระบบคลาวด์ ฉันไม่รังเกียจ. เพิ่มพลังให้กับคุณ! - person hymloth; 03.10.2011

คุณต้องการลอง ใช้แพ็คเกจ PyTrie

person Petr Viktorin    schedule 03.10.2011