Node.js 将单词列表转换为频率json
我已经编写了一个代码,它获取项目列表并输出一个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
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 }