Memasukkan Data Teks Al-Qur’an

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

Package Text Mining

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.

Panjang Kata

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.

Daftar Pustaka

  1. http://textminingthequran.com/tutorial/quran.html
  2. http://textminingthequran.com/tutorial/tm.html