华机舆情分析_热词排序 js实现

题目

有多篇文章输入,每篇文章分为标题行和正文行,每篇文章输入时标题和正文各占一行。需要统计所有文章中出现的热词并输出topN的热词。title中的词权重为3,text中权重为1,所有文章中的热词权重相加即为该词的总权重。排序方法为:

两词权重大的排前面
若权重一样,则在title中最先出现的排前面
若title中出现顺序一样,则在text中最先出现的排前面
测试案例:

3 2
xinguan feiyan xinzeng bendi quezhen anli
ju baodao chengdu xinzeng xinguan feiyan bendi quezhen anli yili shenzhen xinzeng bendi quezhen anli liangli yi***gti kongzhi lianghao
xinguan yimiao linchuang shiyan
wuzhong xinguan yimiao tongguo sanqi linchaung shiyan xiaoguo lianghao

输出

xinguan xinzeng bendi

代码实现

const rl = require("readline").createInterface({
    
     input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    
    
  // Write your code here
  while ((line = await readline())) {
    
    
    let [topN, titleNum] = line.split(" ").map(Number);

    let obj = {
    
    };
    for (let i = 0; i < titleNum; i++) {
    
    
      let title = await readline();
      let titles = title.split(" ")


      for (let j = 0; j < titles.length; j++) {
    
    
        if (obj[titles[j]]) {
    
    
          obj[titles[j]]["times"] += 3;
          if (obj[titles[j]]["titleIndex"]) {
    
    
            obj[titles[j]]["titleIndex"] = Math.min(obj[titles[j]]["titleIndex"],j)
          } else {
    
    
            obj[titles[j]]["titleIndex"] = j;
          }
        } else {
    
    
          obj[titles[j]] = {
    
    
            str: titles[j],
            times: 3,
            titleIndex: j
          }
        }
      }

      let text = await readline();
      let texts = text.split(" ");
      for (let j = 0; j < texts.length; j++) {
    
    
        
        if (obj[texts[j]]) {
    
    
          obj[texts[j]]["times"] += 1; 
          if (obj[texts[j]]["textIndex"]) {
    
    
            obj[texts[j]]["textIndex"] = Math.min(obj[texts[j]]["textIndex"], j)
          } else {
    
    
            obj[texts[j]]["textIndex"] = j;
          }
        } else {
    
    
          obj[texts[j]] = {
    
    
            str: texts[j],
            times: 1,
            textIndex: j
          }
        }
      }
    }

    let hot_word = Object.values(obj);
    let sort_hot_word = hot_word.sort((a,b) => sortWord(a,b))
    let result = [];
    for (let i = 0; i < topN; i++) {
    
    
      result.push(sort_hot_word[i].str)
    }
    console.log(...result);
  }

  function sortWord(a , b) {
    
    
    if (a.times === b.times) {
    
    
      if (a.titleIndex === b.titleIndex) {
    
    
        return a.textIndex - b.textIndex;
      }
      return a.titleIndex - b.titleIndex;
    }
    return b.times - a.times;
  }
})();

猜你喜欢

转载自blog.csdn.net/weixin_45566730/article/details/130165567