Sebagaimana di publikasi sebelumnya dalam Pengantar Text Mining Pada Al-Qur’an, langkah pertama yang dilakukan adalah memasukkan data teks Al-Qur’an ke program R.
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"
q = read.csv("C:/Users/ASUS/Downloads/data/quran-simple-clean.txt", header=F, stringsAsFactor=F, encoding="UTF-8", sep="|")
colnames(q) = c("surat", "ayat", "teks")
str(q)
## 'data.frame': 6236 obs. of 3 variables:
## $ surat: int 1 1 1 1 1 1 1 2 2 2 ...
## $ ayat : int 1 2 3 4 5 6 7 1 2 3 ...
## $ teks : chr "بسم الله الرحمن الرحيم" "الحمد لله رب العالمين" "الرحمن الرحيم" "مالك يوم الدين" ...
library(tm)
## Loading required package: NLP
Langkah berikutnya yaitu membuat korpus yang terdiri dari ayat-ayat Arab sebagai VectorSource
qCorpus = Corpus(VectorSource(q$teks))
Menginspect isi Corpus
inspect(qCorpus[1:4])
## <<SimpleCorpus>>
## Metadata: corpus specific: 1, document level (indexed): 0
## Content: documents: 4
##
## [1] بسم الله الرحمن الرحيم الحمد لله رب العالمين الرحمن الرحيم
## [4] مالك يوم الدين
Selanjutnya membuat matriks dokumen
qTerms = DocumentTermMatrix(qCorpus)
qTerms
## <<DocumentTermMatrix (documents: 6236, terms: 14865)>>
## Non-/sparse entries: 73995/92624145
## Sparsity : 100%
## Maximal term length: 11
## Weighting : term frequency (tf)
Ini menghasilkan matriks dokumen yang panjang (yaitu, ayat-ayat) terhadap istilah-istilah Al-Qur’an.Misalnya melihat bagian dari matriks ini dengan melihat ke dalam dokumen 1 sampai 7 (yaitu, surat Al Fatihah) dan istilahnya 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
Beberapa operasi dari Document Term Matrics Mari kita temukan beberapa istilah umum dalam Quran. Apa istilah yang digunakan 100 kali atau lebih dalam Quran?
findFreqTerms(qTerms,100)
## [1] "الرحمن" "الرحيم" "الله" "بسم" "رب" "لله"
## [7] "يوم" "الذين" "عليهم" "ولا" "الكتاب" "ذلك"
## [13] "فيه" "لا" "بما" "من" "هم" "والذين"
## [19] "وما" "أولئك" "ربهم" "على" "أم" "إن"
## [25] "كفروا" "لم" "عذاب" "الناس" "بالله" "ومن"
## [31] "آمنوا" "إلا" "في" "كانوا" "إنما" "الأرض"
## [37] "قالوا" "لهم" "وإذا" "ولكن" "إلى" "إنا"
## [43] "الذي" "فلما" "ما" "أو" "السماء" "والله"
## [49] "شيء" "كل" "ولو" "أيها" "ربكم" "يا"
## [55] "به" "فلا" "لكم" "كنتم" "مما" "وإن"
## [61] "النار" "فإن" "أن" "فيها" "قبل" "هذا"
## [67] "وهم" "الحق" "بعد" "ثم" "عليم" "هو"
## [73] "وهو" "إني" "ربك" "قال" "السماوات" "والأرض"
## [79] "إنه" "عليه" "عليكم" "عن" "موسى" "خير"
## [85] "عند" "قوم" "حتى" "قد" "منكم" "ولقد"
## [91] "كان" "منهم" "قل" "الدنيا" "بل" "يشاء"
## [97] "له" "ربنا" "إذ" "إذا"
Menarik untuk melihat nabi Musa (Musa) “موسى” di antara daftar.
Langkah berikutnya yaitu membuat daftar istilah yang paling sering dan menyimpannya dalam bingkai data.
freq = sort(colSums(as.matrix(qTerms)),decreasing = T)
head(freq, 10)
## من الله في ما إن لا الذين على إلا ولا
## 2763 2265 1185 1013 966 812 810 670 664 658
wf = data.frame(word=names(freq), freq=freq)
library(ggplot2)
##
## Attaching package: 'ggplot2'
## The following object is masked from 'package:NLP':
##
## annotate
Berikutnya yaitu mengambil frekuensi paling banyak dalam bingkai data terpisah
wfplot = subset(wf,freq>300)
ggplot(wfplot, aes(word, freq)) +
geom_bar(stat="identity")+
theme(axis.text.x=element_text(angle=45, hjust = 1))
Ouput di atas menunjukkan kata الله adalah kata yang paling sering muncul di Al-Qur’an.
Pertama dapatkan semua kata dalam bingkai data words dan panjang kata di wLen
words = as.matrix(colnames(qTerms))
wLen = data.frame(nletters=nchar(words))
Mari kita menghasilkan beberapa visualisasi dari ini.
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")
Ukuran kata mendekati 5 huruf. Ingat kita tidak berbicara di sini tentang kata dasar, melainkan kata dengan semua awalan dan akhiran.