Rでフレーズnetを作成する


回答:


5

これが理にかなっているといいのですが。一緒に投げてみましたが、やりたいことのようです。上記のバウンティハイパーリンクからいくつかのテストを取得しました。特定の単語の後に続く単語と、これらの結果が発生した回数の比率が表示されます。作成することは不可能ではないと私は確信していますが、これは視覚化には何もしません。バックグラウンドの計算のほとんどを行う必要があります。

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

これは、上記に近いプロットに大きな進歩をもたらしています。それは実際に私が苦労しているこれのプロット/視覚化です。プロットはほとんどワードクラウド(サイズ=頻度)に似ており、矢印はネットワーク分析のソシオグラムに似ていますが、矢印はより強いリンクであることを意味しています。あなたがした仕事は矢を描くのに役立つでしょう。私は実際にはネットワーク分析と視覚化にあまり慣れていないので、ここで多くの助けが必要です。
タイラーリンカー、

1
これを最後に追加してグラフを取得します。それは明白ですが、おそらく、ランクの低い単語を除外して、サポートの大きい単語のみを使用することをお勧めします。dd <-t(d)library(diagram)plotmat(dd [1:10、1:10]、box.size = 0.05、name = y [1:10]、lwd = 2 * dd [1:10、] )
darrelkj

@ darrelkjこれは10ワードに制限されているようですが、ソシオグラムなどに接続するのに少し手を加えると、かなり洗練された機能が得られると思います。この応答を正しいものとしてマークしています。darrelkjこれだけの作業が終わったら、最後の仕上げをしてパッケージに入れます。よろしければお知らせください。ご協力いただきありがとうございます。
タイラーリンカー、2012

これは10に限定されていませんが、配列全体を使用したくありませんでした。ここで使用されている10もあまり選択されていません。
darrelkj

私は修正された立場です。私がそれを試したときにコードでエラーを起こしていたため、範囲外エラーが発生しました。あなたはまったく正しいです。
タイラーリンカー、2012

1

この視覚化手法の「公式」ホームの一種である、Mayy Eyesでフレーズネットを作成できます。そこでデータ(おそらくテキストの本文)をアップロードし、視覚化手法として「Phrase Net」を選択して、探しているものを取得できます。

実際、あなたのイラストは多くの目でのフレーズネットページから来ています。


1
はい、私はこれを理解していますが、柔軟性があるため、Rでそれを実行することを望んでいました。Many Eyesでは不可能なデータをより適切に表現するために、あらゆる種類のパラメーターを変更できます。
タイラーリンカー、

1

パッケージigraphを使用して、すべての側面を制御しながら、グラフを作成およびプロットできます。graphそしてRgraphvizパッケージは、グラフを定義し、プロットするために一緒に働きます。どちらのオプションも多くの制御を提供します。(これgraphvizもスタンドアロンパッケージであり、あらゆる種類のソフトウェアを使用してグラフを生成し、graphviz表示することができます。)

もちろん、@ darrelkjが示唆するようなことをして、データをグラフに処理する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.