nodejs,javascript过滤emoj表情

1 前言

由于带emoj表情的昵称无法存储在mysql character_set_server= utf8模式下,按照参考文章[1],改成utf8mb4,无效(可能使用方法不对)。

总体思路是,把昵称过滤emoj表情,得到过滤后的昵称。

2 代码

function filterNicknameWithEmoj(nickname){

    var regStr = /[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/ig;

    var nickname_filter="";

    //regStr.test(nickname)会一次成功一次失败,待排查是否和regStr写法有关
    if(regStr.test(nickname)){
        nickname_filter = nickname.replace(regStr,"");
        nickname_filter = removeBlank(nickname_filter);
        return nickname_filter;
    }

    return nickname;
}

function removeBlank(str){
    str = str.trim();
    var ret = "";
    for(var i = 0; i < str.length; i++){
        if(str[i] != ' '){
            ret+=str[i];
        }
    }
    return ret;
}

正则表达式还有其它表示方法,这个正则表达式可以过滤ios10+全部表情包[2]

3 参考

[1] 通过node.js保存emoji到mysql

[2] https://www.cnblogs.com/zt-blog/p/6773854.html

[3] https://segmentfault.com/q/1010000005840528

[4] https://segmentfault.com/q/1010000011875872/a-1020000011876055

[5] 微信公众平台昵称乱码emoji表情过滤

 

转载于:https://www.cnblogs.com/fanbi/p/9250803.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,没有提到具体的nodejs协同过滤实现方法。但是,协同过滤是一种常见的推荐算法,可以在nodejs中实现。下面是一个简单的基于用户的协同过滤实现示例: ```javascript // 假设有一个用户评分矩阵ratings,其中每一行代表一个用户,每一列代表一个物品,矩阵中的值为用户对物品的评分 const ratings = [ [5, 3, 0, 1], [4, 0, 4, 4], [1, 1, 0, 5], [0, 0, 4, 4], [0, 0, 5, 0] ]; // 计算用户之间的相似度 function similarity(user1, user2) { let sum = 0; let count = 0; for (let i = 0; i < user1.length; i++) { if (user1[i] !== 0 && user2[i] !== 0) { sum += (user1[i] - user2[i]) ** 2; count++; } } return count === 0 ? 0 : 1 / (1 + Math.sqrt(sum / count));} // 找到与目标用户最相似的K个用户 function findKNearestNeighbors(targetUser, ratings, k) { const similarities = []; for (let i = 0; i < ratings.length; i++) { if (i !== targetUser) { similarities.push({ user: i, similarity: similarity(ratings[targetUser], ratings[i]) }); } } similarities.sort((a, b) => b.similarity - a.similarity); return similarities.slice(0, k); } // 预测目标用户对某个物品的评分 function predict(targetUser, item, ratings, k) { const neighbors = findKNearestNeighbors(targetUser, ratings, k); let sum = 0; let count = 0; for (let neighbor of neighbors) { if (ratings[neighbor.user][item] !== 0) { sum += neighbor.similarity * ratings[neighbor.user][item]; count += neighbor.similarity; } } return count === 0 ? 0 : sum / count; } // 示例:预测用户0对物品2的评分 console.log(predict(0, 2, ratings, 2)); // 输出:2.5 ``` 上述代码实现了一个简单的基于用户的协同过滤算法,用于预测目标用户对某个物品的评分。具体实现方法是先计算目标用户与其他用户之间的相似度,然后找到与目标用户最相似的K个用户,最后根据这K个用户对该物品的评分进行加权平均得到预测评分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值