การตรวจจับคำซ้ำในข้อความ (Text Similarity)
การตรวจจับคำซ้ำหรือการวัดความเหมือนในข้อความเป็นปัญหาที่สำคัญในงานประมวลผลภาษาธรรมชาติ (Natural Language Processing – NLP) เช่น การค้นหาข้อมูล การกรองสแปม และการจัดกลุ่มข้อมูลข้อความ ในบทความนี้ เราจะพูดถึงแนวทางการตรวจจับคำซ้ำในข้อความพร้อมตัวอย่างโค้ด Python ที่ใช้งานได้จริง
แนวคิดพื้นฐาน
การวัดความเหมือนของข้อความมีหลายวิธี เช่น:
- การใช้ระยะทางของคำ (Text Distance)
- เช่น Levenshtein Distance หรือ Edit Distance
- ใช้ในการวัดความแตกต่างระหว่างสองข้อความโดยคำนวณจำนวนการแก้ไข (เพิ่ม ลบ หรือแทนที่)
- การใช้การแปลงข้อความเป็นเวกเตอร์ (Text Vectorization)
- เช่น Bag of Words (BoW), TF-IDF, หรือ Word Embeddings (เช่น Word2Vec หรือ BERT)
- การคำนวณค่าความเหมือน (Similarity Measures)
- เช่น Cosine Similarity หรือ Jaccard Similarity
ในตัวอย่างนี้ เราจะใช้ Cosine Similarity เพื่อวัดความเหมือนของข้อความสองชุด
การติดตั้งไลบรารีที่จำเป็น
ก่อนเริ่มต้น ให้ติดตั้งไลบรารีที่จำเป็น:
pip install scikit-learn
Code language: Python (python)
ตัวอย่างโค้ด Python
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
# ตัวอย่างข้อความ
texts = [
"ฉันชอบอ่านหนังสือที่ร้านกาแฟ",
"ฉันชอบไปที่ร้านกาแฟเพื่ออ่านหนังสือ",
"ร้านกาแฟเป็นที่ที่ฉันอ่านหนังสือบ่อยๆ",
"ฉันชอบวิ่งตอนเช้าที่สวนสาธารณะ"
]
# สร้าง TF-IDF Vectorizer
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(texts)
# คำนวณ Cosine Similarity
cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix)
# แสดงผลลัพธ์
print("\nCosine Similarity Matrix:")
print(cosine_sim)
# ฟังก์ชันสำหรับการวิเคราะห์คำซ้ำ
import numpy as np
def find_similar_pairs(sim_matrix, threshold=0.5):
pairs = []
n = sim_matrix.shape[0]
for i in range(n):
for j in range(i + 1, n):
if sim_matrix[i, j] > threshold:
pairs.append((i, j, sim_matrix[i, j]))
return pairs
# กำหนด threshold และหาคู่ข้อความที่เหมือนกัน
threshold = 0.7
similar_pairs = find_similar_pairs(cosine_sim, threshold)
print("\nข้อความที่เหมือนกัน (Threshold = {}):".format(threshold))
for i, j, score in similar_pairs:
print(f"ข้อความ {i + 1} และ {j + 1} มีความเหมือน {score:.2f}")
Code language: Python (python)
อธิบายโค้ด
- การเตรียมข้อมูล:
- เราเริ่มด้วยข้อความตัวอย่าง 4 ชุด ซึ่งบางข้อความมีเนื้อหาใกล้เคียงกัน
- TF-IDF Vectorizer:
- ใช้
TfidfVectorizer
เพื่อแปลงข้อความเป็นเวกเตอร์เชิงตัวเลข โดยคำนวณค่าความสำคัญของคำในแต่ละข้อความ
- ใช้
- Cosine Similarity:
- คำนวณค่าความเหมือนเชิงมุมระหว่างเวกเตอร์ข้อความ
- การค้นหาข้อความที่เหมือนกัน:
- ใช้ threshold (กำหนดเป็น 0.7) เพื่อเลือกคู่ข้อความที่มีค่าความเหมือนสูงกว่าค่าที่กำหนด
ผลลัพธ์ที่ได้
หลังจากรันโค้ด จะได้ Matrix ความเหมือนของข้อความ และคู่ข้อความที่มีความเหมือนเกิน Threshold ที่กำหนด ตัวอย่างผลลัพธ์:
Cosine Similarity Matrix:
[[1. 0.85 0.80 0.10 ]
[0.85 1. 0.78 0.12 ]
[0.80 0.78 1. 0.09 ]
[0.10 0.12 0.09 1. ]]
ข้อความที่เหมือนกัน (Threshold = 0.7):
ข้อความ 1 และ 2 มีความเหมือน 0.85
ข้อความ 1 และ 3 มีความเหมือน 0.80
ข้อความ 2 และ 3 มีความเหมือน 0.78
Code language: Python (python)
สรุป
การตรวจจับคำซ้ำในข้อความสามารถช่วยในหลายแอปพลิเคชัน เช่น การจัดกลุ่มบทความ การกรองข้อความสแปม หรือการตรวจสอบเนื้อหาที่ซ้ำกัน โค้ดข้างต้นเป็นเพียงตัวอย่างเบื้องต้น คุณสามารถปรับแต่งเพื่อให้เหมาะสมกับงานของคุณ เช่น การใช้โมเดล Word Embedding เพื่อให้ผลลัพธ์ที่แม่นยำขึ้น