Author
Yanwar Solahudin, Version0.0.1InBetaRelease.
Digunakan untuk mencari nilai Term Frequency dari sekumpulan dokumen. Hasil yang diperoleh sudah menjadi nilai normalized term frequency.
tf(docs)
docs: kumpulan dokumen dengan kunci tertentu. kunci bisa menjadi nilaislugdari model di Django sedangkan isi dari slug adalahstringdokumen.
mengembalikan nilai berupa dictionary term frequency.
>>> from algoritma.textmining.tfidf import tf
>>>
>>> docs = {
>>> ... 'doc1': 'the game of life is a game of everlasting learning',
>>> ... 'doc2': 'the unexamined life is not worth living',
>>> ... 'doc3': 'never stop learning',
>>> ... }
>>>
>>> term_frequency = tf(docs)
>>> term_frequency
{'doc2':
{'unexamined': 0.14285714285714285,
'living': 0.14285714285714285,
'life': 0.14285714285714285,
'not': 0.14285714285714285,
'is': 0.14285714285714285,
'the': 0.14285714285714285,
'worth': 0.14285714285714285},
'doc3': {
'never': 0.3333333333333333,
'stop': 0.3333333333333333,
'learning': 0.3333333333333333},
'doc1': {
'a': 0.1,
'life': 0.1,
'of': 0.2,
'is': 0.1,
'game': 0.2,
'learning': 0.1,
'the': 0.1,
'everlasting': 0.1}}Fungsi yang digunakan untuk mencari nilai Inverse Document Frequency. Fungsi ini membutuhkan nilai Term Frequency yang nilainya sudah menjadi normalized term frequency. Fungsi ini bergantung pada fungsi algoritma.textmining.tfidf.tf.
idf(docs, data_tf)
docs: kumpulan dokumen dengan kunci tertentu. kunci bisa menjadi nilaislugdari model di Django sedangkan isi dari slug adalahstringdokumen.data_tf: nilai parameter ini diperoleh dari perhitunganterm frequencydengan fungsitf(docs).
Fungsi ini mengembalikan nilai dict yang berisi term dan nilai logaritma dari perhitungan Inverse Document Frequency.
>>> from algoritma.textmining.tfidf import tf
>>> from algoritma.textmining.tfidf import idf
>>>
>>> # menyiapkan dokumen
>>> docs = {
>>> ... 'doc1': 'the game of life is a game of everlasting learning',
>>> ... 'doc2': 'the unexamined life is not worth living',
>>> ... 'doc3': 'never stop learning',
>>> ... }
>>>
>>> # menyiapkan term frequency
>>> data_tf = tf(docs)
>>>
>>> # mencari nilai idf
>>> data_idf = idf(docs, data_tf)
>>> data_idf
{'unexamined': 2.09861228866811,
'living': 2.09861228866811,
'life': 1.4054651081081644,
'of': 2.09861228866811,
'is': 1.4054651081081644,
'never': 2.09861228866811,
'stop': 2.09861228866811,
'game': 2.09861228866811,
'a': 2.09861228866811,
'learning': 1.4054651081081644,
'not': 2.09861228866811,
'the': 1.4054651081081644,
'everlasting': 2.09861228866811,
'worth': 2.09861228866811}Fungsi untuk mencari nilai term frequency pada query yang dimasukan. Hasil yang diperoleh sudah menjadi nilai normalized term frequency. Fungsi ini bergantung pada fungsi algoritma.textmining.tfidf.tf. standard key atau kunci yang digunakan untuk query adalah q. namun key ini hanya sebagai perantara dan tidak lagi digunakan setelah fungsi ini mengembalikan nilainya.
def qtf(query):
...
return tf(docs=query)['q']qtf(query)
query: berisi string query bebas. biasanya nilai query sudah melewati prosespreprocessing.
Fungsi ini mengembalikan nilai dict yang berisi term frequency query yang diberikan. nilainya sudah menajadi nilai normalized term frequency.
>>> from algoritma.textmining.tfidf import qtf
>>>
>>> query = "life learning"
>>> qtf(query)
{'life': 0.5, 'learning': 0.5}Fungsi ini akan menghitung bobot dokumen berdasarkan data term frequency, data inverse document frequency dan data query term frequency. Fungsi ini sangat bergantung pada ketiga data yang sudah disebutkan di atas. Jadi, fungsi ini hanya bisa dipanggil ketika ketiga data diatas sudah diperoleh.
Beberapa trik sederhana adalah saat kita membangun data term frequency dan inverse document frequency, simpan data tersebut ke dalam redis. hal ini membantu agar program yang kita buat tidak menghitung ulang untuk memperoleh kedua data tersebut. Ini sangat bagus untuk meningkatkan performa aplikasi kita.
weighting_docs(data_tf, data_idf, data_qtf)
data_tf: nilai parameter yang datanya diperoleh dari perhitunganterm frequencydengan fungsitf(docs).data_idf: nilai parameter yang datanya diperoleh dari perhitunganinverse document frequencydengan fungsiidf(docs, data_tf).data_qtf: nilai parameter yang datanya diperoleh dari perhitunganquery term frequencydengan fungsiqtf(query).
Fungsi ini mengembalikan nilai dict yang berisi bobot dokumen dari nilai data_tf, data_idf dan nilai data_qtf.
Asumsikan kita sudah mendapat nilai data_tf, nilai data_idf dan nilai data_qtf.
>>> from algoritma.textmining.tfidf import tf
>>> from algoritma.textmining.tfidf import idf
>>> from algoritma.textmining.tfidf import qtf
>>> from algoritma.textmining.tfidf import weighting_docs
>>>
>>> docs = {
... 'doc1': 'the game of life is a game of everlasting learning',
... 'doc2': 'the unexamined life is not worth living',
... 'doc3': 'never stop learning',}
>>>
>>> data_tf = tf(docs)
>>> data_idf = idf(docs, data_tf)
>>>
>>> # Proses query term frequency
>>> query = 'life learning'
>>> data_qtf = qtf(query)
>>>
>>> # Proses pembobotan document
>>> data_weighting_docs = weighting_docs(data_tf, data_idf, data_qtf)
>>> data_weighting_docs
{
'doc2': {'life': 0.20078072972973776, 'learning': 0.0},
'doc3': {'life': 0.0, 'learning': 0.4684883693693881},
'doc1': {'life': 0.14054651081081646, 'learning': 0.14054651081081646}
}Fungsi ini digunakan untuk menghitung bobot query pencarian. Fungsi ini bergantung pada nilai data_qtf dan data_idf. Dua nilai tersebut bisa diperoleh dari fungsi qtf(query) dan idf(docs, data_tf).
weighting_query(data_qtf, data_idf)
data_qtf: nilai parameter yang datanya diperoleh dari perhitunganquery term frequencydengan fungsiqtf(query).data_idf: nilai parameter ini diperoleh dari perhitunganinverse document frequencydengan fungsiidf(docs, data_tf).
Mengembalikan nilai dict yang berisi nilai pembobotan term-term pada query.
>>> from algoritma.textmining.tfidf import tf
>>> from algoritma.textmining.tfidf import idf
>>> from algoritma.textmining.tfidf import qtf
>>> from algoritma.textmining.tfidf import weighting_query
>>>
>>> docs = {
... 'doc1': 'the game of life is a game of everlasting learning',
... 'doc2': 'the unexamined life is not worth living',
... 'doc3': 'never stop learning',}
>>>
>>> data_tf = tf(docs)
>>> data_idf = idf(docs, data_tf)
>>>
>>> # Proses query term frequency
>>> query = 'life learning'
>>> data_qtf = qtf(query)
>>>
>>> # Proses pembobotan query
>>> data_weighting_query = weighting_query(data_qtf, data_idf)
>>> data_weighting_query
{'life': 0.7027325540540822, 'learning': 0.7027325540540822}Fungsi ini digunakan untuk mencari nilai similaritas antara dokumen dan query yang dihitung dari nilai pembobotan keduanya. Jadi, fungsi ini tergantung dari kedua data tersebut. Fungsi ini baru bisa dipanggil setelah kedua data tersebut tersedia.
cosine(data_weighting_docs, data_weighting_query)
data_weighting_docs: nilaidictyang berisi nilai pembobotan term-term pada docs yang sesuai dengan term pada query. Nilai parameter ini bisa dicari terlebih dahulu dengan fungsiweighting_docs(data_tf, data_idf, data_qtf).data_weighting_query: nilaidictyang berisi nilai pembobotan term-term pada query. Nilai parameter ini bisa dicari terlebih dahulu dengan fungsiweighting_query(data_qtf, data_idf).
Mengembalikan nilai berupa dict yang isinya key-nya merupakan kunci unik dokumen (di Django bisa dijadikan sebagai slug) yang memiliki nilai pasangan angka hasil perhitungan cosine similarity. Nilai yang menghasilkan 0.0 akan difilter otomatis dan tidak akan ditampilkan.
>>> ...
>>> data_weighting_docs = weighting_docs(data_tf, data_idf, data_qtf)
>>> data_weighting_query = weighting_query(data_qtf, data_idf)
>>>
>>> result = cosine(data_weighting_docs, data_weighting_query)
{'doc2': 0.7071067811865476,
'doc3': 0.7071067811865475,
'doc1': 1.0}