计算由分号分隔的字符串的出现次数

时间:2017-07-14 13:23:03

标签: javascript d3.js

我有一个.csv文件,它是文章的数据库。每篇文章都有一些关联关键字,关键字的数量每次都不同。

有点像这样:

article_id,keywords
1,word1;word2;word3
2,word1;word4
3,word2;word3

我想计算每个关键字出现在我的.csv文件中的次数,我该怎么做?是的,他们被分号隔开。

以下是.csv的示例:

id,keywords,date,nbComments,nbView,nbStars,nbVotes,source
44941,Alain Soral;Emmanuel Macron;France;François Fillon;Front national;Mélenchon;Politique,2017-04-04 00:00:00,21,101368,5,688,E&R
44309,Féminisme;France;François Hollande;Immigration;Internet;Marine Le Pen;Médias;People;Politique;Terrorisme,2017-02-23 00:00:00,30,43908,5,226,ERTV
45338,Allemagne;France;Histoire;Judaïsme;Médias;Pologne;Seconde Guerre mondiale,2017-04-25 00:00:00,31,24019,4,121,ERTV

1 个答案:

答案 0 :(得分:2)

获取关键字数组...

d3.merge(data.map(function(d) {
  return d.keywords.split(";")
}))

...并使用forEach计算出现次数:

var keywords = {};

d3.merge(data.map(function(d) {
  return d.keywords.split(";")
})).forEach(function(d) {
  keywords[d] = (keywords[d] || 0) + 1
})

以下是使用您的CSV(存储在<pre>元素中的演示,因为我无法在Stack片段中使用真实的CSV):

var data = d3.csvParse(d3.select("#csv").text());

var keywords = {};

d3.merge(data.map(function(d) {
  return d.keywords.split(";")
})).forEach(function(d) {
  keywords[d] = (keywords[d] || 0) + 1
})

console.log(keywords)
pre {
  display: none;
}
<script src="https://d3js.org/d3.v4.min.js"></script>
<pre id="csv">id,keywords,date,nbComments,nbView,nbStars,nbVotes,source
44941,Alain Soral;Emmanuel Macron;France;François Fillon;Front national;Mélenchon;Politique,2017-04-04 00:00:00,21,101368,5,688,E&R
44309,Féminisme;France;François Hollande;Immigration;Internet;Marine Le Pen;Médias;People;Politique;Terrorisme,2017-02-23 00:00:00,30,43908,5,226,ERTV
45338,Allemagne;France;Histoire;Judaïsme;Médias;Pologne;Seconde Guerre mondiale,2017-04-25 00:00:00,31,24019,4,121,ERTV</pre>