将单词列表转换为频率json

时间:2019-05-08 13:38:19

标签: 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?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,当此页面中链接到“是”的频率的列表显示为4时,但实际频率为907。

为什么对大数据这样表现? 该如何解决?

1 个答案:

答案 0 :(得分:1)

您首先需要对令牌应用toLowerCase()来对令牌进行规范化,或者通过一种方法来区分相同但大小写不同的单词。

原因:

您的小型数据集没有Is个单词(大写的“ i”)。大型数据集的确出现了Is(大写的“ i”),显然它的频率为4,这又覆盖了小写的is的频率。