node.js - 将单词列表转换为频率 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
频率。
推荐阅读
- php - 如何对数据库中的数据进行分组
- typescript - 离子滑块导航未正确定义
- powershell - 无法在函数中查询 AD 用户
- python - 如何使用 Python 访问使用 HMAC 身份验证的 Bitstamp 的私有 API?
- php - PHP 会话和检查 SID
- python - RESTful API 请求适用于 Python 和浏览器,但不适用于 VB.Net
- android - kotlin 中的 Android Rxjava 和 Retrofit
- azure-notebooks - 无法打开 notebooks.azure.com 并出现错误消息:“/”应用程序中的服务器错误
- ios - 如何使用 Objective-C 在 iOS 中调整 UIBezierPath
- c# - 如何四舍五入到最接近的偶数?