2017-02-20 4 views
0

Googleの自然言語APIから生成されたかなり複雑な配列を持っています。私はそれにテキストの段落を与え、その段落に関する多くの言語情報が出てくる。FORループがたくさんない複雑な配列からデータを抽出する

私の最終目標は、この段落から「キーワード」を見つけることです。これを達成するためには、すべての「エンティティ」をフラットな配列に入れ、重複を数え、最大量の単語を考慮したい重複して "キーワード"となる。もしそれが見つからなければ、チェリーは最も重要だと考える主体からの言葉を選びます。私はすでに存在する可能性の実体を知って

var entities = [ 
    'art', 
    'events', 
    'goods', 
    'organizations', 
    'other', 
    'people', 
    'places', 
    'unknown' 
]; 

をここでは、私が働いているのアレイの構成例です。

input = [ 
{ 
language: { 
    entities: { 
    people: [ 
    { 
    name: "Paul", 
    type: "Person", 
    }, 
    { 
    name: "Paul", 
    type: "Person", 
    }, 
    ], 
    goods: [ 
    { 
    name: "car", 
    type: "Consumer_good", 
    } 
    ], //etc 
    } 
} 
} 
]; 

output = ["Paul", "Paul", "car"...]; 

私の質問は - FORループの全体の束を使用してせず、その後の重複を見つけるために、フラットな配列に私の最初の配列を変換するための最良の方法は何ですか?

+0

オブジェクトのメイン配列を1つのループで移動します。そのプロパティを配列にするよう依頼してください。それをループし、結果配列のindexOfでない場合は結果配列にアイテムをプッシュします。 – fubbe

答えて

0

動的入力データを操作する場合は、ループや配列関数を回避する方法はありません。

+0

私はそれがかなり避けられないと理解しています、forループなどのforループを使用するよりも良い方法があるかどうかを知りたがっています。 – Aloogy

+0

@Aloogy 'map'、' ' filter 'と 'reduce'のような状況では、すべての反復に対して新しいスコープがあり、コールバックはテストしやすいためです。 – floriangosse

0

input.language.entitiesを反復的に繰り返し、すべての.nameプロパティを配列に集めることができます。次にループのために1つしかありません:-)。

これを実行した後、それを繰り返して重複を見つけることができます。アルファベット順に並べ替えた方が簡単です(2つ以上の連続した項目が等しい場合は、重複があります)。

Googleがapiを変更した場合や、誤動作のためにクラップデータを送信した場合は、少し危険です。

input.language.entitiesが既に十分に平坦ではありませんか?

0

あなたは、このフォーマットを使用して、すべての値にアクセスすることができます

for (var entry in input[0]["language"]["entities"]) { 
    console.log(entry); 
} 

OR、場合:次に、あなたがこのような何かを行うことができ

input[0]["language"]["entities"]["people"][0].name 

input = [ 
 
{ 
 
language: { 
 
    entities: { 
 
    people: [ 
 
    { 
 
    name: "Paul", 
 
    type: "Person", 
 
    }, 
 
    { 
 
    name: "Paul", 
 
    type: "Person", 
 
    }, 
 
    ], 
 
    goods: [ 
 
    { 
 
    name: "car", 
 
    type: "Consumer_good", 
 
    } 
 
    ], //etc 
 
    } 
 
} 
 
} 
 
]; 
 
console.log(input[0]["language"]["entities"]["people"][0].name);

を私はunderstoo Dあなたは間違っている、

あなたは(jqueryのが必要)、これを使用して配列にjavascriptオブジェクトを回すためにこれを使用することができます:

var myObj = { 
 
    1: [1, 2, 3], 
 
    2: [4, 5, 6] 
 
}; 
 

 
var array = $.map(myObj, function(value, index) { 
 
    return [value]; 
 
}); 
 

 

 
console.log(array[0][0]); 
 
console.log(array[0]); 
 
console.log(array);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

この意志出力

1 

[1, 2, 3] 

[[1,2,3],[4,5,6]] 
0

私はこのようなことをした。それはかなりではありませんが、それは仕事を完了します。

var result = []; 
var known_entities = ['art','events','goods','organizations','other','people','places','unknown'];   
    for(i=0; i < known_entities.length; i++){ 
     var entity = known_entities[i]; 
     if(language.entities[entity]){ 
      for(var j in language.entities[entity]){ 
       var word = language.entities[entity][j].name 
       result.key_words.push(word); 
      } 
     } 
    } 
関連する問題