1

以前に投稿した質問を2回編集した後、同じ質問をしました。このウェブサイトの不適切な使用について申し訳ありません。削除のフラグを立てて、同じことについて適切な新しい質問をここに投稿しています。これを調べてください。

私は基本的にレコメンダーシステムコードに取り組んでいます。出力は一連の JSON オブジェクトに変換する必要があります。関連する最も近いアイテムのリストと、それらの組み合わせに関連付けられた類似度スコアを含む、すべてのアイテム ID のルックアップ テーブルを持つマトリックスがあります。

例を通して説明しましょう。

以下の例では、アイテム 1 はアイテム 22 と 23 に類似しており、類似度スコアはそれぞれ 0.8 と 0.5 です。そして、残りの行は同じ構造に従います。

X1 X2 X3 X4 X5 
1 22 23  0.8 0.5
34 4 87  0.4 0.4
23 7 92  0.6 0.5

すべてのアイテム (すべての行のすべての X1) の JSON 構造と、推奨されるアイテム、および各組み合わせの類似性スコアを個別の JSON エンティティとして作成し、これを順番に行います。これらの個々のオブジェクトを含む JSON オブジェクト全体は必要ありません。コードへの入力として与えられる "coid" と呼ばれるエンティティがもう 1 つあるとします。私はそれがXYZであり、すべての行で同じであると想定しています。

{ "_id" : { "coid" : "XYZ", "iid" : "1"}, "items" : [ { "item" : "22", "score" : 0.8},{ "item": "23", "score" : 0.5}] }
{ "_id" : { "coid" : "XYZ", "iid" : "34"},"items" : [ { "item" : "4", "score" : 0.4},{ "item": "87", "score" : 0.4}] }
{ "_id" : { "coid" : "XYZ", "iid" : "23"},"items" : [ { "item" : "7", "score" : 0.6},{ "item": "92", "score" : 0.5}] }

上記のように、各エンティティは有効な JSON 構造/オブジェクトですが、全体として個別の JSON オブジェクトにまとめられるわけではありません。

前の質問に対して行ったすべての助けに感謝しますが、最終的にtoJSON(何らかのエンティティ)を実行すると、全体が1つのJSONオブジェクトに変換されるため、ここにあるこの新しい変更はそれらとは関係がないと感じています. 私はそれをしたくありません。このような個別のものをファイルに書き込んでほしい。

無知でご不便をおかけして大変申し訳ございません。助けてください。ありがとう。

4

1 に答える 1

1
library(rjson)
## Your matrix
mat <- matrix(c(1,34,23,
               22, 4, 7,
               23,87,92,
               0.8, 0.4, 0.6,
               0.5, 0.4, 0.5), byrow=FALSE, nrow=3)

makejsonマトリックスの行を取り、JSON オブジェクトを返す関数 (あまり興味深い名前ではありません) を使用します。と の 2 つのlistオブジェクトを作成_iditems、JSON オブジェクトに結合します。

makejson <- function(x, coid="ABC") {
    `_id` <- list(coid = coid, iid=x[1])
    nitem <- (length(x) - 1) / 2 # Number of items
    items <- list()
    for(i in seq(1, nitem)) {
        items[[i]] <- list(item = x[i + 1], score = x[i + 1 + nitem])
    }
    toJSON(list(`_id`=`_id`, items=items))
}

次に、apply(またはforループ) を使用して、行列の各行に関数を使用します。

res <- apply(mat, 1, makejson, coid="XYZ")
cat(res, sep = "\n")
## {"_id":{"coid":"XYZ","iid":1},"items":[{"item":22,"score":0.8},{"item":23,"score":0.5}]}
## {"_id":{"coid":"XYZ","iid":34},"items":[{"item":4,"score":0.4},{"item":87,"score":0.4}]}
## {"_id":{"coid":"XYZ","iid":23},"items":[{"item":7,"score":0.6},{"item":92,"score":0.5}]}

引数catを指定して結果をファイルに保存することができます。file

## cat(res, sep="\n", file="out.json")

あなたの出力と私の出力には小さな違いがあります。数字は引用符 (") で囲まれています。そのようにしたい場合は、mat文字にする必要があります。

## mat <- matrix(as.character(c(1,34,23, ...

それが役に立てば幸い、

アレックス

于 2014-07-22T12:32:15.863 に答える