Saya punya dataset yang mewakili 1000 dokumen dan semua kata yang muncul di dalamnya. Jadi baris mewakili dokumen dan kolom mewakili kata-kata. Jadi misalnya, nilai dalam sel berarti waktu kata j muncul dalam dokumen i . Sekarang, saya harus menemukan 'bobot' dari kata-kata itu, menggunakan metode tf / idf, tetapi saya sebenarnya tidak tahu bagaimana melakukan ini. Bisakah seseorang tolong bantu saya?
12
Jawaban:
Wikipedia memiliki artikel bagus tentang topik ini, lengkap dengan formula. Nilai-nilai dalam matriks Anda adalah frekuensi istilah. Anda hanya perlu menemukan idf:
(log((total documents)/(number of docs with the term))
dan mengalikan 2 nilai.Di R, Anda bisa melakukannya sebagai berikut:
Berikut dataset:
Anda juga dapat melihat idf dari setiap istilah:
sumber
log((number of docs)/(number of docs containing the term))
. Anda juga bisa menyaring istilah yang jarang.ada paket tm (penambangan teks) http://cran.r-project.org/web/packages/tm/index.html yang harus melakukan persis yang Anda butuhkan:
R adalah bahasa fungsional sehingga membaca kode bisa rumit (misalnya x dalam istilah)
sumber
Kode Anda memiliki kesalahan: colSums menghitung jumlah kemunculan di corpus, bukan jumlah teks dengan kata.
Komputasi versi seperti itu adalah:
sumber
Ada paket R baru yang bisa melakukan ini: textir: Inverse Regression for Text Analysis
Perintah yang relevan adalah
tfidf
, contoh dari manual:sumber
Saya terlambat ke pesta ini, tetapi saya bermain dengan konsep tc-idf (saya ingin menekankan kata 'konsep' karena saya tidak mengikuti buku apa pun untuk perhitungan yang sebenarnya; jadi mereka mungkin agak canggung, dan pasti lebih mudah dilakukan dengan paket seperti
{tm: Text Mining Package}
, seperti yang disebutkan), dan saya pikir apa yang saya dapatkan mungkin terkait dengan pertanyaan ini, atau, dalam hal apa pun, ini mungkin tempat yang baik untuk mempostingnya.SET-UP: Saya memiliki corpus dari
5
paragraf panjang yang diambil dari media cetak,text 1
melalui5
seperti The New York Times . Diduga, itu adalah "tubuh" yang sangat kecil, perpustakaan kecil, sehingga untuk berbicara, tetapi entri dalam perpustakaan "digital" ini tidak acak: Entri pertama dan kelima berurusan dengan sepak bola (atau 'sepak bola' untuk 'klub sosial' (?) di sekitar sini), dan lebih khusus lagi tentang tim terhebat hari ini. Jadi, misalnya,text 1
dimulai dengan ...Sangat bagus! Di sisi lain Anda pasti ingin melewatkan konten di tiga entri di antaranya. Berikut ini sebuah contoh (
text 2
):Jadi apa yang harus dilakukan untuk menghindari "berselancar" dengan
text 1
cara apa puntext 2
, sambil terus bersukacita dalam literatur tentang FC Barcelona yang maha kuasatext 5
?TC-IDF: Saya mengisolasi kata-kata di setiap
text
vektor menjadi panjang. Kemudian menghitung frekuensi setiap kata, membuat lima vektor (satu untuk masing-masingtext
) di mana hanya kata-kata yang ditemui dalam yang sesuaitext
yang dihitung - semua kata lain, milik yang laintext
, bernilai nol. Dalam cuplikan pertamatext 1
, misalnya, vektornya akan memiliki hitungan 1 untuk kata "Messi", sedangkan "Trump" akan memiliki 0. Ini adalah bagian tc .Bagian idf juga dihitung secara terpisah untuk masing-masing
text
, dan menghasilkan 5 "vektor" (saya pikir saya memperlakukan mereka sebagai frame data), yang berisi transformasi logaritmik dari jumlah dokumen (sayangnya, hanya dari nol menjadi lima, mengingat perpustakaan kecil kami) ) mengandung kata yang diberikan seperti pada:text
text
text
PERBANDINGAN: Sekarang hanya masalah melakukan dot produk di antara "vektor pentingnya kata" ini.
Bisa ditebak, produk titik
text 1
dengantext 5
adalah13.42645
, sedangkantext 1
v.text2
Hanya2.511799
.Kode R kikuk (tidak ada yang meniru) ada di sini .
Sekali lagi, ini adalah simulasi yang sangat sederhana, tetapi saya pikir ini sangat grafis.
sumber