Mendapatkan Data Al-Quran

Membuka http://tanzil.net/download/ dan memilih file yang tepat dengan menggunakan “Simple Clean” tanpa tanda jeda atau opsi lain dan dipisahkan oleh bilah “|”

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  اهدنا الصراط المستقيم

Merapikan beberapa hal Berikut ini struktur Quran di R

str(q)
## 'data.frame':    6264 obs. of  3 variables:
##  $ V1: chr  "1" "1" "1" "1" ...
##  $ V2: int  1 2 3 4 5 6 7 1 2 3 ...
##  $ V3: chr  "بسم الله الرحمن الرحيم" "الحمد لله رب العالمين" "الرحمن الرحيم" "مالك يوم الدين" ...

Karena file awal kita tidak memiliki heading, R secara otomatis menamai ketiga kolom tersebut sebagai V1, V2 dan V3. Kita perlu mengubah nama kolom:

colnames(q) = c("sura", "aya", "text")

menampilkan ayat pertama dalam 10 surah pertama

q$text[q$aya==1 & q$sura<=10]
##  [1] "بسم الله الرحمن الرحيم"                            
##  [2] "بسم الله الرحمن الرحيم الر <U+06DA> تلك آيات الكتاب الحكيم"
##  [3] NA                                                  
##  [4] NA                                                  
##  [5] NA                                                  
##  [6] NA                                                  
##  [7] NA                                                  
##  [8] NA                                                  
##  [9] NA                                                  
## [10] NA                                                  
## [11] NA                                                  
## [12] NA                                                  
## [13] NA                                                  
## [14] NA                                                  
## [15] NA                                                  
## [16] NA                                                  
## [17] NA                                                  
## [18] NA                                                  
## [19] NA                                                  
## [20] NA                                                  
## [21] NA                                                  
## [22] NA                                                  
## [23] NA                                                  
## [24] NA                                                  
## [25] NA                                                  
## [26] NA                                                  
## [27] NA                                                  
## [28] NA                                                  
## [29] NA                                                  
## [30] NA

dari output diatas memandang bahwa “بسم الله الرحمن الرحيم” adalah bagian dari ayat pertama di semua surah

cara mengecualikannya dari semua surah kecuali surah no 1 dan 9 seperti berikut

Menampilkan surat Menampilkan surat 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         إن ربهم بهم يومئذ لخبير

Cari kata Berikut adalah salah satu cara untuk melihat di mana kata Muhammad (محمد) disebutkan dalam Quran

q[which(grepl("محمد", q$text)),]
##      sura aya
## 437     3 144
## 3573   33  40
## 4547   47   2
## 4612   48  29
##                                                                                                                                                                                                                                                                                                                                                                      text
## 437                                                                                                                                                                                                      وما محمد إلا رسول قد خلت من قبله الرسل <U+06DA> أفإن مات أو قتل انقلبتم على أعقابكم <U+06DA> ومن ينقلب على عقبيه فلن يضر الله شيئا <U+06D7> وسيجزي الله الشاكرين
## 3573                                                                                                                                                                                                                                                                          ما كان محمد أبا أحد من رجالكم ولكن رسول الله وخاتم النبيين <U+06D7> وكان الله بكل شيء عليما
## 4547                                                                                                                                                                                                                                                          والذين آمنوا وعملوا الصالحات وآمنوا بما نزل على محمد وهو الحق من ربهم <U+06D9> كفر عنهم سيئاتهم وأصلح بالهم
## 4612 محمد رسول الله <U+06DA> والذين معه أشداء على الكفار رحماء بينهم <U+06D6> تراهم ركعا سجدا يبتغون فضلا من الله ورضوانا <U+06D6> سيماهم في وجوههم من أثر السجود <U+06DA> ذلك مثلهم في التوراة <U+06DA> ومثلهم في الإنجيل كزرع أخرج شطأه فآزره فاستغلظ فاستوى على سوقه يعجب الزراع ليغيظ بهم الكفار <U+06D7> وعد الله الذين آمنوا وعملوا الصالحات منهم مغفرة وأجرا عظيما

Package Text Mining

Langkah pertama adalah membuat korpus yang terdiri dari ayat-ayat Arab sebagai VectorSource

qCorpus = Corpus(VectorSource(q$text))

Menginspect isi Corpus ini

inspect(qCorpus[1:5])
## <<SimpleCorpus>>
## Metadata:  corpus specific: 1, document level (indexed): 0
## Content:  documents: 5
## 
## [1]                        الحمد لله رب العالمين  الرحمن الرحيم         
## [4] مالك يوم الدين         إياك نعبد وإياك نستعين

Membuat matriks dokumen

qTerms = DocumentTermMatrix(qCorpus)
qTerms
## <<DocumentTermMatrix (documents: 6264, terms: 14865)>>
## Non-/sparse entries: 73559/93040801
## 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.

Membuat daftar istilah yang paling sering dan menyimpannya dalam bingkai data

freq = sort(colSums(as.matrix(qTerms)),decreasing = T)
head(freq, 10)
##    من  الله    في    ما    إن    لا الذين   على   إلا   ولا 
##  2763  2152  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

ambil 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 diatas menunjukkan Allah الله adalah kata yang paling sering

WordCloud

visualisasi yang lebih keren dengan Word Cloud

set.seed(114)
wordcloud(names(freq), freq, min.freq=50, scale=c(5,.5),colors=brewer.pal(6,"Dark2"), rot.per=0.2)

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="Nomor Surat", y="Nomor Kata")

Hal ini menunjukkan bahwa rata-rata ukuran kata mendekati 5 huruf. Ingat kita tidak berbicara di sini tentang kata dasar, melainkan kata dengan semua awalan dan akhiran.

Frekuensi surat

Menganalisis frekuensi huruf dengan beberapa package yang perlu diinstal

library(dplyr)
library(stringr)
library(devtools)
library(tidyverse)
Sys.setenv(JAVA_HOME='C:/Program Files/Java/jre1.8.0_311')
library(qdap)
letter = str_split(words,"")
letter=sapply(letter, function(x) x[-1])
letter = unlist(letter)
letter = dist_tab(letter)

Jadi, letter adalah bingkai data yang memberikan daftar huruf dengan frekuensi dan persentase frekuensi kumulatifnya. Berikut ini grafiknya

letterMutate = mutate(letter,Letter=factor(letter$interval, levels=letter$interval[order(letter$freq)]))
ggplot(letterMutate, aes(letterMutate$Letter, weight=percent)) +
  geom_bar()+
  coord_flip()+
  ylab("Perbandingan")+
  xlab("Surat")+
  scale_y_continuous(breaks=seq(0,12,2),
                     label=function(x) paste0(x,"%"),
                     expand=c(0,0), limits=c(0,12))
## Warning: Use of `letterMutate$Letter` is discouraged. Use `Letter` instead.
## Warning: Removed 1 rows containing missing values (geom_bar).

Daftar Pustaka : http://textminingthequran.com/tutorial/quran.html http://textminingthequran.com/tutorial/tm.html