CouchDB不支持新的Map()?寻找一个好的选择

时间:2016-06-22 08:13:37

标签: javascript dictionary view mapreduce couchdb

我试图在CouchDB上使用Futon构建Map-reduce视图。地图部分代码如下:



function(doc) {
var m = new Map(); // dictionary
		m.set('molto',	'R');
		m.set('davvero',	'R');
		m.set('veramente',	'R');
		m.set('troppo',	'R');
		m.set('bel',	'R');
		m.set('bello',	'R');
		m.set('ben',	'R');
		m.set('molti',	'R');
		m.set('sicuramente',	'R');
		m.set('tante',	'R');
		m.set('incredibile',	'R');
		m.set('tanta',	'R');
		m.set('top',	'R');
		m.set('troppi',	'R');
		m.set('urla',	'R');
		m.set('assolutamente',	'R');
		m.set('boom',	'R');
		m.set('esattamente',	'R');
		m.set('grave',	'R');
		m.set('perfetto',	'R');
		m.set('riconferma',	'R');
		m.set('accusa',	'R');
		m.set('deciso',	'R');
		m.set('grande',	'P');
		m.set('#superstar',	'P');
		m.set('#napolivale',	'P');
		m.set('#brambillasindaco',	'P');
		m.set('bene',	'P');
		m.set('forza',	'P');
		m.set('VERO',	'P');
		m.set('sostegno',	'P');
		m.set('merita',	'P');
		m.set('lavoro',	'P');
		m.set('bravo',	'P');
		m.set('cuore',	'P');
		m.set('dema',	'P');
		m.set('tanti',	'P');
		m.set('vincere',	'P');
		m.set('buon',	'P');
		m.set('caro',	'P');
		m.set('masaniello',	'P');
		m.set('complimenti',	'P');
		m.set('futuro',	'P');
		m.set('buona',	'P');
		m.set('#stavotalettieri',	'P');
		m.set('coraggio',	'P');
		m.set('#sindaco',	'P');
		m.set('cara',	'P');
		m.set('cambiamento',	'P');
		m.set('#napolicapitale',	'P');
		m.set('leader',	'P');
		m.set('piace',	'P');
		m.set('proposte',	'P');
		m.set('risultati',	'P');
		m.set('#decidelacittà',	'P');
		m.set('#napolié5stelle',	'P');
		m.set('dignità',	'P');
		m.set('finalmente',	'P');
		m.set('impegno',	'P');
		m.set('speciale',	'P');
		m.set('onestà',	'P');
		m.set('passione',	'P');
		m.set('possibile',	'P');
		m.set('speranza',	'P');
		m.set('stile',	'P');
		m.set('successo',	'P');
		m.set('#sindacoxnapoli',	'P');
		m.set('fiducia',	'P');
		m.set('grandi',	'P');
		m.set('legalità',	'P');
		m.set('rivoluzione',	'P');
		m.set('voterei',	'P');
		m.set('#napolibenecomune',	'P');
		m.set('bellissima',	'P');
		m.set('idee',	'P');
		m.set('merito',	'P');
		m.set('pulita',	'P');
		m.set('sociale',	'P');
		m.set('uniti',	'P');
		m.set('valori',	'P');
		m.set('#iovotodemagistris',	'P');
		m.set('#iovotono',	'P');
		m.set('#lettierisindaco',	'P');
		m.set('#liberiamonapoli',	'P');
		m.set('#marapernapoli',	'P');
		m.set('libertà',	'P');
		m.set('popolari',	'P');
		m.set('tifo',	'P');
		m.set('vinciamo',	'P');
		m.set('#corruzione',	'P');
		m.set('#lavoro',	'P');
		m.set('#pensioni',	'P');
		m.set('amore',	'P');
		m.set('belle',	'P');
		m.set('grandissimo',	'P');
		m.set('onesto',	'P');
		m.set('riuscito',	'p');
		m.set('sostiene',	'P');
		m.set('vincente',	'P');
		m.set('abbraccio',	'P');
		m.set('adoro',	'P');
		m.set('bellissimo',	'P');
		m.set('big',	'P');
		m.set('bravissimo',	'P');
		m.set('classe',	'P');
		m.set('compagno',	'P');
		m.set('convinto',	'P');
		m.set('luce',	'P');
		m.set('pizza',	'P');
		m.set('rielezione',	'P');
		m.set('riparte',	'P');
		m.set('#napoliautonoma',	'P');
		m.set('#ricominciodalleperiferie',	'P');
		m.set('libera',	'P');
		m.set('migliore',	'P');
		m.set('onesti',	'P');
		m.set('palle',	'P');
		m.set('popolare',	'P');
		m.set('ribelle',	'P');
		m.set('sicura',	'P');
		m.set('simpatico',	'P');
		m.set('stavolta',	'P');
		m.set('trasparenza',	'P');
		m.set('vamos',	'P');
		m.set('votiamo',	'P');
		m.set('#coraggio',	'P');
		m.set('#decidelacitta',	'P');
		m.set('#dema',	'P');
		m.set('#esserenapoletanovuoldire',	'P');
		m.set('#iovotoonesto',	'P');
		m.set('#stalotalettieri',	'P');
		m.set('brava',	'P');
		m.set('buone',	'P');
		m.set('piaciuto',	'P');
		m.set('rappresenta',	'P');
		m.set('splendido',	'P');
		m.set('stavota',	'P');
		m.set('#demagistrissindaco',	'P');
		m.set('#lungomareliberato',	'P');
		m.set('#savebikesharingnapoli',	'P');
		m.set('amo',	'P');
		m.set('applausi',	'P');
		m.set('buono',	'P');
		m.set('fortuna',	'P');
		m.set('funziona',	'P');
		m.set('gioia',	'P');
		m.set('libero',	'P');
		m.set('mafie',	'P');
		m.set('meriti',	'P');
		m.set('migliori',	'P');
		m.set('miracolo',	'P');
		m.set('opportunità',	'P');
		m.set('positivo',	'P');
		m.set('qualità',	'P');
		m.set('riscatto',	'P');
		m.set('sogno',	'P');
		m.set('soluzione',	'P');
		m.set('trasparenti',	'P');
		m.set('#iopartecipo',	'P');
		m.set('#iostocondemagistris',	'P');
		m.set('#masaniello',	'P');
		m.set('#napolipride',	'P');
		m.set('#resistenza',	'P');
		m.set('#riscetamento',	'P');
		m.set('#votafi',	'P');
		m.set('bravi',	'P');
		m.set('capace',	'P');
		m.set('coerenza',	'P');
		m.set('combatte',	'P');
		m.set('conoscere',	'P');
		m.set('consigli',	'P');
		m.set('credibile',	'P');
		m.set('cultura',	'P');
		m.set('docet',	'P');
		m.set('faremo',	'P');
		m.set('festa',	'P');
		m.set('no',	'N');
		m.set('cacare',	'N');
		m.set('male',	'N');
		m.set('vergogna',	'N');
		m.set('fine',	'N');
		m.set('problema',	'N');
		m.set('#lariachetira',	'N');
		m.set('cagare',	'N');
		m.set('peggio',	'N');
		m.set('perdere',	'N');
		m.set('volgarità',	'N');
		m.set('peccato',	'N');
		m.set('schifo',	'N');
		m.set('abusivi',	'N');
		m.set('degrado',	'N');
		m.set('attacca',	'N');
		m.set('peggiore',	'N');
		m.set('populismo',	'N');
		m.set('chiacchiere',	'N');
		m.set('palazzo',	'N');
		m.set('purtroppo',	'N');
		m.set('spese',	'N');
		m.set('vattene',	'N');
		m.set('indegne',	'N');
		m.set('merda',	'N');
		m.set('minacce',	'N');
		m.set('monnezza',	'N');
		m.set('morte',	'N');
		m.set('corrotti',	'N');
		m.set('povera',	'N');
		m.set('volgare',	'N');
		m.set('cazzo',	'N');
		m.set('fallimento',	'N');
		m.set('flop',	'N');
		m.set('minaccia',	'N');
		m.set('bugie',	'N');
		m.set('cacati',	'N');
		m.set('colpa',	'N');
		m.set('condannato',	'N');
		m.set('dispiace',	'N');
		m.set('distrutto',	'N');
		m.set('dubbio',	'N');
		m.set('errore',	'N');
		m.set('#caffèscorretto',	'N');
		m.set('#vergogna',	'N');
		m.set('becero',	'N');
		m.set('brutta',	'N');
		m.set('bruttezza',	'N');
		m.set('brutto',	'N');
		m.set('fallito',	'N');
		m.set('incapace',	'N');
		m.set('inutili',	'N');
		m.set('pessimo',	'N');
		m.set('roba',	'N');
		m.set('spieghi',	'N');
		m.set('tristezza',	'N');
		m.set('attacchini',	'N');
		m.set('bocciato',	'N');
		m.set('buffone',	'N');
		m.set('crisi',	'N');
		m.set('delirio',	'N');
		m.set('disastro',	'N');
		m.set('interista',	'N');
		m.set('ridicolo',	'N');
		m.set('rischio',	'N');
		m.set('sangue',	'N');
		m.set('solito',	'N');
		m.set('vergognati',	'N');
		m.set('violento',	'N');
		m.set('#gomorralaserie',	'N');
		m.set('culo',	'N');
		m.set('esodato',	'N');
		m.set('fallita',	'N');
		m.set('falsità',	'N');
		m.set('fastidio',	'N');
		m.set('non',	'I');
		m.set('mai',	'I');
		m.set('invece',	'I');
		m.set('meno',	'I');
		m.set('sbagliato',	'I');
		m.set('nessuna',	'I');
		m.set('not',	'I');
		m.set('contrario',	'I');
		m.set('diversa',	'I');
		m.set('#jungels',	'A');
		m.set('#moser',	'A');
		m.set('@giroditalia',	'A');
		m.set('#dumoulin',	'A');
		m.set('#nibali',	'A');
		m.set('#trentin',	'A');
		m.set('#roglic',	'A');
		m.set('#veloextra',	'A');
		m.set('crono',	'A');
		m.set('#gomorra2',	'A');
		m.set('maillot',	'A');
		m.set('#ciclismo',	'A');
		m.set('http//cyclismactunet',	'A');
		m.set('#girorai2016',	'A');
		m.set('#saichivoti',	'A');
		m.set('#eurosportciclismo',	'A');
		m.set('dumoulin',	'A');
		m.set('#fightforpink',	'A');
		m.set('#giroditalia2016',	'A');
		m.set('ciclabile',	'A');
		m.set('ciclismo',	'A');
		m.set('gregario',	'A');

	var sentiment = 0; 
  var words = doc.text.split(' '); 
  for(var i = 0; i < words.length; i++) {
    var word = words[i].replace(/^\s+|\s+$/g,""); // trim
    word = word.replace(/[?!.:,;-]/g,"");         // strip punctuation
    word = word.replace(/\"/g,"");                // strip escaped quotes
	word = word.toLowerCase();
    if( word.length > 0 ) {
		var prova = 0;

		if( m.has(word) ){
				var sentChar = m.get(word);
				switch (sentChar){
					case 'P':					
						sentiment = sentiment+1;
						break;
					case 'N':					
						sentiment = sentiment-1;
						break;
					case 'I':					
						prova = 0;
						break;
					case 'R':					
						prova = 0;
						break;
					case 'A':					
						prova=0;
						break;	
				}
		}
		  


		
	}	 
  }
  emit(doc.Candidato,sentiment);
}
&#13;
&#13;
&#13;

我尝试从CouchDB中运行部分代码,传递一个人工短语,一切正常。但似乎CouchDB不喜欢新的Map()或m.set();

此代码应根据此短词典(意大利语)发送推文并对其进行情感分析,例如在字典中添加+1或减去-1(如果它在字典中的情感变量)并且它标有P(正)或P(负)。我还有其他案例,其中包括&#39; R&#39;或者&#39; A&#39;我必须做不同的事情。

问题是:为什么Map()似乎无法在CouchDB上运行?我该怎么用来避免在数组上进行顺序搜索? (我的数据库中有20k个推文)

1 个答案:

答案 0 :(得分:0)

Map是ES6功能,CouchDB已包含的Spidermonkey版本不支持该功能。

一种选择是只使用普通对象,在这种情况下不应该使用警告/陷阱,因为意大利语在其词典中没有单词__proto__

另一个选择是切换到使用Node.js的较新版本(v4 +)作为查询服务器。您可以找到in the documentation的说明。 (它标记为“实验性”,因此您的里程可能会有所不同)

如果这两个选项都不可接受,您还可以找到Map polyfill库并将其包含为CommonJS Module

就个人而言,我发现普通物体最具吸引力,因为根据我对情况的理解,它具有最少的缺点和最少的开销。