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