منبع اصلی نوشتار زیر در این لینک قرار دارد

با استفاده از R، گوگل داکس و کمی متن‌کاوی، فلش کارت بسازیم

چند ماهی از پست قبلی این وبلاگ می‌گذرد و این به دلیل مشغله‌های شخصی من بوده، و این وضع حداقل تا اردیبهشت ادامه خواهد داشت. بنده به دلیل این که درگیر کنکور هستم نمی‌توانم با خیال راحت در اینجا مطلب بگذارم، بنابراین به شدت از نویسنده‌ی مهمان استقبال می‌کنم.

برای درس زبان در کنکور احتیاج به این داشتم که از لغات مهم کنکور، یک فلش کارت سازگار با نرم‌افزار/اپ Anki بسازم. نقطه‌ی شروع هم pdf کنکور سال قبل بود. ۳ صفحه زبان را از فایل pdf کندم و در گوگل درایو آپلود کردم. گوگل یک ocr بسیار بسیار خفن داخل این سرویس قرار داده است، برای استفاده از آن کافی است مانند عکس زیر روی فایل pdf در گوگل درایو کلیک راست کنید و گزینه‌ی باز کردن با سندنگار را انتخاب کنید. ( این یک پاسخ برای جستجوی پایان‌ناپذیر دانشجویان ایرانی برای تبدیل pdf به word است)

2

این کار فایل pdf را از این حالت:

1

به این حالت با متن قابل کپی شدن تبدیل کرد:

3

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

مرحله بعدی وارد کردن این متن به R است، راحترین راه برای این کار، این است که متن را در یک فایل متنی(طبیعتا فرمت txt) ذخیره کنید و آن را در working directory قرار دهید. working directory یا wd پوشه‌ای است که R در حال حاضر از آن استفاده می‌کند و فایلها را به ضورت پیش‌فرض در آن ذخیره می‌کند. این کار، نیاز به آدرس دادن به فایل در محیط کار را از بین می‌برد زیرا اگر آدرس فایل را در دستوری که به آن نیاز دارد وارد نکنید (احتمالا) R به صورت پیش‌فرض در working directory به دنبال آن می‌گردد. دستور getwd در R محل این پوشه روی سیستم را به شما نشان می‌دهد، همچنین با استفاده از setwd می‌توانید این پوشه را تغییر دهید.

حالا نوبت این رسیده است که از متن‌کاوی استفاده کنیم. با دستور زیر، یکی از پکیج‌های متن‌کاوی را که tm نام دارد نصب و فراخوانی می‌کنیم:

install.packages("tm")
library(tm)

معمولا در متن کاوی، به وجود آوردن پیکره‌ی متن از فایل یا text corpus قدم اول کار است، این کار با دستور زیر انجام می‌شود:

text_corpus <- Corpus(DirSource('text'))

من فایل را درون پوشه‌ای به نام text در داخل working directory گذاشته بودم و دستور بالا، متن آن را خواند و در text-corpus ذخیره کرد. در متن مقدار زیادی کاراکتر اضافی وجود دارد(اعداد، پرانتزها و …) دستورهای زیر، این کاراکترهای اضافی را حذف می‌کنند:

text_corpus <- tm_map(text_corpus, stripWhitespace)
 text_corpus <- tm_map(text_corpus, content_transformer(tolower))
 text_corpus <- tm_map(text_corpus, removeWords, stopwords("english"))
 text_corpus <- tm_map(text_corpus, stemDocument)
 text_corpus <- tm_map(text_corpus, removeNumbers)
 text_corpus <- tm_map(text_corpus, removePunctuation)

بعد از حذف کاراکترهای اضافی، باید ماتریس واژه‌ها یا Document-term matrix را از پیکره متنی تشکیل دهیم:

dtm <- DocumentTermMatrix(text_corpus)

کاری که دستور بالا انجام داد کلی فایده دارد که در لینک خط قبلی آمده اما در اینجا کاری که برای ما انجام می‌دهد این است که همه‌ی کلمات متن را از هم جدا می‌کند. با دستور زیر می‌توانید تمامی کلمات به همراه تعداد تکرار آنها را ببینید:

> freq <- sort(colSums(as.matrix(dtm)), decreasing=TRUE)
> freq[1:10]
         data           can           eeg refrigeration         phase        energy        liquid     algorithm 
           14            13            13            13            11            10            10             8 
         food        search 
            8             8

از ماتریس واژه‌ها کلمات را بیرون می‌کشیم تا آنها را ترجمه کنیم و از آنها فلش‌کارت بسازیم:

> words <- dtm$dimnames
> words <- words$Terms

برای ترجمه ابتدا پکیجهای translateR که به apiهای ترجمه گوگل و بینگ وصل می‌شود و سپس پکیج RYandexTranslate که به سرویس ترجمه یاندکس متصل می‌شود را امتحان کردم. api ترجمه گوگل رایگان نیست اما apiهای بینگ و یاندکس نسخه‌ی رایگان دارند. مشکلی که پیش آمد، کندی بیش از حد این دو سرویس بود که احتمالا به دلیل اینترنت است، ترجمه حتی یک کلمه در R با این پکیج‌ها بیش از یک دقیقه طول می‌کشید و ترجمه تمام کلمات به صورت یکجا هم خطای Time out می‌داد، برای همین دوباره دست به دامن گوگل داکس و این دفعه نرم‌افزار صفحه گسترده‌اش شدم، دستور زیر در این نرم‌افزار، کلمات را توسط سرویس ترجمه‌ی گوگل ترجمه می‌کند:

=GOOGLETRANSLATE(column number,"en","fa")

برای اینکه کلماتی که در بردار words دخیره شده بودند را از R به گوگل داکس ببریم راه‌‌های زیادی وجود دارد اما آسانترین راه، خروجی گرفتن از آن به صورت یک فایل csv است:

write.csv( words,file = "words.csv",quote = FALSE,row.names = FALSE)

کلا فرمت csv فرمت آزاد و مفیدی است و در بسیاری از مواقع، آسانترین راهی است که می‌توانید با آن داده‌ها را به R وارد کنید یا از آن خارج کنید. با کمی تمیزکاری بیشتر، در زمان کوتاهی(حدود نیم‌ساعت) به چیزی که می‌خواستم(کلمات کنکور به همراه معنی آنها) رسیدم. در آینده، درباره‌ی متن‌کاوی در R بیشتر خواهم نوشت.

پی‌نوشت: احتمالا دوستان لینوکسی، همه‌ی این کارها را به راحتی می‌توانند در terminal با چند خط کد انجام دهند.



برچسب ها :

به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد