Pada percobaan ini, kita akan mencoba bagaimana menerapkan text mining untuk menganalisis teks Al-Qur’an dimana data yang digunakan diambil dari http://tanzil.net/download/ dengan memilih “Simple Clear” dan pada opsi lainnya dipilih “Text(with aya numbers)”. File tersebut termasuk nomor surah diikuti dengan nomor ayat diikuti dengan teks sebenarnya dari ayat tersebut. Bidang dipisahkan oleh bilah “|” .
Sys.setlocale("LC_ALL","Arabic")
## [1] "LC_COLLATE=Arabic_Saudi Arabia.1256;LC_CTYPE=Arabic_Saudi Arabia.1256;LC_MONETARY=Arabic_Saudi Arabia.1256;LC_NUMERIC=C;LC_TIME=Arabic_Saudi Arabia.1256"
Perintah diatas dapat digunakan bagi yang terdapat masalah pembacaan huruf arab pada output data set yang disiapkan
q = read.csv("quran-simple-clean.txt", header=F, stringsAsFactor=F, encoding="UTF-8", sep="|")
head(q)
## V1 V2 V3
## 1 1 1 بسم الله الرحمن الرحيم
## 2 1 2 الحمد لله رب العالمين
## 3 1 3 الرحمن الرحيم
## 4 1 4 مالك يوم الدين
## 5 1 5 إياك نعبد وإياك نستعين
## 6 1 6 اهدنا الصراط المستقيم
tail(q)
## V1 V2 V3
## 6231 114 1 بسم الله الرحمن الرحيم قل أعوذ برب الناس
## 6232 114 2 ملك الناس
## 6233 114 3 إله الناس
## 6234 114 4 من شر الوسواس الخناس
## 6235 114 5 الذي يوسوس في صدور الناس
## 6236 114 6 من الجنة والناس
dari data yang ditampilkan dapat dilihat bahwa R akan menamai kolom variabel dari data dengan v1, v2 dan v3, apabila memang ingin dirubah nama header kolomnya sesuai keinginan dapat dengan menggunakan perintah ‘colnames’
colnames(q) = c("sura", "aya", "text")
berikutnya mari kita lihat struktur data Quran kita di R
str(q)
## 'data.frame': 6236 obs. of 3 variables:
## $ sura: int 1 1 1 1 1 1 1 2 2 2 ...
## $ aya : int 1 2 3 4 5 6 7 1 2 3 ...
## $ text: chr "بسم الله الرحمن الرحيم" "الحمد لله رب العالمين" "الرحمن الرحيم" "مالك يوم الدين" ...
dari hasil output diatas dapat dilihat bahwa data Quran yang telah kita masukkan terditi dari 3 variabel dimana sura dan aya berupa interger dan v3 berupa char. Selanjutnya mari kita panggil ayat pertama dari 10 surat paling atas.
q$text[q$aya==1 & q$sura<=10]
## [1] "بسم الله الرحمن الرحيم"
## [2] "بسم الله الرحمن الرحيم الم"
## [3] "بسم الله الرحمن الرحيم الم"
## [4] "بسم الله الرحمن الرحيم يا أيها الناس اتقوا ربكم الذي خلقكم من نفس واحدة وخلق منها زوجها وبث منهما رجالا كثيرا ونساء واتقوا الله الذي تساءلون به والأرحام إن الله كان عليكم رقيبا"
## [5] "بسم الله الرحمن الرحيم يا أيها الذين آمنوا أوفوا بالعقود أحلت لكم بهيمة الأنعام إلا ما يتلى عليكم غير محلي الصيد وأنتم حرم إن الله يحكم ما يريد"
## [6] "بسم الله الرحمن الرحيم الحمد لله الذي خلق السماوات والأرض وجعل الظلمات والنور ثم الذين كفروا بربهم يعدلون"
## [7] "بسم الله الرحمن الرحيم المص"
## [8] "بسم الله الرحمن الرحيم يسألونك عن الأنفال قل الأنفال لله والرسول فاتقوا الله وأصلحوا ذات بينكم وأطيعوا الله ورسوله إن كنتم مؤمنين"
## [9] "براءة من الله ورسوله إلى الذين عاهدتم من المشركين"
## [10] "بسم الله الرحمن الرحيم الر تلك آيات الكتاب الحكيم"
Dari data yang ditampilkan diatas dapat dilihat bahwa bahwa orang-orang Tanzil menganut bahwa “بسم الله الرحمن الرحيم” adalah bagian dari ayat pertama pada semua surah (kecuali surah no. 9). Disini kita ingin mencoba untuk membuat pengecualian pada surah nomor 1 dan 9. bagaimana cara melakukannya ?
q$text = gsub("^بسم الله الرحمن الرحيم ","",q$text)
Mari kita panggil dan tampilkan surah ke 100
q[q$sura==100,]
## sura aya text
## 6147 100 1 والعاديات ضبحا
## 6148 100 2 فالموريات قدحا
## 6149 100 3 فالمغيرات صبحا
## 6150 100 4 فأثرن به نقعا
## 6151 100 5 فوسطن به جمعا
## 6152 100 6 إن الإنسان لربه لكنود
## 6153 100 7 وإنه على ذلك لشهيد
## 6154 100 8 وإنه لحب الخير لشديد
## 6155 100 9 أفلا يعلم إذا بعثر ما في القبور
## 6156 100 10 وحصل ما في الصدور
## 6157 100 11 إن ربهم بهم يومئذ لخبير
Sekarang kita akan mencoba bagaimana cara untuk melihat dimana saja kata Muhammad (محمد) disebutkan dalam Al-Qur’an
q[which(grepl("محمد", q$text)),]
## sura aya
## 437 3 144
## 3573 33 40
## 4547 47 2
## 4612 48 29
## text
## 437 وما محمد إلا رسول قد خلت من قبله الرسل أفإن مات أو قتل انقلبتم على أعقابكم ومن ينقلب على عقبيه فلن يضر الله شيئا وسيجزي الله الشاكرين
## 3573 ما كان محمد أبا أحد من رجالكم ولكن رسول الله وخاتم النبيين وكان الله بكل شيء عليما
## 4547 والذين آمنوا وعملوا الصالحات وآمنوا بما نزل على محمد وهو الحق من ربهم كفر عنهم سيئاتهم وأصلح بالهم
## 4612 محمد رسول الله والذين معه أشداء على الكفار رحماء بينهم تراهم ركعا سجدا يبتغون فضلا من الله ورضوانا سيماهم في وجوههم من أثر السجود ذلك مثلهم في التوراة ومثلهم في الإنجيل كزرع أخرج شطأه فآزره فاستغلظ فاستوى على سوقه يعجب الزراع ليغيظ بهم الكفار وعد الله الذين آمنوا وعملوا الصالحات منهم مغفرة وأجرا عظيما
Text Mining Package
selanjutnya kita akan mencoba sedikit bermain dengan library “tm” dengan menginstallnya terlebih dahulu
library(tm)
## Loading required package: NLP
berikutnya kita buat korpus yang terdiri dari data mentah aya-ayat dalam bahasa arab yang akan dijadikan sebagai “VektorBounce”
qCorpus = Corpus(VectorSource(q$text))
lalu jalanlan perintash “inspect” untuk memeriksa isi konten yang ada pada Corpus yang telah dibuat
inspect(qCorpus[1:5])
## <<SimpleCorpus>>
## Metadata: corpus specific: 1, document level (indexed): 0
## Content: documents: 5
##
## [1] بسم الله الرحمن الرحيم الحمد لله رب العالمين الرحمن الرحيم
## [4] مالك يوم الدين إياك نعبد وإياك نستعين
setelah itu kita coba melakukan beberapa anotasi menggunakan meta. sekarang, mari kita buat matriks dokumen
qTerms = DocumentTermMatrix(qCorpus)
qTerms
## <<DocumentTermMatrix (documents: 6236, terms: 14865)>>
## Non-/sparse entries: 73563/92624577
## Sparsity : 100%
## Maximal term length: 11
## Weighting : term frequency (tf)
dari perintah diatas menghasilkan matriks dokumen yang panjang (yaitu, ayat-ayat) yang ada pada istilah-istilah Al-Qur’an. Mari kita misalnya melihat sebagian dari matriks ini dengan melihat ke dalam dokumen 1 sampai 7 (yaitu, sura al-Fateha) dan istilah mengatakan 1000 sampai 1005
inspect(qTerms[1:7,1000:1005])
## <<DocumentTermMatrix (documents: 7, terms: 6)>>
## Non-/sparse entries: 0/42
## Sparsity : 100%
## Maximal term length: 6
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs وجه ولله اتخذ سبحانه قانتون ولدا
## 1 0 0 0 0 0 0
## 2 0 0 0 0 0 0
## 3 0 0 0 0 0 0
## 4 0 0 0 0 0 0
## 5 0 0 0 0 0 0
## 6 0 0 0 0 0 0
## 7 0 0 0 0 0 0
data diatas memberitahu kita bahwa tidak satu pun dari 5 istilah ini muncul di salah satu dari 7 dokumen pertama. Yang membatasi adalah masalah yang dikenal dalam matriks dokumen.
Beberapa operasi dari Document Matrics Mari kita temukan beberapa istilah umum dalam Al-Quran. Apakah istilah yang digunakan 100 kali atau lebih dalam Al-Quran?
findFreqTerms(qTerms,100)
## [1] "الله" "رب" "لله" "يوم" "الذين" "عليهم"
## [7] "ولا" "الكتاب" "ذلك" "فيه" "لا" "بما"
## [13] "من" "هم" "والذين" "وما" "أولئك" "ربهم"
## [19] "على" "أم" "إن" "كفروا" "لم" "عذاب"
## [25] "الناس" "بالله" "ومن" "آمنوا" "إلا" "في"
## [31] "كانوا" "إنما" "الأرض" "قالوا" "لهم" "وإذا"
## [37] "ولكن" "إلى" "إنا" "الذي" "فلما" "ما"
## [43] "أو" "السماء" "والله" "شيء" "كل" "ولو"
## [49] "أيها" "ربكم" "يا" "به" "فلا" "لكم"
## [55] "كنتم" "مما" "وإن" "النار" "فإن" "أن"
## [61] "فيها" "قبل" "هذا" "وهم" "الحق" "بعد"
## [67] "ثم" "عليم" "هو" "وهو" "إني" "ربك"
## [73] "قال" "السماوات" "والأرض" "إنه" "عليه" "عليكم"
## [79] "عن" "موسى" "خير" "عند" "قوم" "حتى"
## [85] "قد" "منكم" "ولقد" "كان" "منهم" "قل"
## [91] "الدنيا" "بل" "يشاء" "له" "ربنا" "إذ"
## [97] "إذا"
Ada hal yang Menarik untuk dilihat bahwa nabi Musa “موسى” ada di antara daftar. Perlu diperhatikan bahwa kita tidak melakukan apa pun, kata dasar akar kata diulang dengan berbagai afiks sebagai kata yang berbeda. Bahkan kita dapat membuat daftar istilah yang paling sering dan menyimpannya dalam bingkai data
freq = sort(colSums(as.matrix(qTerms)),decreasing = T)
head(freq, 10)
## من الله في ما إن لا الذين على إلا ولا
## 2763 2153 1185 1013 966 812 810 670 664 658
wf = data.frame(word=names(freq), freq=freq)
mari kita plot dengan menggunakan paket ‘ggplot2’
library(ggplot2)
##
## Attaching package: 'ggplot2'
## The following object is masked from 'package:NLP':
##
## annotate
wfplot = subset(wf,freq>300)
ggplot(wfplot, aes(word, freq)) +
geom_bar(stat="identity")+
theme(axis.text.x=element_text(angle=45, hjust = 1))
dari tampilan diatas bisa kita lihat kata apa saja yang mendominasi penyebutannya dalam Al-Qur’an.
Sekarang mari kita lakukan visualisasi yang lebih bagus dengan menggunakan Word Cloud dari paket wordcloud. perlu diperhatikan agar menyesuaikan sesuaikan berbagai parameter dalam memilih skala dan warna yang tepat serta persentase kata yang akan diputar.
library(wordcloud)
## Loading required package: RColorBrewer
set.seed(114)
wordcloud(names(freq), freq, min.freq=50, scale=c(5,.5),colors=brewer.pal(6,"Dark2"), rot.per=0.2)
Berikutnya mari kita coba mencari tahu tentang panjang kata yang ada dalam Al-Qur’an. Pertama mari kita ambil semua kata pada data kata dan panjang kata pada ‘wLen’
words = as.matrix(colnames(qTerms))
wLen = data.frame(nletters=nchar(words))
lalu kita visualisasikan data tersebut
ggplot(wLen, aes(x=nletters))+
geom_histogram(binwidth=1) +
geom_vline(xintercept=mean(nchar(words)),
colour="green", size=1, alpha=.5)+
labs(x="Number of Letters", y="Number of Words")
Hal ini menunjukkan bahwa rata-rata ukuran kata mendekati 5 huruf. perlu diketahui bahwa kita tidak berbicara tentang kata dasar, melainkan kata mentah dengan semua awalan dan akhiran.
```