Tạo một cụm từ mạng với R


Câu trả lời:


5

Tôi hy vọng điều này có ý nghĩa. Tôi đã ném nó cùng nhau, nhưng có vẻ như đó là những gì bạn muốn làm. Tôi đã lấy một số thử nghiệm từ siêu liên kết tiền thưởng ở trên. Nó sẽ hiển thị các từ xuất hiện sau một từ nhất định cũng như tỷ lệ số lần mà các kết quả này xảy ra. Điều này sẽ không làm được gì cho việc trực quan hóa, mặc dù tôi chắc chắn rằng nó sẽ không thể tạo ra. Nó nên làm hầu hết các toán học nền.

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

Điều này đang làm cho một số bước tiến lớn kéo theo một cốt truyện trông gần hơn ở trên. Đó thực sự là âm mưu / hình dung của cái này tôi đang vật lộn với. Cốt truyện gần giống như một wordcloud (kích thước = tần số) và các mũi tên tương tự như một xã hội học trong phân tích mạng, nhưng các mũi tên truyền đạt ý nghĩa ở chỗ chúng là một liên kết mạnh hơn. Tôi nghĩ rằng công việc bạn đã làm sẽ hữu ích trong việc vẽ các mũi tên. Tôi thực sự không quá quen thuộc với phân tích và hình dung mạng vì vậy tôi cần rất nhiều sự giúp đỡ ở đây.
Tyler Rinker

1
Thêm phần này vào cuối để có được một biểu đồ. Mặc dù vậy, nó sẽ đơn giản, có lẽ bạn sẽ muốn lọc các từ xếp hạng thấp hơn và chỉ sử dụng những từ có hỗ trợ lớn hơn. dd <- t (d) thư viện (sơ đồ) vẽ sơ đồ (dd [1:10, 1:10], box.size = 0,05, name = y [1:10], lwd = 2 * dd [1:10,] )
darrelkj

@ darrelkj Điều này dường như chỉ giới hạn trong 10 từ nhưng tôi nghĩ rằng với một chút công việc với việc kết nối nó với xã hội học hoặc một cái gì đó tương tự như vậy, chúng ta sẽ có một chức năng khá bóng bẩy. Tôi đánh dấu phản hồi này là chính xác. darrelkj sau nhiều công việc này, bạn nên đặt hoàn thiện vào điều này và ném nó vào một gói. Nếu bạn làm cho chúng tôi biết. Cảm ơn bạn đã giúp đỡ.
Tyler Rinker

Nó không giới hạn ở 10, tôi chỉ không muốn sử dụng toàn bộ mảng. Mười được sử dụng ở đây được lựa chọn là tốt.
darrelkj

Tôi đứng sửa. Tôi đã mắc một lỗi trong mã khi tôi thử nó và do đó đã xảy ra lỗi giới hạn. Bạn khá đúng.
Tyler Rinker

1

Bạn có thể tạo lưới cụm từ với Nhiều mắt , đây là loại nhà "chính thức" của kỹ thuật tạo hình này. Ở đó, bạn có thể tải lên dữ liệu của mình (có thể là một số phần của văn bản), chọn "Cụm từ ngữ" làm kỹ thuật trực quan hóa và có được những gì bạn đang tìm kiếm.

Trên thực tế, hình minh họa của bạn xuất phát từ trang Phrase Net trên Many Eyes .


1
Có tôi nhận ra điều này nhưng tôi đã hy vọng thực hiện nó trong R vì tính linh hoạt. Bạn có thể thay đổi tất cả các loại tham số để thể hiện tốt hơn dữ liệu mà bạn không thể có với Nhiều mắt.
Tyler Rinker

1

Bạn có thể sử dụng gói igraphđể tạo và vẽ đồ thị, với quyền kiểm soát tất cả các khía cạnh. Các gói graphRgraphvizlàm việc cùng nhau để xác định và vẽ đồ thị. Cả hai tùy chọn cung cấp rất nhiều kiểm soát. ( graphvizcũng là một gói độc lập, nơi bạn có thể sử dụng tất cả các loại phần mềm để tạo biểu đồ và graphvizhiển thị nó.)

Tất nhiên, bạn cần xử lý dữ liệu của mình thành biểu đồ, thực hiện một số thứ như @darrelkj gợi ý.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.