Skip to content

Instantly share code, notes, and snippets.

@solanoize
Last active March 15, 2023 07:42
Show Gist options
  • Select an option

  • Save solanoize/044f2258d88d04c3cd5ed8d908585488 to your computer and use it in GitHub Desktop.

Select an option

Save solanoize/044f2258d88d04c3cd5ed8d908585488 to your computer and use it in GitHub Desktop.
Dokumentasi algoritma.textmining.tfidf untuk Tugas Akhir

Dokumentasi Module TF-IDF

Author Yanwar Solahudin, Version 0.0.1 In Beta Release.

algoritma.textmining.tfidf.tf

Digunakan untuk mencari nilai Term Frequency dari sekumpulan dokumen. Hasil yang diperoleh sudah menjadi nilai normalized term frequency.

Sintak:

tf(docs)

Parameter

  • docs: kumpulan dokumen dengan kunci tertentu. kunci bisa menjadi nilai slug dari model di Django sedangkan isi dari slug adalah string dokumen.

Return

mengembalikan nilai berupa dictionary term frequency.

Contoh

>>> 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}}

algoritma.textmining.tfidf.idf

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.

Sintak

idf(docs, data_tf)

Parameter

  • docs: kumpulan dokumen dengan kunci tertentu. kunci bisa menjadi nilai slug dari model di Django sedangkan isi dari slug adalah string dokumen.
  • data_tf: nilai parameter ini diperoleh dari perhitungan term frequency dengan fungsi tf(docs).

Return

Fungsi ini mengembalikan nilai dict yang berisi term dan nilai logaritma dari perhitungan Inverse Document Frequency.

Contoh

>>> 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}

algoritma.textmining.tfidf.qtf

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']

Sintak

qtf(query)

Parameter

  • query: berisi string query bebas. biasanya nilai query sudah melewati proses preprocessing.

Return

Fungsi ini mengembalikan nilai dict yang berisi term frequency query yang diberikan. nilainya sudah menajadi nilai normalized term frequency.

Contoh

>>> from algoritma.textmining.tfidf import qtf
>>> 
>>> query = "life learning"
>>> qtf(query)
{'life': 0.5, 'learning': 0.5}

algoritma.textmining.tfidf.weighting_docs

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.

Sintak

weighting_docs(data_tf, data_idf, data_qtf)

Parameter

  • data_tf: nilai parameter yang datanya diperoleh dari perhitungan term frequency dengan fungsi tf(docs).
  • data_idf: nilai parameter yang datanya diperoleh dari perhitungan inverse document frequency dengan fungsi idf(docs, data_tf).
  • data_qtf: nilai parameter yang datanya diperoleh dari perhitungan query term frequency dengan fungsi qtf(query).

Return

Fungsi ini mengembalikan nilai dict yang berisi bobot dokumen dari nilai data_tf, data_idf dan nilai data_qtf.

Contoh

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}
}

algoritma.textmining.tfidf.weighting_query

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).

Sintak

weighting_query(data_qtf, data_idf)

Parameter

  • data_qtf: nilai parameter yang datanya diperoleh dari perhitungan query term frequency dengan fungsi qtf(query).
  • data_idf: nilai parameter ini diperoleh dari perhitungan inverse document frequency dengan fungsi idf(docs, data_tf).

Return

Mengembalikan nilai dict yang berisi nilai pembobotan term-term pada query.

Contoh

>>> 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}

algoritma.textmining.tfidf.cosine

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.

Sintak

cosine(data_weighting_docs, data_weighting_query)

Parameter

  • data_weighting_docs: nilai dict yang berisi nilai pembobotan term-term pada docs yang sesuai dengan term pada query. Nilai parameter ini bisa dicari terlebih dahulu dengan fungsi weighting_docs(data_tf, data_idf, data_qtf).
  • data_weighting_query: nilai dict yang berisi nilai pembobotan term-term pada query. Nilai parameter ini bisa dicari terlebih dahulu dengan fungsi weighting_query(data_qtf, data_idf).

Return

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.

Contoh

>>> ...
>>> 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}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment