img

مقدمه ای بر متن کاوی با R

/
/
/

بخش بسیار زیادی از اطلاعات متنی و غیر متنی که هر روز تولید می شوند، جز برای پردازش، ارزش دیگری ندارند. متن کاوی شامل الگوریتم های کاوش (استخراج)  اطلاعات، یادگیری ماشینی، آمار و پردازش طبیعی زبان، تلاشی برای استخراج اطلاعات با کیفیت بالا و کاربردی از متن می‌باشد.

متن کاوی ( Text Mining ) به طور کلی به معنی کاوش و یافتن اطلاعات کاربردی و با کیفیت بالا از صفحات متنی است. به صورت اختصاصی تر، استخراج متن؛ آنالیز و تحلیل متن به وسیله ماشین و فعالیت مکانیکی است که از الگوریتم های کاوش اطلاعات، یادگیری ماشینی و آمار همراه با فرآیند طبیعی زبان برای استخراج اطلاعات کاربردی استفاده می کند. شامل برنامه های گسترده در زمینه هایی مانند نظارت رسانه های اجتماعی، سیستم های پیشنهاد دهنده، تحلیل گرایش ها و عقاید، دسته بندی ایمیل های اسپم، کاوش عقاید و نظرات و … است.
مهم نیست با چه برنامه ای این کار انجام شود، به هر حال مراحلی وجود دارند که در هر عملیات متن کاوی باید در نظر گرفت. این مراحل شامل پردازش متن، محاسبه تکرار لغات موجود در متن برای کشف ارتباط بین این لغات و …می باشند. R زبان متن باز (open Source)  و محیطی برای محاسبات آماری و نموداری است.
شامل پکیج هایی مثل tm, SnowballC, ggplot و Wordcloud است که برای استفاده در مراحل اولیه ی متن کاوی که بیان شد بکار میروند.

شروع کار
اولین مرحله، نصب R و R Studio روی سیستم است. R Studio محیط توسعه یکپارچه (IDE)  برای زبان R است.  نسخه رایگان متن باز  R و R Studio را می توان از وب سایت های مربوط به آنها دانلود کرد.
زمانی که هر دو برنامه R  و  R Studio را روی سیستم نصب کردید، R Studio را راه اندازی کرده و پکیج های tm, SnowballC, ggplot2 و  Wordcloud را که معمولا بصورت پیش فرض وجود ندارند، نصب کنید. این پکیج ها را می توانید از این مسیر در برنامه  R Studioنصب کنید:
Tools ->install packages
بارگذاری اطلاعات
ابتدا با بارگذاری اطالاعات آغار می کنیم که می تواند متنی باشد (مجموعه ی متون، که معمولا به عنوان « مجموعه « از آن یاد میکنیم) که می خواهیم اطلاعات کاربردی را از آن استخراج کنیم. برای نشان دادن فرآیند ها در این دوره آموزشی، از پنج متن مربوط به ابر قهرمان محبوبمان بتمن !!  استفاده کردیم.
برای این مرحله، ابتدا کتابخانه tm را بارگذاری کنید و سپس از تابع Corpus() برای ساختن مجموعه اسناد استفاده کند. این کار متن اسناد ما را در داخل پوشه ای خاص کنار مجموعه بارگذاری می کند.
library(tm)
docs <- Corpus(DirSource(“path to your folder”))
docs
<<VCorpus>>
Metadata:  corpus specific: 0,
document level (indexed): 0,
Content:  documents: 5
روش بالا زمانی به کار میرود که بخواهید متن کاوی را روی اطلاعات موجود در پوشه ای داخل کامپیوتر خود انجام دهید، اما اگر بخواهید مجموعه اطلاعاتی را از منبعی آنلاین استفاده کنید؛ R این اجازه را به شما میدهد که مجموعه اطلاعات را به روش زیر در پروژه تان وارد کنید.
برای درک اینکه چطور اطلاعات را مستقیما از اینترنت در R وارد کنیم، ما از مجموعه اطلاعات شناخته شده Iris (با فرمت CSV ذخیره شده)  در
UCI Machine Learning Repository
(http://archive.ics.uci.edu/ml/)
که امکان دسترسی رایگان به چندین مجموعه اطلاعاتی قابل استفاده در آزمایش بسیاری از ماشین های یادگیری، را فراهم میکند، استفاده کردیم.
کتابخانه RCurl را بارگذاری و نصب کنید. این کتابخانه امکان جذب URL، در خواست های HTTP، قالب های get و post، و پردازش نتایج رسیده از وب سرور را به صورت زیر دارد.

library(RCurl)

url <-’https://archive.ics.uci.edu/ml/machine-learning-
databases/iris/iris.data’
docs <- getURL(url, ssl.verifypeer=FALSE)
connection <- textConnection(docs)
dataset <- read.csv(connection, header=FALSE)
head(dataset)
V1  V2  V3  V4          V5
۱ ۵٫۱ ۳٫۵ ۱٫۴ ۰٫۲ Iris-setosa
۲ ۴٫۹ ۳٫۰ ۱٫۴ ۰٫۲ Iris-setosa
۳ ۴٫۷ ۳٫۲ ۱٫۳ ۰٫۲ Iris-setosa
۴ ۴٫۶ ۳٫۱ ۱٫۵ ۰٫۲ Iris-setosa
۵ ۵٫۰ ۳٫۶ ۱٫۴ ۰٫۲ Iris-setosa
۶ ۵٫۴ ۳٫۹ ۱٫۷ ۰٫۴ Iris-setosa

پردازش
پردازش متن به معنی حذف علائم نشانه گذاری، اعداد، کلمات عمومی و… است. این مرحله برای پاک کردن اطلاعات جهت افزایش اثربخشی و قدرتمندی نتایج با حذف کلماتی که وجودشان در تحلیل و آنالیز ما جایی ندارد، انجام می شود.
حدف علائم نشانه گذاری : برای حذف تمام علائم از دستور زیر استفاده کنید:

docs <- tm_map(docs, removePunctuation)

حذف اعداد:  دستور زیر اعداد موجود در متن را حذف میکند:

docs <- tm_map(docs, removeNumbers)

تغییر متن به حروف کوچک : دستور نشان داده شده در زیر حروف بزرگ موجود در متن را  به حروف کوچک تبدیل خواهد کرد:

docs <- tm_map(docs, tolower)

حذف کلمات متوقف کننده: کلمات عمومی مثل “but” , “and” به عنوان کلمات متوقف کننده شناخته می شوند، دستور زیر آنها را حذف می کند:

docs <- tm_map(docs, removeWords, stopwords(“english”))

حذف فاصله های سفید اضافه: دستور زیر فاصله های سفید اضافه را حذف می کند:

docs <- tm_map(docs, stripWhitespace)

ریشه یابی: ریشه یابی فرایند تبدیل کلمات به فرم ساده یا ریشه آنهاست. برای مثال Playing, Played, Plays,… به کلمه Play تبدیل می شوند.
برای اجرای ریشه یابی از دستور نشان داده شده در زیر استفاده کنید:

library(SnowballC)
docs <- tm_map(docs, stemDocument)

ماتریکس اصطلاحات اسناد
ماتریکس اصطلاحات اسناد (DTM) فراوانی یک کلمه را در متن مربوطه بیان میکند. در این ماتریکس ردیف ها به وسیله اسناد و ستون ها به وسیله کلمات نشان داده می شوند. تعداد دفعات تکرار و وجود یک لغت در متن بیانگر مقداری است که به آن داده میشود. اگر تنها یکبار وجود داشته باشد مقداری برابر ۱ می گیرد، اگر ۲ بار تکرار شده باشد ۲؛ و اگر اصلا در متن نباشد، مقدار آن ۰ خواهد بود.
برای ساختن DTM برای مجموعه مورد نظر، دستور زیر را تایپ کنید:

dtm<- DocumentTermMatrix(docs)
dtm
<<DocumentTermMatrix (documents: 5, terms: 2566)>>
Non-/sparse entries: 3449/9381
Sparsity           : ۷۳%
Maximal term length: 23
Weighting          : term frequency (tf)

خلاصه نتایج DTM ما نشان دهنده این است که ۵ سند و ۲۵۶۶ لغت یکتا وجود دارند. بنابراین بیایید ماتریکسی با ابعاد ۵*۲۵۶۶ که ۳۷% ردیف های آن مقدار۰ را دارند بسازیم. برای به دست آوردن فراوانی کل کلمات موجود در مجموعه، می توانیم تمام مقادیر را در یک ردیف جمع کنیم، با استفاده از دستور زیر :

freq <- colSums(as.matrix(dtm))

برای این کار ما باید اول DTM را به یک ماتریکس تبدیل کنیم و سپس ردیف ها را برای پیدا کردن مقداری مشخص برای هر ستون جمع بزنیم.
سپس این اطلاعات را به صورت کاهشی برای پیدا کردن کلمات با بیشترین تکرار می چینیم، همانند زیر:

ord <- order(freq,decreasing=TRUE)
freqn[head(ord)]

batman     bruce     comic     gotham
۲۲۲            ۸۵          ۸۰             ۵۲
wayne     character
۴۷              ۴۶

پیدا کردن پیوستگی ها
بعد از مرحله قبل، به ایده ایی کلی رسیدیم که کلمات “batman”, “bruce”, “comic”, “wayne” و “character” در متن ما مرکزیت (محوریت) دارند. بنابراین برای پیدا کردن لغاتی که بیشترین همبستگی را با آنها دارند می توانیم از تابع  findAssocs() که پارامتر های کلمه و محدوده همجواری اش را از DTM می گیرد (که محدوده ای از ۰ تا ۱ دارد) استفاده کنیم. همبستگی  ۱  به معنای « همیشه باهم بودن» است در حالی که همبستگی ۰٫۵ به معنای « با هم بودن در ۵۰ % مواقع است».

findAssocs(dtm, “bruce”, corlimit=0.90)
$bruce
able      pain      times    order     will          time
۰٫۹۹      ۰٫۹۸      ۰٫۹۸      ۰٫۹۷     ۰٫۹۶        ۰٫۹۵
access    day      defeat     earth    eyes        idea
۰٫۹۴      ۰٫۹۴     ۰٫۹۴       ۰٫۹۴     ۰٫۹۴        ۰٫۹۴
individual     minds     nightwing     sometimes
۰٫۹۴               ۰٫۹۴          ۰٫۹۴             ۰٫۹۴
unlike     character
۰٫۹۴        ۰٫۹۳

associated     life     part      personality     alfred
۰٫۹۲                ۰٫۹۲   ۰٫۹۲           ۰٫۹۲             ۰٫۹۱

man     parents
۰٫۹۱       ۰٫۹۱

ترسیم فراوانی لغات
برای نشان دادن نموداری فراوانی های لغات در یک طرح، از کتابخانه ggplot2 به صورت زیر استفاده می کنیم:

library(ggplot2)
wf <- data.frame(word=names(freq), freq=freq)
p <- ggplot(subset(wf, freq>30), aes(word, freq))
p <- p + geom_bar(stat=”identity”)
p <- p + theme(axis.text.x=element_text(angle=45, hjust=1))
p

ابر کلمات
ابر کلمات راهی دیگر برای نشان دادن فراوانی کلمات در اسناد است. اینجا اندازه کلمات نشان دهنده فراوانی آن کلمه در مجموعه اسناد است.
پیکیج Wordcloud را به شکل زیر بارگذاری کنید:

library(wordcloud)

 برای ابر کلماتی که شامل لغاتی با فراوانی بیشتر از ۳۰، از دستور زیر استفاده می کنیم:

wordcloud(names(freq), freq, min.freq=30,colors=brewer.
pal(3,”Dark2”))

برای ابر کلماتی که شامل لغاتی با فراوانی تکرار بیش از ۵۰، از دستور داده شده در زیر استفاده می کنیم:

wordcloud(names(freq), freq, max.words=50,colors=brewer.
pal(6,”Dark2”))

متن کاوی ؛  استخراج اطلاعات کاربردی از متن که شامل مراحل ابتدایی پیش پردازش اطلاعات، ریشه یابی لغات، ارائه مجموعه با استفاده از ماتریکس لغات اسناد (DTM) و بدست آوردن مجموعه همبستگی ها و ارتباطات بین لغات است. R از چندین کتابخانه و تابع برای عملکرد مناسب در این فرایند استفاده می کند.

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

It is main inner container footer text