سورس کد VB.NET برای پردازش متن و استخراج کلمات کلیدی با استفاده از الگوریتم‌های متداول مانند TF-IDF


پردازش متن و استخراج کلمات کلیدی، یکی از مهم‌ترین و پرکاربردترین مراحل در تحلیل داده‌های متنی، هوش مصنوعی، و یادگیری ماشین است. در این مقاله، قصد داریم به طور کامل و جامع به شرح نحوه پیاده‌سازی این فرآیند در زبان برنامه‌نویسی VB.NET بپردازیم، به ویژه با تمرکز بر الگوریتم معروف TF-IDF. این الگوریتم، یک روش قدرتمند و کارآمد در تعیین اهمیت کلمات در متن‌های مختلف است و در بسیاری از پروژه‌های تحلیل متن، جستجو و دسته‌بندی، کاربرد دارد.

مقدمه‌ای بر پردازش متن و کلمات کلیدی




در دنیای امروز، میزان حجم داده‌های متنی بسیار زیاد است. از این رو، استخراج اطلاعات مفید و مهم از متون، نیازمند روش‌های مؤثر است. یکی از این روش‌ها، استخراج کلمات کلیدی است که می‌تواند درک سریع‌تر و بهتر متن‌ها را برای سیستم‌ها فراهم کند. این کلمات، معمولاً نشانگر موضوع، مفهوم اصلی، یا نکات مهم متن هستند و در جستجو، دسته‌بندی، و تحلیل‌های بعدی نقش کلیدی ایفا می‌کنند.
برای رسیدن به این هدف، به الگوریتم‌های مختلفی نیاز است. یکی از بهترین و پرکاربردترین الگوریتم‌ها، الگوریتم TF-IDF است. این الگوریتم، اهمیت هر کلمه در متن را بر اساس فراوانی آن در یک سند و در مجموعه‌ای از اسناد (corpus) ارزیابی می‌کند. این متد، به خوبی تفاوت بین کلمات عمومی و خاص را نشان می‌دهد و در نتیجه، کلمات کلیدی واقعی را شناسایی می‌کند.

مفاهیم پایه‌ای TF و IDF




در ابتدا، باید مفهوم هر یک از این اصطلاحات را درک کنیم:
- TF (Term Frequency): میزان تکرار یک کلمه در یک سند خاص است. به عبارتی، این شاخص نشان می‌دهد که چقدر یک کلمه در متن مورد نظر تکرار شده است. هر چه این مقدار بیشتر باشد، اهمیت آن در آن سند بیشتر است.

- IDF (Inverse Document Frequency): معکوس تعداد اسنادی است که یک کلمه در آن‌ها ظاهر شده است. این مقدار نشان می‌دهد که چقدر یک کلمه در مجموعه اسناد عمومی خاص است. اگر یک کلمه در بیشتر اسناد ظاهر شود، مقدار IDF آن کم است، و بالعکس، اگر در تعداد کمی از اسناد باشد، مقدار آن بیشتر است.
ترکیب این دو، یعنی TF و IDF، اهمیت نسبی هر کلمه را در سند و مجموعه اسناد ارزیابی می‌کند. فرمول کلی این است:
\[ \text{TF-IDF} = \text{TF} \times \text{IDF} \]

پیاده‌سازی الگوریتم TF-IDF در VB.NET




در این بخش، قصد داریم یک نمونه کد کامل و قابل اجرا در زبان VB.NET ارائه کنیم که قادر است متن‌ها را پردازش کرده و بر اساس الگوریتم TF-IDF، کلمات کلیدی را استخراج کند. این کد شامل مراحل زیر است:
  1. خواندن متن‌های ورودی

  1. پیش‌پردازش متن (حذف علائم نگارشی، تبدیل به حروف کوچک، حذف کلمات توقف)

  1. محاسبه TF برای هر کلمه در هر سند

  1. محاسبه IDF برای کلمات در مجموعه اسناد

  1. محاسبه TF-IDF و استخراج کلمات برتر

    پیاده‌سازی در کد VB.NET




در ادامه، نمونه‌ای از کد VB.NET آورده شده است که این مراحل را به صورت گام به گام پیاده‌سازی می‌کند. توجه داشته باشید که، برای سادگی، در این نمونه کد، متن‌ها به صورت ثابت تعریف شده‌اند، اما در پروژه‌های واقعی، می‌توانید این متن‌ها را از فایل‌ها یا پایگاه‌های داده بارگذاری کنید.
vb.net  

Imports System

Imports System.Collections.Generic

Imports System.Text.RegularExpressions
Module TFIDFProcessing

Sub Main()

' نمونه متن‌های ورودی

Dim documents As New List(Of String) From {

"این یک متن نمونه است که حاوی کلمات مختلف است. هدف استخراج کلمات کلیدی است.",

"در این متن دیگر، می‌خواهیم کلمات مهم و کلیدی را بیابیم. پردازش متن در VB.NET انجام می‌شود.",

"کلمات کلیدی در متن، نقش مهمی در تحلیل داده‌ها دارند. این نمونه، پیاده‌سازی TF-IDF است."

}
' پیش‌پردازش متن‌ها

Dim processedDocs As List(Of List(Of String)) = PreprocessDocuments(documents)
' ساخت دیکشنری برای نگهداری تعداد تکرار کلمات در هر سند

Dim termFrequencies As List(Of Dictionary(Of String, Integer)) = CalculateTF(processedDocs)
' محاسبه تعداد اسناد و تعداد اسنادی که هر کلمه در آن ظاهر شده است

Dim documentFrequency As Dictionary(Of String, Integer) = CalculateDF(termFrequencies)
' محاسبه TF-IDF برای هر کلمه در هر سند

Dim tfidfScores As List(Of Dictionary(Of String, Double)) = CalculateTFIDF(termFrequencies, documentFrequency, documents.Count)
' نمایش کلمات کلیدی هر سند

For i As Integer = 0 To tfidfScores.Count - 1

Console.WriteLine($"Document {i + 1} - Top Keywords:")

Dim sortedKWords As List(Of KeyValuePair(Of String, Double)) = New List(Of KeyValuePair(Of String, Double))(tfidfScores(i))

sortedKWords.Sort(Function(a, b) b.Value.CompareTo(a.Value))

For j As Integer = 0 To Math.Min(5, ... ← ادامه مطلب در magicfile.ir