我正在尝试将带有中文字符的句子转换为拼音。
Aka: 你好, 吗? => ni hao, ma?
我想最初删除句子标点符号,因此我不需要浪费循环检查字典的相等性,但最终会想要保留标点符号的位置并将它们添加回翻译。
我得到了从中文到拼音的转换,并且能够在最后添加?
,但我不确定如何替换新句子中的逗号。
/*
Remove spaces periods, commas, and question marks
*/
function removePunctuation (str) {
return str.replace(/[.,\? ]/g, '');
}
function convertToPinyin () {
var cn = chinese_sentence; //你好, 吗?
var cn2 = removePunctuation(cn); //你好吗
var cn3 = cn2.split(''); //['你', '好', '吗']
var pinyin = [];
for (var i = 0; i < cn3.length; i++) {
if (cn3[i] in dictionary_json) {
pinyin.push(dictionary_json[cn3[i]].pinyin);
}
}
// cn = 你好, 吗?
// replace '你好吗' with 'ni hao ma'
// get 'ni hao, ma?'
return cn.replace(cn2, pinyin.join(' '));
}
var pinyin = convertToPinyin();
console.log('pinyin', pinyin); //ni hao ma?
//should get 'ni hao, ma?'
答案 0 :(得分:1)
不是删除标点符号,而是简单地删除空格并简单地将它们作为普通字符,然后在字典检查期间查看正在查看的字符是否首先不是标点字符:
function convertToPinyin () {
var cn = '你好, 吗?'; //你好, 吗?
var cn2 = cn.replace(/\s/g, ''); //你好,吗?
var cn3 = cn2.split(''); //['你', ',', '好', '吗', '?']
var pinyin = [];
for (var i = 0; i < cn3.length; i++) {
if(!/[.,\? ]/.test(cn3[i])) // If not punctuation
{
if (cn3[i] in dictionary_json) // Then convert
pinyin.push(dictionary_json[cn3[i]].pinyin);
} else {
pinyin.push(cn3[i]);
}
}
return cn.replace(cn2, pinyin.join(' '));
}
通过这种方式,您可以保存标点符号的位置并同时转换项目,如果字典不是中文字符,也不会检查字典。