Node.js 将单词列表转换为频率json

Node.js 将单词列表转换为频率json,node.js,json,list,data-processing,Node.js,Json,List,Data Processing,我已经编写了一个代码,它获取项目列表并输出一个json,其中唯一的项目作为键,频率作为值 下面的代码在我测试时运行良好 const tokenFrequency = tokens =>{ const setTokens=[...new Set(tokens)] return setTokens.reduce((obj, tok) => { const frequency = tokens.reduce((count, word) =>word===tok

我已经编写了一个代码,它获取项目列表并输出一个json,其中唯一的项目作为键,频率作为值

下面的代码在我测试时运行良好


const tokenFrequency = tokens =>{

  const setTokens=[...new Set(tokens)]
  return setTokens.reduce((obj, tok) => {
    const frequency   = tokens.reduce((count, word) =>word===tok?count+1:count, 0);

    const containsDigit = /\d+/;
    if (!containsDigit.test(tok)) {
      obj[tok.toLocaleLowerCase()] = frequency;
    }
    return obj;
  }, new Object());
}


产生输出

{ hello: 1, hi: 2, whatsup: 1, hey: 1 }
但当我尝试使用大型数据语料库的单词列表时,似乎产生了错误的结果

比如说,如果我输入的单词列表长度为14000+它会产生错误的结果

例如: 当本页中的这个列表(上面链接)起作用时,单词“is”的频率为4,但实际频率为907

为什么对于大数据它的行为是这样的?
如何解决这个问题?

您需要首先对标记进行规范化,方法是对它们应用
toLowerCase()
,或者对相同但大小写不同的单词进行区分

原因:

您的小数据集没有
Is
单词(大写“i”)。大型数据集确实出现了
Is
(大写字母“i”),这显然有一个频率
4
,这反过来会覆盖小写字母
Is
的频率

{ hello: 1, hi: 2, whatsup: 1, hey: 1 }