读取表情符号并将其转换为JavaScript中的字符串表示形式以进行情感分析

时间:2017-02-06 12:16:33

标签: javascript regex csv unicode

如何读取/解释字符串中的表情符号/ Unicode字符?

我正在创建数据网格的CSV导出,并且想要创建一个Twitter表情符号的字符串表示库。我想用它的字符串表示替换表情符号。

这是一个字符串示例:

 Absa!!!! 

这是CSV版本的样子:

😂😂😂 Absa!!!! 

我想这样做:

(FACE WITH TEARS OF JOY) (FACE WITH TEARS OF JOY) (FACE WITH TEARS OF JOY) Absa!!!! 

我从这个网站获得了Unicode,字节(UTF-8)和表情符号的详细信息:http://apps.timwhitlock.info/emoji/tables/unicode

 = U+1F602    \xF0\x9F\x98\x82 FACE WITH TEARS OF JOY

我甚至不知道从哪里开始!我假设有一堆if语句的正则表达式?如果表情符号与正则表达式匹配,则它将替换为其文本版本。

我发现了很多关于删除表情符号的有用帖子,但没有更换它们。这是一个例子:

/(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|[\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|[\ud83c[\ude32-\ude3a]|[\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g

同一篇文章中有许多其他有用的答案:How to remove emoji code using javascript?

感谢您的反馈,意见和建议!

谢谢!

1 个答案:

答案 0 :(得分:0)

以下是我的解决方案:

  1. 我创建了所有表情符号的字典(在示例中我有2个字典项目)
  2. 我创建了一个排除String和其他2个布尔参数的函数(参见Angular服务说明)
  3. <强>结果: 表情符号将转换为其字符串表示形式。这对情感分析很有用。

    (function () {
        /**
        *
        * @param    {string}    string              String to convert
        * @param    {boolean}   [fill]              leaves the emoji in place, and inserts the description afterwards
        * @param    {boolean}   [omitSkinColour]    removes skin colour from both the emoji if fill is true, and the description
        * @returns  {string}                        Emoji-less string
        */
        'use strict';
    
        angular
            .module('portalDashboardApp')
            .factory('ReplaceEmojiService', ReplaceEmojiService);
    
        ReplaceEmojiService.$inject = [];
    
        function ReplaceEmojiService() {
    
            var service = {
                replaceEmoji: replaceEmoji
            };
    
            return service;
    
            function replaceEmoji(str, fill, omitSkinColour) {
    
                var dictionary = {
                    "35": {
                        "8419": {
                            "name": "keycap: #"
                        },
                        "65039": {
                            "8419": {
                                "name": "keycap: #"
                            }
                        }
                    },
                    "42": {
                        "8419": {
                            "name": "keycap: *"
                        },
                        "65039": {
                            "8419": {
                                "name": "keycap: *"
                            }
                        }
                    }  
                }
    
                fill = fill || false;
                omitSkinColour = omitSkinColour || false;
    
                if (omitSkinColour) {
                    str = str.replace(/(?:\uD83C[\uDFFB-\uDFFF])/g, '');
                }
    
                var newStr = '';
    
                for (var i = 0; i < str.length;) {
                    var localDict = dictionary;
                    var j = i;
                    var char = str.charCodeAt(j);
    
                    while (localDict.hasOwnProperty(char)) {
                        localDict = localDict[char];
                        char = str.charCodeAt(++j);
                    }
    
                    if (localDict.name) {
                        if (fill) {
                            newStr += str.slice(i, j) + '(' + localDict.name + ')';
                        } else {
                            newStr += '(' + localDict.name + ')';
                        }
                    } else {
                        newStr += str[i];
                    }
    
                    i += j - i || 1;
                }
               return newStr;
            }
        };
    
    })();