将单词列表转换为频率 json

converting list of words into frequency json

我编写了一个代码,它获取项目列表并输出一个 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());
}


喜欢

const x=["hello","hi","hi","whatsup","hey"]
console.log(tokenFrequency(x))

产生输出

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

但是当我尝试使用海量数据语料库的单词列表时,它似乎产生了错误的结果。

比如说,如果我输入一个列表单词,列表的长度超过 14000,它会产生错误的结果。

示例: https://github.com/Nahdus/word2vecDataParsing/blob/master/corpous/listOfWords.txt 当此页面(上面链接)中的此列表对单词 "is" 的频率起作用时,结果为 4,但实际频率为 907。

为什么大数据会这样? 如何解决?

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

原因:

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