แยกชื่อจากที่อยู่อีเมล
สมมติว่าฉันมีที่อยู่อีเมลสองแห่งและฉันต้องการดูว่าเป็นไปได้หรือไม่ว่าเป็นของบุคคลเดียวกัน ตัวอย่างเช่น[email protected]และ[email protected]น่าจะมาจากคน ๆ เดียวกัน (ไม่จำเป็นต้องเป็นที่แน่นอนการให้ความเหมือนก็เพียงพอแล้ว)
ฉันมีสองทิศทางในการบรรลุเป้าหมายนี้หนึ่งคือการเปรียบเทียบสตริงระหว่างที่อยู่อีเมลสองแห่งและอีกอันคือการแยกชื่อจากที่อยู่อีเมลก่อนจากนั้นเปรียบเทียบว่าอาจเป็นบุคคลเดียวกันหรือไม่ เช่นเดียวกับในตัวอย่างข้างต้นชื่อสกัดที่ควรจะเป็นและCameron M Thompsonc thompson
ฉันยังสงสัยว่าถ้าหากที่อยู่อีเมลแห่งใดแห่งหนึ่งได้รับการรับรองว่ามีชื่อเต็ม (โดยปกติที่อยู่อีเมลของ บริษัท จะมีชื่อเต็ม) ซึ่งจะช่วยในการแยกชื่อในที่อยู่อีเมลอื่น (ที่อยู่อีเมลส่วนบุคคลอาจไม่มีเสมอไป ชื่อเต็ม) หรือจะช่วยในการเปรียบเทียบที่อยู่อีเมลทั้งสอง
ฉันมีช่วงเวลาที่ยากลำบากในการพยายามคิดว่าสองทิศทางข้างต้นจะเป็นไปได้หรือไม่ โดยเฉพาะอย่างยิ่งเมื่อที่อยู่อีเมลอาจไม่มีตัวคั่นและชื่ออาจแตกต่างกันไปมากซึ่งรายชื่ออาจไม่เพียงพอที่จะค้นหารายการที่ตรงกัน
ฉันจะดำเนินการแก้ไขปัญหานี้อย่างไร? แมชชีนเลิร์นนิง / การเรียนรู้เชิงลึกจะช่วยได้หรือฉันควรไปกับสิ่งอื่นที่เรียบง่ายเช่น regex และการจับคู่สตริงที่คลุมเครือ
อัปเดต: ฉันมีชุดข้อมูลที่มีสองคอลัมน์ที่อยู่อีเมลและชื่อและประมาณ 2k แถวที่นั่น ฉันเชื่อว่าสิ่งนี้สามารถใช้สำหรับทิศทางที่สอง (การแยกชื่อ) สำหรับทิศทางแรก (ความคล้ายคลึงกันของการเปรียบเทียบสตริง) ฉันคิดว่าจะแก้ไขชุดข้อมูลเป็นสามคอลัมน์ (ที่อยู่อีเมล 1 ที่อยู่อีเมล 2 ป้ายกำกับว่าเป็นบุคคลเดียวกันหรือไม่) ซึ่งควรให้ข้อมูลประมาณ 1k แถว
คำตอบ
ก่อนที่จะพูดถึงวิธีแก้ปัญหาทำไมคุณไม่ให้ความสำคัญกับเนื้อหาแทนล่ะ? ฉันคิดว่าการแก้ปัญหาของคุณจะเป็นประโยชน์มากกว่าเนื่องจากที่อยู่อีเมลส่วนใหญ่ลงท้ายด้วยเครื่องหมายของผู้ส่งชื่อนามสกุล. นอกจากนี้ความเป็นไปได้ที่จะไม่ได้รับข้อมูลนี้จากที่อยู่อีเมลนั้นสูงกว่าความเป็นไปได้ที่จะไม่ได้รับข้อมูลนี้จากเนื้อหา โดยเฉพาะอย่างยิ่งกรณีนี้กับที่อยู่อีเมลของ บริษัท ซึ่งอาจไม่มีชื่อเต็มในที่อยู่อีเมล (อักษรตัวแรกของชื่อและนามสกุลเช่น John Travolta - [email protected]) แต่ต้องมีชื่อเต็มของผู้เขียน (อย่างน้อยที่สุด ชื่อ) ในตอนท้าย นอกจากนี้ให้พิจารณาด้วยว่าที่อยู่อีเมลจำนวนมากจะมีเพียงชื่อหรือนามสกุลหรือไม่มีทั้งสองอย่าง แต่ใช้คำแทนเช่น superboy122133@+++.com: D แต่แอปอีเมลส่วนใหญ่จะมีเครื่องหมายเริ่มต้นที่มีชื่อและนามสกุล นอกจากนี้คุณสามารถผสมผสานสองเทคนิคนี้ นั่นคือรวมข้อมูลที่อยู่อีเมลกับข้อมูลเนื้อหาอีเมลเพื่อให้หากเป็นไปไม่ได้หรือไม่สามารถรับข้อมูลจากสิ่งเหล่านี้ได้คุณสามารถใช้ข้อมูลอื่นได้
อย่างไรก็ตามหากสมมติว่าคุณไม่ต้องทำอะไรเลยนอกจากที่อยู่อีเมลฉันคิดว่าการใช้เทคนิคการเรียนรู้ของเครื่องจะทำให้ปัญหาหนักเกินไปหรือประเมินค่าสูงเกินไป นอกจากนี้การใช้เทคนิคที่ไม่ใช้แมชชีนเลิร์นนิงไม่ได้หมายความว่าคุณกำลังทำให้โซลูชันง่ายขึ้นเทคนิคเหล่านี้ทั้งหมดจะให้ผลลัพธ์ที่ดีที่สุดเมื่อนำไปใช้ในบริบทที่ถูกต้อง ลองนึกภาพสถานการณ์ง่ายๆ: ถ้าคุณรู้หรือสามารถสรุปได้ง่ายๆว่า [ภาษี] = 0.2 * [เงินเดือน] + 20 $ ทำไมคุณถึงพบสมการนี้ (หรือเหมาะสม) โดยใช้ Machine Learning
เว้นแต่คุณจะมีข้อมูลในรูปแบบ | ที่อยู่อีเมลชื่อเต็ม | คุณไม่ควรเริ่มต้นด้วยการใช้ Machine Learning (หากคุณมี | ที่อยู่อีเมลชื่อเต็ม | ข้อมูลเป็นตัวเลือกคุณจะต้องฝึกโมเดลเพื่อเรียนรู้ความสัมพันธ์ทั่วไประหว่างที่อยู่อีเมลและชื่อเต็มดังนั้นคุณจะระบุที่อยู่อีเมลที่คล้ายกันได้)
อย่างไรก็ตามในสถานการณ์ปัจจุบันนี้แนวทางหนึ่งคือการค้นหารูปแบบที่เป็นไปได้ทั้งหมดในที่อยู่อีเมล ซึ่งสามารถที่จะ
- อักษรตัวแรกของชื่อและนามสกุล jtravolta@+++.com
- ชื่ออักขระพิเศษและนามสกุล john_travolta@+++.com
- ชื่อและหมายเลข john1954@+++.com
- ...
จากนั้นคุณลักษณะเหล่านี้ที่ดึงมาจากที่อยู่อีเมลโดยใช้รูปแบบที่ระบุสามารถเปรียบเทียบกับอีเมลอื่น ๆ ได้ทั้งการแฮชหรือใช้อัลกอริทึมระยะทางสตริง
อีกทางเลือกหนึ่งคือการมีพจนานุกรมแฮชของชื่อและนามสกุลที่มีอยู่ทั้งหมดจากนั้นคุณสามารถตัดชิ้นส่วน (สตริงย่อย) จากที่อยู่อีเมลจากนั้นแฮชเพื่อค้นหาชื่อและนามสกุลจากที่อยู่ (แน่นอนในทางกลับกันจะไม่มีประสิทธิภาพสูง ). ที่อยู่อีเมลที่มีคุณสมบัติใกล้เคียงกันมากที่สุดจะตรงกัน
อีกวิธีหนึ่งคือการใช้รูปแบบดังกล่าวข้างต้นคุณสามารถสร้างที่อยู่อีเมลปลอมได้มากมาย เมื่อพิจารณาว่ามีความเป็นไปได้สูงที่จะไม่มีชุดข้อมูลที่มีชื่อและนามสกุลของบุคคลและที่อยู่อีเมลตั้งแต่หนึ่งรายการขึ้นไปการเพิ่มข้อมูลจึงเป็นลำดับแรกของธุรกิจ (ฉันไม่แน่ใจว่าคำเสริมข้อมูลเหมาะกับสถานการณ์นี้หรือไม่ถ้าไม่เป็นเช่นนั้นสมมติว่าการสร้างข้อมูล) ดังนั้นสิ่งที่คุณป้อนจะเป็นชื่อนามสกุล (คุณสามารถใส่ชื่อกลางหมายเลข ฯลฯ ) และผลลัพธ์จะเป็นที่อยู่อีเมลที่สร้างขึ้นแบบสุ่มตามรูปแบบที่กำหนดไว้ล่วงหน้า จำนวนอีเมลที่สร้างขึ้นสำหรับการป้อนข้อมูลเดียวควรได้รับการสุ่มเลือกเช่นกัน แต่ควรระมัดระวังเกี่ยวกับการสร้างที่อยู่อีเมลเดียวกันมากกว่าหนึ่งครั้ง เช่นอินพุต -> John Travolta -> เอาต์พุต -> j_travolta12@+++.com,john.t.99@+++.com, john.travolta@+++.com (สมมติว่าสำหรับตัวอย่างนี้เราสุ่มเลือกอีเมล 3 ฉบับที่จะสร้าง)
จากนั้นหลังจากที่คุณสร้างที่อยู่อีเมลที่มีรูปแบบ (เกือบ) เป็นไปได้ทั้งหมดคุณจะได้รับความช่วยเหลือจากเทคนิคการเรียนรู้ของเครื่อง ดังนั้นโมเดลอาจให้ความเป็นไปได้กับชื่อและนามสกุลที่เกี่ยวข้อง (นอกจากนี้คุณสามารถกำหนดค่าผลลัพธ์เพื่อให้คุณได้ชื่อและนามสกุลที่มีความเป็นไปได้สูงกว่า)
สิ่งที่ต้องพิจารณาอีกประการหนึ่งคือความเป็นไปได้ที่บุคคลสองคนที่มีชื่อและนามสกุลเหมือนกัน สุดท้ายนี้เป็นอิสระจากการใช้วิธีการแก้ปัญหาของคุณไม่สามารถสมบูรณ์แบบได้เนื่องจากตัวอย่างเช่นไม่สามารถเข้าใจได้ว่าอักขระ 'j' หมายถึง John หรือ Jake ในที่อยู่อีเมล ดังนั้นหากคุณสามารถรวมเนื้อหาอีเมลเข้ากับโซลูชันของคุณได้ก็จะเพิ่มประสิทธิภาพอย่างมาก
อัปเดตตาม: ตรวจสอบคำตอบนี้ซึ่งไม่ได้ตอบโจทย์ของคุณอย่างแน่นอน แต่บริบทเหมือนกัน