1 / 97

การสร้างดรรชนีและการค้นหา

การสร้างดรรชนีและการค้นหา. Chapter 5 Indexing and Searching. การสร้างดรรชนีและการค้นหา. แฟ้มข้อมูลผกผัน ( Inverted Files ) Suffix Trees และ Suffix Arrays แฟ้มข้อมูลลายเซ็น ( Signature Files ) การค้นหาตามลำดับ ( Sequential Searching ) Hashing Algorithm.

Download Presentation

การสร้างดรรชนีและการค้นหา

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. การสร้างดรรชนีและการค้นหาการสร้างดรรชนีและการค้นหา Chapter 5 Indexing and Searching

  2. การสร้างดรรชนีและการค้นหาการสร้างดรรชนีและการค้นหา • แฟ้มข้อมูลผกผัน ( Inverted Files ) • Suffix Trees และ Suffix Arrays • แฟ้มข้อมูลลายเซ็น ( Signature Files ) • การค้นหาตามลำดับ ( Sequential Searching ) • Hashing Algorithm

  3. แฟ้มข้อมูลผกผัน ( Inverted Files ) • แฟ้มข้อมูลผกผันก็คือลักษณะหนึ่งของดรรชนีคำศัพท์ในแนวคิดที่กล่าวมาช้างต้นอันประกอบด้วยคำศัพท์ที่มีการจัดระบบเพื่อให้ค้นหาได้ง่าย โดยแต่ละคำศัพท์ชี้ไปยังตำแหน่งในเอกสารที่ต้องการสืบค้น ประกอบด้วยส่วนสำคัญ 3 ส่วน ได้แก่ • ส่วนของพจนานุกรม ( Dictionary ) • ส่วนของตำแหน่ง ( Address ) • และส่วนของเนื้อหา ( Text )

  4. Dictionary Address Text รูปที่ 1 โครงสร้างของแฟ้มข้อมูลผกผัน

  5. ส่วนของพจนานุกรมประกอบด้วยคำศัพท์ต่าง ๆ ที่ไม่ซ้ำกันเรียกว่า เทอม เทอมเหล่านี้มีการจัดกลุ่มอย่างเป็นระบบเพื่อให้ง่ายต่อการค้นหา วิธีหนึ่งคือ จัดเรียงตามลำดับของตัวอักษรหรือตามตัวอักษรก่อนหลัง เช่น จัดเรียงเป็นรูป Array ยังจัดได้เป็นรูป Binary Search Tree (BST) , Trie , B-Tree และ วิธีการ Hashing

  6. ส่วนของตำแหน่ง จะเป็นการบ่งบอกตำแหน่งของเทอมต่าง ๆ ที่ปรากฏในเนื้อหาของเอกสาร บทความหรือหนังสือต่าง ๆ ที่เทอมเหล่านั้นรวมอยู่ การบ่งบอกตำแหน่งจึงจะระบุเป็น ชุด/เล่ม/หน้า/บรรทัด/ลำดับ เป็นต้น

  7. ส่วนของเนื้อหาจะเป็นข้อมูลในเอกสาร บทความ หรือหนังสือ โดยทั่วไปจะมีปริมาณข้อมูลมากมายมหาศาล จึงต้องจัดเก็บอย่างเป็นระบบและบ่อยครั้งจะต้องทำการลดขนาดของข้อมูลลง วิธีการหนึ่งก็คือ การบีบอัดข้อมูล ( Data Compression ) โดยทั่วไปจะใช้วิธีการของ Huffiman Code ยังขยายผลมาใช้ได้กับการบีบอัดของคำด้วย ผลก็คือขนาดของข้อมูลโดยรวมได้ลดลงไปอย่างมาก

  8. ตัวอย่างที่ 1 ให้เอกสารชุดหนึ่งเป็นดังนี้

  9. แฟ้มข้อมูลผกผันหลังการประมวลผล จะมีรูปตามรูป 2.1 ดังนี้

  10. การสร้างแฟ้มข้อมูลผกผันการสร้างแฟ้มข้อมูลผกผัน การสร้างและบำรุงรักษาแฟ้มข้อมูลผกผันมีหลายวิธี ในที่นี้จะนำเสนอใน 2 วิธี คือ • Memory-based Inversion • Sort-based Inversion

  11. Memory-based Inversion • วิธีการสร้างตัว Dictionary ที่มีโครงสร้างข้อมูลที่เปลี่ยนแปลงได้ เช่น Trie , B-Tree หรือ Hash Table ในการจัดเก็บเทอมต่าง ๆ และเชื่อมต่อไปยัง Node ที่เก็บตำแหน่งของเทอมที่ปรากฏในเอกสารแต่ละชุด เมื่อเอกสารทั้งหมดได้รับการประมวลผลจนครบ ก็จะได้ส่วนของ Dictionary ที่จัดสร้างขึ้นโดยประกอบด้วยเทอมต่าง ๆ พร้อมด้วยลูกสรชี้ไปยังส่วนของตำแหน่ง

  12. วิธีการของ Memory-based Inversion ใช้ปฏิบัติการทั้งหมดอยู่บนหน่วยความจำหลักทำให้เวลาในการประมวลผลทั้งหมดมีความรวดเร็วมาก ตั้งแต่การสร้างส่วนของ Dictionary และส่วนของ Address ของตำแหน่งที่ปรากฏ

  13. Sort-based Inversion • วิธีนี้จะสร้างส่วนของ Address เก็บในจานแม่เหล็กมีวิธีการ คือ ตัดแบ่งข้อมูลเป็นส่วน ๆ และนำส่วนย่อยนั้นทำการ Sort ใน Main Memory และเขียนกลับไปยังจานแม่เหล็ก เมื่อครบทุกส่วนย่อยแล้วให้ทำการ Merge ส่วนย่อยเหล่านั้นจากชุดเล็กรวมเป็นชุดใหญ่ และได้ผลลัพธ์ของส่วน Address ที่จัดเก็บอย่างเป็นระบบ

  14. วิธีของการ Sort-based Inversion

  15. การค้นหา การค้นหาคำศัพท์ด้วยแฟ้มข้อมูลผกผัน ประกอบด้วย 3 ขั้นตอนหลัก ดังนี้ • การค้นหาในส่วนของพจนานุกรม (Dictionary Search ) • การดึงข้อมูลของตำแหน่งที่ปรากฏ (Retrieval of Occurrences ) • การจัดการกับตำแหน่งที่ปรากฏ (Manipulation of Occurrences )

  16. Dictionary Search • ขั้นแรกเป็นการค้นหาในส่วนพจนานุกรมก่อน Query โดยทั่วไปประกอบด้วยคำศัพท์เป็นคำเดี่ยวหรือหลายคำ หลายรูปแบบ รวมทั้ง Boolean Operators AND , OR , NOT ให้แยกออกเป็นคำเดี่ยว หรือเทอมเดี่ยว และทำการค้นหาต่อไปในส่วนนี้

  17. เช่น การค้นหาคำศัพท์ใน B-Tree สมมุติคำศัพท์นั้นแทนด้วยสัญลักษณ์ Q เริ่มด้วยการค้นหา Q ใน Root Node หากพบก็จะตามลูกศรที่ชี้ไปยังส่วนของตำแหน่งและทำการค้นต่อไปในขั้นที่สอง หากไม่พบก็จะเลือกเส้นทางของ Tree ไปยัง Node ต่อไปที่ Q แทรกระหว่างเทอม 2 เทอมใน Root สมมุติว่าเป็น a และ b โดยเขียนความสำพันธ์ได้เป็น a < Q < b

  18. กระบวนการต่อไปจะเป็นการวนซ้ำ โดยการค้นหา Q ใน Node ใหม่ จาก Node หนึ่งไปสู่อีก Node หนึ่ง จนกว่าจะพบ หรือไม่พบ เมื่อถึงปลายทางของ Tree อันเป็นทางตัน หากพบก็ตามลูกศรที่ชี้ไปยังส่วนของตำแหน่งและทำการค้นต่อไปในขั้นที่สอง หากไม่พบก็รายงานว่าไม่พบ Q ใน Tree และสิ้นสุดการค้นหา

  19. Retrieval of Occurrences • ในขั้นตอนนี้จะวิ่งตามลูกศรที่ชี้จากส่วนของพจนานุกรมไปยังส่วนของตำแหน่ง หรือ Posting File เมื่อพบคำศัพท์และชี้มายัง Posting File แล้ว ก็ดึงข้อมูลตาม Record ที่ปรากฏทำการ Decompression เพื่อให้ข้อมูลกลับสู่สภาพเดิม นอกจากนี้ให้ทำการ Un-packing ข้อมูลเพื่อให้เป็นหน่วยอิสระเฉพาะที่บ่งบอกตำแหน่งที่ปรากฏนั้น และเรียงลำดับเป็น Array เพื่อส่งต่อไปยังขั้นที่สาม ทำการประมวลผลต่อไป

  20. Manipulation of Occurrences • Single-Word Search • Phrase Search • Proximity Search • Boolean Operation

  21. 3. Suffix Trees และ Suffix Arrays เป็นการสืบค้นในเอกสารในอีกรูปแบบหนึ่ง โดยตัวดรรชนีไม่ได้สร้างจากคำสำคัญโดดๆแต่สร้างจากตัวเนื้อหาของเอกสารด้วยการมองเอกสารทั้งระบบเป็นตัวอักขระที่เรียงต่อยาวอย่างไม่จำกัด และส่วนท่องหางของมัน (Suffix) แน่นอนที่สุด ท่อนหางของแต่ละ String ไม่ใช่เพียง 1 ท่อน แต่มีกันหลายๆท่อน เช่น หากตัว String มีความยาว 13 ตัวอักษร ท่อนหางของมันย่อมจะมีความยาวตั้งแต่ 1 ตัวอักษร จนถึง 2,3, ….12 รวมทั้ง 13 ตัวอักษร

  22. ตัวอย่างเช่น ให้ String S = my university จะมี suffix เป็น S[1] = my universitys[8] = ersity S[2] = y university s[9] = rsity S[3] = university s[10] = sity S[4] = university s[11] = ity S[5] = niversity s[12] = ty S[6] = iversity s[13] = y S[7] = versity

  23. ข้อดีของการสร้างดรรชนีในรูปแบบนี้คือ ไม่ต้องไปสนใจโครงการของเนื้อหาว่าจะเป็นรูปแบบใด และไม่ต้องสนใจตัวคำสำคัญใดๆ แต่ดูเป็นเพียงรูปแบบของ String และ Suffix ของมันเป็นพื้นฐาน การสืบค้นก็สามารถทำได้อย่างรวดเร็วเช่นกัน • ไม่ว่าจะเป็นการค้นคำส่วนหน้า (Prefix Searching) • การค้นคำข้างเคียง (Proximity Searching) • การค้นคำที่เป็นช่วง (Range Searching) และการค้าอื่นๆ อีกหลายรูปแบบก็สามารถทำได้

  24. โครงสร้างของ Suffix Tree • Suffix Tree เป็นโครงสร้างข้อมูลแบบต้นไม้ที่สร้างจากทุกท่อนหางของ Text ซึ่งถือเป็นสายอักขระยาวตลอด • คุณสมบัติของ Suffix Tree ที่ว่า Suffix Tree สำหรับ String S ที่มีความยาวเป็น n เป็นโครงสร้างข้อมูลแบบต้นไม้ที่ประกอบด้วย leaf Nodeจำนวน n ซึ่งถูกกำกับด้วยตัวเลข 1 ถึง n โดยแต่ละกิ่ง (Edge) ในต้นไม่จะถูกกำกับด้วย Substring ของ S โดยที่ Suffix ที่ iของ S นั้น เขียนได้เป็น s[i] คือเส้นทางจากหัว (Root) ถึง Leaf Node ที่ I ซึ่ง Node ที่ไม่ใช่หัว และ Leaf Node จะมีการแตกกิ่งอย่างน้อยได้ 2 Nodes

  25. กำหนดให้ S = Mississippi เป็นสายอักขระยาว 11ตัวอักษร เราจะได้ Suffix ของมันดังต่อไปนี้ • S [1] = Mississippi • S [2] = ississippi • S [3] = ssissippi • S [4] = sissippi • S [5] = issippi • S [6] = ssippi • S [7] = sippi • S [8] = ippi • S [9] = ppi • S [10] = pi • S [11] = i

  26. การสร้าง Suffix Trees • ต่อไปนี้ จะแสดงการสร้าง Suffix Tree เป็นขั้นตอนทีละขั้น ตามแนวคิดของ Ukkonen โดยใช้ตัวอย่างของ String = Mississippi • เริ่มจากตัว Suffix Tree ที่ว่างเปล่าก่อนและเติม m จาก Mississippi เป็นอักษรแรก Tree1 Tree-- >---m…

  27. เพิ่มตัวอักษรที่ 2 ซึ่งเป็น i ได้เป็น Suffixes ‘mi’ และ ‘i’ Tree2 • Tree-- >|---mi… | |---i…

  28. ขั้นตอนต่อไปเป็น ‘mis’ จะได้ว่า • Tree3 • Tree-- >|---mis… | |---is… | |---s…

  29. Ukkonen Algorithm • Ukkonenได้นำเสนอการสร้าง Suffix Tree อย่างมีประสิทธิภาพโดยใช้เวลาเป็นเชิงเส้น O(n) วิธีเริ่มจากอักษรตัวแรกของ String ในการสร้างต้นไม้ แล้วกวาดจากซ้ายไปขวาทีละตัวอักษรจนกว่าจะหมด String

  30. Pseudo-code สำหรับ UkkonenAlgorithm • N = length of the stringST_Create Tree Calls n times to SPA (Single Phase Algorithm). SPA: Increase the variable e (virtual end of all leaves). Calls SEA (Single Extension Algorithm) starting with the first extension that does not already exist in the tree and ending at the first extension that already exists.SEA: Follow suffix link. Check if current suffix exists in the tree. If it does not – apply rule 2 and then create a new suffix link. apply_rule_2:Create a new leaf and maybe a new internal node as well.create_node:Create a new node or a leaf.

  31. การค้นหาใน Suffix Tree • การค้นหา Pattern หรือ Substring ใน Suffix Trees ทำได้ง่ายและรวดเร็ว โดยการท่องไปใน Suffix Trees ทีได้ทำการสร้างขึ้น จาก Root ไปจนกระทั่งพบ pattern หรือไม่พบ Pattern ใน Suffix Trees ซึ่งจะใช้เวลาในการค้นหาเป็น O(m log |∑|) เมื่อ Substring ที่ต้องการค้นหามีความยาว m และประกอบด้วยอักขระ |∑| ตัว

  32. สำหรับการค้นคำสำคัญหรือ Pattern ใน SuffixArray จะใช้วิธีการค้นแบบ Binary Search ด้วยการผ่าครึ่งหัวท้ายของขอบเขตในการสืบค้น เปรียบเทียบ Pattern กับคำในช่องทางของ Array นั้น หากไม่พบก็จะลดขนาดการค้นเหลือครึ่งหนึ่ง โดยเลือกเอาส่วนหัวหรือส่วนท้ายขึ้นอยู่กับ Pattern มีการลำดับมากหรือน้อยกว่าคำในช่องกลางของ Array นั้น ทำการเปรียบเทียบเช่นนี้ต่อไปจนกว่าจะพบหรือหมดช่อง Array ในการสืบค้น

  33. Algorithm ของการค้นหา Pattern หรือ Substring ใน Suffix Trees เป็นดังนี้ • Input :The tree, the string P, and the length of P.output :If the substring is found – returns the index of the starting position of the substring in the tree source string. If the substring is not found – returns ST_ERROR.

  34. 4. แฟ้มข้อมูลลายเซ็น ( Signature Files ) • วิธีการสร้างดรรชนีของแฟ้มข้อมูลลายเซ็นได้มาจากการคิดพื้นฐานที่ว่า หากเทอมหรือคำศัพท์ที่ประกอบขึ้นเป็นเอกสารนั้นมีรหัสเฉพาะของมันในแต่ละเทอม เรียกรหัสเฉพาะนั้นว่าเป็นลายเซ็น นำลายเซ็นของเทอมต่าง ๆ ในเอกสารมารวมกันเป็นการเฉพาะกลุ่มอย่างมีนัยสำคัญ ก็จะได้เป็นลายเซ็นของเอกสารนั้น ๆ เมื่อต้องการค้นหาเทอมที่สนใจ ก่อนอื่นต้องแปลงเป็นลายเซ็นของเทอมนั้นก่อน และทำการตรวจสอบจากลายเซ็นของเอกสารทุกฉบับที่ต้องการค้นหาให้ได้อย่างรวดเร็ว เมื่อพบการ Match ของลายเซ็น ก็เชื่อได้ว่าน่าจะมีเทอมนั้นปรากฏอยู่ในเอกสาร ทำการตรวจสอบในรายละเอียดของเอกสารเป็นการยืนยัน

  35. การกำหนดลายเซ็นสามารถทำได้ด้วยการ Hashing ตัวอย่างเอกสารใน หัวข้อที่ 1 ทำการ Hashing ของเทอมจะได้ผลลัพธ์ดังนี้

  36. นำเทอมที่มีลายเซ็นในรูป Hash String มารวมกัน ตามที่ปรากฏในเอกสาร ด้วยวิธีการ OR หรือ Superimpose ก็จะได้ลายเซ็นของเอกสารแต่ละฉบับเป็นดังรูป

  37. ข้อดีของแฟ้มข้อมูลลายเซ็นคือการสร้างดรรชนีของเอกสาร ไม่ได้มีความสลับซับซ้อนมากนัก เอกสารแต่ละฉบับก็จะได้ตัวลายเซ็นจากการ OR ของบิท ของเทอมที่ประกอบมันการปฏิบัติการทำได้รวดเร็วมากเพราะเป็นการทำบน Main Memory ด้วยคำสั่ง OR ของ Bitwise ความยาวของ Word ในหน่วยความจำจะเป็น 32 หรือ 64 Bits ก็ทำได้เร็วใน 1 คำสั่ง ความเร็วในการประมวลผลในกรณีนี้ เป็นเชิงเส้นตรงโดยที่ไม่ต้องมีการ Sort หรือ Merge ขอแฟ้มข้อมูลดรรชนีแต่อย่างไร

  38. การสร้าง Signature File • การสร้างแฟ้มข้อมูลชนิดนี้ไม่มีความสลับซับซ้อน โดยข้อความในเอกสารจะถูกตัดแบ่งเป็นBlock ซึ่งแต่ละ Block ก็จะสร้างตัวลายเซ็นของมันด้วยการรวมของเทอมจากการ OR ของ Bitwise • อีกวิธีหนึ่งในการสร้างแฟ้มข้อมูลลายเซ็นเป็นการจัดเก็บแต่ละบิทของลายเซ็นโดยเฉพาะเรียกประเภทนี้ว่า Bitsliced Signature File โดยแฟ้มข้อมูลที่หนึ่งเก็บเฉพาะบิทที่หนึ่งของลายเซ็นทั้งหมด แฟ้มข้อมูลชุดที่สองเก็บเฉพาะบิทที่สอง และต่อ ๆ ไป หากลายเซ็นของเทอมเป็น 32 บิท ก็จะมีแฟ้ม ชุดรวม 32 แฟ้ม

  39. การค้นหาเทอมที่สนใจจะตรวจเช็คเฉพาะบิทที่เป็น 1 ของลายเซ็นของเทอมนั้น กับแฟ้มชุดข้างต้นก็ทำได้ Text Block ที่สอดคล้อง ( Match ) เป็นผลลัพธ์ ทำการตรวจสอบในรายละเอียดเป็นการยืนยัน

  40. 11111111

  41. 111111

  42. 5. การค้นหาตามลำดับ ( Sequential Searching ) • หัวข้อนี้จะเริ่มด้วยวิธีการ Brute Force ซึ่งเป็นการกวาดหาที่ง่ายที่สุด แต่ใช้เวลามากที่สุดอันจะใช้เป็นการเปรียบเทียบกับวิธีการอื่นในหัวข้อนี้ ได้แก่ KMP , BM และ Shift-Or Algorithms

  43. Brute Force • วิธีการของ Brute Force เป็นวิธีที่ง่ายที่สุดในบรรดาวิธีการทั้งหมดของการกวาดหาเทอมในเอกสาร ด้วยการเทียบเคียงอักขระในเทอมนั้นกับอักขระในเอกสารจากต้นชนปลาย ณ ตำแหน่งหนึ่งๆ ผลที่ได้คือสอดคล้อง ( Match ) หรือไม่สอดคล้อง ( Mis-Match )ณ. ตำแหน่งนั้นในเอกสาร เมื่อรายงานผลที่ได้ ขั้นต่อมาก็จะเลื่อนตำแหน่งการเทียบเคียงไปอีกตำแหน่งทำการตรวจสอบความสอดคล้อง รายงานผลและวนซ้ำด้วยการเลื่อนไปอีกหนึ่งตำแหน่ง จนกว่าจะสิ้นสุดของเอกสาร

  44. Brute Force Algorithm • Algorithm ของการค้นหาด้วยวิธี Brute Force เป็นดังต่อไปนี้ Input : P and T the pattern and text string; m, the length of P and m ≠ 0 . Output : The return value is the index T where a copy of P begins, or -1 if no match for P is found

  45. Example : Brute Force Algorithm 1 1 1 1 2 3 4 5 6 7 8 9 0 1 2 Text : a b c d a b a b c b a d Pattern : a b a b c b a Move a a a b a b c b a a b a b c b การค้นหาด้วยวิธี Brute Force ของ Pattern ‘a b c d’ ใน text

  46. Knuth-Morris-Pratt Algorithm • เมื่อมีการเทียบเคียงของ Pattern กับ text ในตำแหน่งต่อตำแหน่งจากซ้ายไปขวา และปรากฏว่าไม่สอดคล้องกันในตำแหน่งไดที่ถัดมา ให้เลื่อน Pattern นั้น ไปทางขวา ให้ได้ระยะไกลที่สุด โดยคำนวณจากตัวอักขระใน Pattern นั้น เป็นสำคัญ

  47. KMPAlgorithm • KMPAlgorithm ประกอบด้วย 2 ส่วนหลักดังนี้ • KMP Flow Chart Building • KMP Search Algorithm

  48. Exemple : KMPAlgorithm Move a b a b a b a b c d Pattern :a b a b a bc b # Text : … a b a b a bx การค้นหาด้วยวิธี KMP ของ Pattern‘abababcb’ ใน text

  49. Boyer-Moore Algorithm • วิธีการค้นหาเทอมในเอกสารด้วยวีการของ Boyer-Moore(BM) นั้นจะเทียบเคียงอักขระในเทอมที่เรียกว่า pattern กับอักขระ ในเอกสารที่เรียกว่า Text จากขวาไปซ้าย วิธีการแบบ BM มีประสิทธิภาพในการค้นหาเทอมได้อย่างรวดเร็วมาก เนื่องจากไม่ต้องทำการเทียบเคียงทุกตัวอักษรใน pattern กับ Text แต่จะทำการเทียบเคียงอักษรตัวขวาสุดของ pattern กับ Text ก่อน หากไม่สอดคล้องกันก็จะทำการเลื่อนตำแหน่งไปทางขวา อย่างน้อย 1ตำแหน่งและจะสามารถเลื่อนได้ไกลสุดเท่ากับ Search ความยาวของ Pattern นั้นได้

  50. สาระสำคัญของ BM Search อยู่ที่การเลื่อนตำแหน่งไปทางขวานั้นจะไปได้ไกลเท่าได ซึ่งจะเป็นไปได้ใน 2 กรณี คือ • 1. Bad –character Shift • 2. Good-suffix Shift

More Related