แยกสตริงที่ยอมรับจากรายการของสตริงที่มีเสียงดัง


10

ฉันมีหลายพันรายการของสตริงและแต่ละรายการมีประมาณ 10 สาย สตริงส่วนใหญ่ในรายการที่กำหนดจะคล้ายกันมากแม้ว่าบางสตริงจะไม่ค่อยเกี่ยวข้องกับสตริงอื่นและบางคำมีคำที่ไม่เกี่ยวข้อง พวกเขาอาจถูกพิจารณาว่าเป็นความแปรปรวนของสตริงที่ยอมรับได้ ฉันกำลังมองหาอัลกอริทึมหรือไลบรารีที่จะแปลงแต่ละรายการเป็นสตริงที่ยอมรับได้

นี่คือหนึ่งในรายการดังกล่าว

  • Star Wars: Episode IV ความหวังใหม่ StarWars.com
  • Star Wars Episode IV - ความหวังใหม่ (1977)
  • Star Wars: Episode IV - ความหวังใหม่ - มะเขือเทศเน่า
  • ดู Star Wars: Episode IV - ความหวังใหม่ออนไลน์ฟรี
  • Star Wars (1977) - ภาพยนตร์ยอดเยี่ยม
  • [REC] โปสเตอร์ 4 ใบรับประกันความตายโดย Outboard Motor - SciFiNow

สำหรับรายการนี้สตริงใด ๆ ที่ตรงกับนิพจน์ทั่วไป^Star Wars:? Episode IV (- )?A New Hope$จะยอมรับได้

ฉันได้ดูหลักสูตรการเรียนรู้ของ Machine Ng บน Coursera แล้ว แต่ฉันไม่พบปัญหาที่คล้ายกัน


2
ป.ล. ฉันคิดว่าคำที่คุณกำลังมองหาคือ "บัญญัติ"
ฌอนโอเว่น

สตริง "น่าจะเป็นไปได้มากที่สุด" / "ได้รับความยินยอมมากที่สุด" ที่คุณต้องการระบุนิพจน์ทั่วไปหรือไม่ หรือหนึ่งในสตริงในรายการ?
MrMeritology

@MerMeritology ฉันไม่ได้มองหาการแสดงออกปกติ ฉันได้แสดงการแสดงออกปกติในคำถามของฉันเพียงเพื่อแสดงให้เห็นว่าฉันมีความยืดหยุ่นในประเภทของสตริงที่ฉันจะถือว่าถูกต้อง
lacton

ตกลง. จากนั้นคำตอบที่ฉันให้ไว้ด้านล่างควรเหมาะกับคุณ
MrMeritology

สิ่งนี้จะมาภายใต้ NER หรือไม่?
hippietrail

คำตอบ:


4

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

ในวลีที่สองฉันจะลงคะแนนเสียงข้างมาก สมมติว่า 3 ประโยค:

  • Star Wars: Episode IV ความหวังใหม่ StarWars.com
  • Star Wars Episode IV - ความหวังใหม่ (1977)
  • Star Wars: Episode IV - ความหวังใหม่ - มะเขือเทศเน่า

ฉันจะผ่านโทเค็นทีละคน เราเริ่มต้นด้วย "ดาว" มันจะชนะเมื่อสตริงเริ่มต้นด้วย "สงคราม" จะชนะด้วย รายการถัดไปคือ ":" นอกจากนี้ยังจะเป็นผู้ชนะ

โทเค็นทั้งหมดจะได้รับคะแนนเสียงข้างมากจนถึง "ความหวัง" โทเค็นถัดไปหลังจาก "ความหวัง" จะเป็น "|" หรือ "(" หรือ "-" ไม่มีสิ่งใดที่จะชนะในการลงคะแนนเสียงข้างมากดังนั้นฉันจะหยุดที่นี่!

วิธีการแก้ปัญหาอีกก็จะอาจจะใช้ที่ยาวที่สุด subsequence

อย่างที่ฉันบอกว่าฉันไม่ได้คิดมาก ดังนั้นอาจมีวิธีแก้ไขปัญหาของคุณได้ดีกว่า :-)


3

ก่อนอื่นให้คำนวณระยะทางแก้ไขระหว่างสตริงทั้งหมด ดูhttp://en.wikipedia.org/wiki/Edit_distanceและhttp://web.stanford.edu/class/cs124/lec/med.pdf จากนั้นแยกสตริงตัวผิดตามเกณฑ์ระยะทาง

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

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

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