Buat frase net dengan R

8

Adakah yang tahu tentang paket R atau punya cara untuk membuat jaring frase seperti ini? masukkan deskripsi gambar di sini

Tyler Rinker
sumber

Jawaban:

5

Saya harap ini masuk akal. Saya agak melemparkannya bersama, tetapi tampaknya itulah yang ingin Anda lakukan. Saya mengambil beberapa tes dari hyperlink karunia di atas. Ini akan menunjukkan kata-kata yang muncul setelah kata tertentu dan juga rasio berapa kali hasil ini terjadi. Ini tidak akan melakukan apa pun untuk visualisasi, meskipun saya yakin itu tidak akan mustahil untuk dibuat. Seharusnya sebagian besar matematika latar belakang.

library(tau)

#this will load the string
x <- tokenize("Questions must be at least 2 days old to be eligible for a bounty. There can only be 1 active bounty per question at any given time. Users must have at least 75 reputation to offer a bounty, and may only have a maximum of 3 active bounties at any given time. The bounty period lasts 7 days. Bounties must have a minimum duration of at least 1 day. After the bounty ends, there is a grace period of 24 hours to manually award the bounty. If you do not award your bounty within 7 days (plus the grace period), the highest voted answer created after the bounty started with at least 2 upvotes will be awarded half the bounty amount. If there's no answer meeting that criteria, the bounty is not awarded to anyone. If the bounty was started by the question owner, and the question owner accepts an answer during the bounty period, and the bounty expires without an explicit award – we assume the bounty owner liked the answer they accepted and award it the full bounty amount at the time of bounty expiration. In any case, you will always give up the amount of reputation specified in the bounty, so if you start a bounty, be sure to follow up and award your bounty to the best answer! As an additional bonus, bounty awards are immune to the daily reputation cap and community wiki mode.")

#the number of tokens in the string
n <- length(x)

list <- NULL

count <- 1

#this will remove spaces, list is new string with no spaces
for (i in 1:n) {
  if (x[i] != " ") {
    list[count] <- x[i]
    count <- count + 1
  }
}

#the unique words in the string
y <- unique(list)

#number of tokens in the string
n <- length(list)
#number of distinct tokens
m <- length(y)


#assign tokens to values
ind <- NULL
val <- NULL
#make vector of numbers in place of tokens
for (i in 1:m) {
  ind[i] <- i
  for (j in 1:n) {
    if (y[i] == list[j]) {
      val[j] = i
    } 
  }
}


d <- array(0, c(m, m))

#this finds the number of count of the word after the current word
for (i in 1:(n-1)) {
   d[val[i], val[i+1]] <- d[val[i], val[i+1]] + 1
}

#pick a word
word <- 4

#show the word
y[word]
#[1] "at"

#the words that follow
y[which(d[word,] > 0)]
#[1] "least" "any"   "the" 

#the prob of words that follow
d[word,which(d[word,]>0)]/sum(d[word,])
#[1] 0.5714286 0.2857143 0.1428571
darrelkj
sumber
Ini membuat beberapa langkah besar menarik plot yang terlihat lebih dekat ke atas. Ini sebenarnya merencanakan / visualisasi dari ini saya berjuang dengan. Plotnya hampir seperti wordcloud (size = frekuensi) dan panah mirip dengan sosiogram dalam analisis jaringan, tetapi panah menyampaikan makna bahwa mereka adalah tautan yang lebih kuat. Saya pikir pekerjaan yang Anda lakukan akan berguna dalam merencanakan panah. Saya sebenarnya tidak terlalu terbiasa dengan analisis dan visualisasi jaringan jadi saya butuh banyak bantuan di sini.
Tyler Rinker
1
Tambahkan ini ke akhir untuk mendapatkan grafik. Ini akan menjadi jelas, Anda mungkin ingin menyaring kata-kata peringkat bawah dan hanya menggunakannya dengan dukungan yang lebih besar. dd <- t (d) perpustakaan (diagram) plotmat (dd [1:10, 1:10], box.size = 0,05, nama = y [1:10], lwd = 2 * dd [1:10,] )
darrelkj
@ darrelkj Ini sepertinya terbatas pada 10 kata tapi saya pikir dengan sedikit pekerjaan dengan menghubungkannya ke sosiogram atau sesuatu seperti itu kita akan memiliki fungsi yang cukup halus. Saya menandai respons ini sebagai benar. darrelkj setelah banyak pekerjaan ini Anda harus meletakkan sentuhan akhir pada ini dan membuangnya ke dalam paket. Jika Anda memberi tahu kami. Terima kasih atas bantuan Anda.
Tyler Rinker
Tidak terbatas pada 10, saya hanya tidak ingin menggunakan seluruh array. Sepuluh yang digunakan di sini juga dipilih dengan buruk.
darrelkj
Saya berdiri dikoreksi. Saya telah membuat kesalahan dalam kode ketika saya mencobanya dan karenanya mendapat kesalahan di luar batas. Anda benar sekali.
Tyler Rinker
1

Anda dapat membuat jaring frase dengan Banyak Mata , yang merupakan rumah "resmi" dari teknik visualisasi ini. Di sana Anda dapat mengunggah data Anda (yang mungkin sebagian isi teks), pilih "Frase Net" sebagai teknik visualisasi, dan dapatkan apa yang Anda cari.

Bahkan, ilustrasi Anda berasal dari halaman Frase Net di Banyak Mata .

Carlos Accioly
sumber
1
Ya saya menyadari ini tetapi saya berharap untuk melakukannya di R karena fleksibilitas. Anda dapat mengubah segala macam parameter untuk lebih mewakili data yang tidak dapat Anda miliki dengan Banyak Mata.
Tyler Rinker
1

Anda dapat menggunakan paket igraphuntuk membuat dan memplot grafik, dengan kontrol atas semua aspek. Paket graphdan Rgraphvizbekerja bersama untuk mendefinisikan dan memplot grafik. Kedua opsi menyediakan banyak kontrol. ( graphvizjuga merupakan paket mandiri, di mana Anda dapat menggunakan semua jenis perangkat lunak untuk menghasilkan grafik dan graphvizmenampilkannya.)

Tentu saja, Anda perlu mengolah data Anda menjadi grafik, melakukan sesuatu seperti yang disarankan @darrelkj.

Wayne
sumber