我正在尝试以编程方式创建韩语句子,但要正确地这样做意味着我需要一种方法来确定哪个 Hangul Jamo unicode 字符构成每个 Hangul Syllable unicode 字符。更具体地说,我想收集一组 Hangul Jamo 字符,并弄清楚如何将它们转换为 Hangul Syllable 字符。简单地连接字符串是行不通的,我查看了代码点值以查看 Hangul Jamo 的代码点和组合的 Hangul Syllable 的代码点之间是否存在明显的关系,但我没有看到。例如,天真地添加代码点不会产生正确的答案:

console.log(('ㄱ'.codePointAt(0) + 'ㅏ'.codePointAt(0)) === '가'.codePointAt(0));

它不记录 true ,这在查看 Hangul JamoHangul Syllables 的Unicode图表时也是不言而喻的。到目前为止,我在搜索中还没有找到答案,但是必须有一种方法可以以编程方式将部分转换为整个音节,对吗?

最佳答案

我找到了答案 on Wikipedia 。按照该链接查看字符表,但这里是使用的公式:



Here's an example of a really crappy random Korean sentence generator I threw together on JSFiddle 。我使用结束字符的值(下面的最终 randFin 值)来确定单词的最后一个音节是以元音还是辅音结尾。这决定了在结果(几乎肯定是无法理解的)句子中跟在它后面的助词的形式。它利用了 getRandomKWord 方法中的 unicode 公式:

var getRandomInt = function(n, o) {
  var min = Math.ceil(n);
  var max = Math.floor(o);
  return Math.floor(Math.random() * (max - min)) + min;
};

var getRandomKWord = function() {
  var word = '';
  var num = getRandomInt(1, 3);

  for (var i = 0; i < num; i++) {
  	var randInit = getRandomInt(0, 19) * 588;
    var randMed = getRandomInt(0, 21) * 28;
    var randFin = getRandomInt(0, 28);
    var hangulFormula = randInit + randMed + randFin + 44032;

  	word = word + String.fromCodePoint(hangulFormula);
  }
  return { word: word, final: randFin };
};

var title = document.getElementById('title');

var subject = getRandomKWord();
var object = getRandomKWord();  // don't use 'object' as a variable name
var verb = getRandomKWord();

var subParticle = subject.final ? '는' : '은';
var objParticle = object.final ? '를' : '을';

var text = subject.word +
	subParticle +
  object.word +
  objParticle +
  verb.word +
  '습니다.';

title.innerText = text;
<h1 id='title'></h1>

关于javascript - 在 JavaScript 中将 Hangul Jamo 转换为 Hangul 音节,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42478455/

10-12 21:28