Javascript: 统计表情符号在文本中出现的频率
Javascript: Counting frequency of emojis in text
我正在尝试计算表情符号在一段文本中出现的频率。例如:
"I love so much " -> [{:3}, {:1}]
为了计算文本块中字符出现的频率,我使用
function getFrequency(string) {
var freq = {};
for (var i=0; i<string.length;i++) {
var character = string.charAt(i);
if (freq[character]) {
freq[character]++;
} else {
freq[character] = 1;
}
}
return freq;
};
来源:
^上面的代码很好用,但它不能识别表情符号字符:
{�: 1, �: 3, �: 2}
此外,我希望输出是长度为 1 的 json 个对象的列表,而不是一个长 json 对象。
charAt
在这里帮不了你。 for...of
会将字符串正确解析为 Unicode 代码点,包括星界中的代码点。我们用character.length
来判断这个是不是辅助位面字符。如果你真的想知道它是不是表情符号,你需要把它收紧。
const input = "I love so much ";
function getFrequency(string) {
var freq = {};
for (character of string) {
if (character.length === 1) continue;
if (freq[character]) {
freq[character]++;
} else {
freq[character] = 1;
}
}
return freq;
};
console.log(getFrequency(input));
要创建一个单值对象数组,运行通过这个输出:
function breakProperties(obj) {
return Object.keys(obj).map(function(key) {
var result = {};
result[key] = obj[key];
return result;
});
}
您可以使用 String.replace
函数的回调和 unicode 感知 RegExp
检测从 unicode 块 "Miscellaneous Symbols" 到 "Pictographs Transport and Map Symbols"(0x1F300 至 0x1F6FF):
let str = "I love so much ";
let freq = {};
str.replace(/[\u{1F300}-\u{1F6FF}]/gu, char => freq[char] = (freq[char] || 0) + 1);
console.log(freq);
如果您希望避免 RegExp
或 String.replace
,您可以将字符串解构为一个数组并将其减少到如下频率:
let str = "I love so much ";
let freq = [...str].reduce((freq, char) => {
if (char >= '\u{1F300}' && char < '\u{1F700}') freq[char] = (freq[char] || 0) + 1;
return freq;
}, {});
console.log(freq);
我正在尝试计算表情符号在一段文本中出现的频率。例如:
"I love so much " -> [{:3}, {:1}]
为了计算文本块中字符出现的频率,我使用
function getFrequency(string) {
var freq = {};
for (var i=0; i<string.length;i++) {
var character = string.charAt(i);
if (freq[character]) {
freq[character]++;
} else {
freq[character] = 1;
}
}
return freq;
};
来源:
^上面的代码很好用,但它不能识别表情符号字符:
{�: 1, �: 3, �: 2}
此外,我希望输出是长度为 1 的 json 个对象的列表,而不是一个长 json 对象。
charAt
在这里帮不了你。 for...of
会将字符串正确解析为 Unicode 代码点,包括星界中的代码点。我们用character.length
来判断这个是不是辅助位面字符。如果你真的想知道它是不是表情符号,你需要把它收紧。
const input = "I love so much ";
function getFrequency(string) {
var freq = {};
for (character of string) {
if (character.length === 1) continue;
if (freq[character]) {
freq[character]++;
} else {
freq[character] = 1;
}
}
return freq;
};
console.log(getFrequency(input));
要创建一个单值对象数组,运行通过这个输出:
function breakProperties(obj) {
return Object.keys(obj).map(function(key) {
var result = {};
result[key] = obj[key];
return result;
});
}
您可以使用 String.replace
函数的回调和 unicode 感知 RegExp
检测从 unicode 块 "Miscellaneous Symbols" 到 "Pictographs Transport and Map Symbols"(0x1F300 至 0x1F6FF):
let str = "I love so much ";
let freq = {};
str.replace(/[\u{1F300}-\u{1F6FF}]/gu, char => freq[char] = (freq[char] || 0) + 1);
console.log(freq);
如果您希望避免 RegExp
或 String.replace
,您可以将字符串解构为一个数组并将其减少到如下频率:
let str = "I love so much ";
let freq = [...str].reduce((freq, char) => {
if (char >= '\u{1F300}' && char < '\u{1F700}') freq[char] = (freq[char] || 0) + 1;
return freq;
}, {});
console.log(freq);