微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何修复此阿拉伯语音译器中的少数错误输出?

如何解决如何修复此阿拉伯语音译器中的少数错误输出?

特别是我被困在您通常在阿拉伯语单词中看到的 al-,例如 al-Qiblatayn。这是我制作的音译器,您可以在很大程度上忽略 exact output 语法,只需注意输出中每个字符的含义都有特定含义,将字母加倍意味着使元音变长或生成辅音。

const m = {
  '\u0626': "'y",'\u0624': "'w",'\u064E\u0627': 'aa','\u0650\u0649': 'ii','\u064E\u0649': 'aa','\u0650\u064A': 'ii','\u064F\u0648': 'uu','\u064A\u064E': 'ay','\u0648\u064E': 'aw','\u0649': 'aa','ء': "'",'ا': 'aa','ﺍ': 'aa','ﺎ': 'aa','ب': 'b','ﺏ': 'b','ﺐ': 'b','ﺒ': 'b','ﺑ': 'b','ت': 't','ﺕ': 't','ﺖ': 't','ﺘ': 't','ﺗ': 't','ث': 'c','ﺙ': 'c','ﺚ': 'c','ﺜ': 'c','ﺛ': 'c','ج': 'dj','ﺝ': 'dj','ﺞ': 'dj','ﺠ': 'dj','ﺟ': 'dj','ح': 'h~','ﺡ': 'h~','ﺢ': 'h~','ﺤ': 'h~','ﺣ': 'h~','خ': 'H','ﺥ': 'H','ﺦ': 'H','ﺨ': 'H','ﺧ': 'H','د': 'd','ﺩ': 'd','ﺪ': 'd','ذ': 'C','ﺫ': 'C','ﺬ': 'C','ر': 'r!','ﺭ': 'r!','ﺮ': 'r!','ز': 'z','ﺯ': 'z','ﺰ': 'z','س': 's','ﺱ': 's','ﺲ': 's','ﺴ': 's','ﺳ': 's','ش': 'x','ﺵ': 'x','ﺶ': 'x','ﺸ': 'x','ﺷ': 'x','ص': "s\"",'ﺹ': "s\"",'ﺺ': "s\"",'ﺼ': "s\"",'ﺻ': "s\"",'ض': "d\"",'ﺽ': "d\"",'ﺾ': "d\"",'ﻀ': "d\"",'ﺿ': "d\"",'ط': "t\"",'ﻁ': "t\"",'ﻂ': "t\"",'ﻄ': "t\"",'ﻃ': "t\"",'ظ': 'C','ﻅ': 'C','ﻆ': 'C','ﻈ': 'C','ﻇ': 'C','ع': "'",'ﻉ': "'",'ﻊ': "'",'ﻌ': "'",'ﻋ': "'",'غ': 'r~','ﻍ': 'r~','ﻎ': 'r~','ﻐ': 'r~','ﻏ': 'r~','ف': 'f','ﻑ': 'f','ﻒ': 'f','ﻔ': 'f','ﻓ': 'f','ق': 'K','ﻕ': 'K','ﻖ': 'K','ﻘ': 'K','ﻗ': 'K','ك': 'k','ﻙ': 'k','ﻚ': 'k','ﻜ': 'k','ﻛ': 'k','ل': 'l','ﻝ': 'l','ﻞ': 'l','ﻠ': 'l','ﻟ': 'l','م': 'm','ﻡ': 'm','ﻢ': 'm','ﻤ': 'm','ﻣ': 'm','ن': 'n','ﻥ': 'n','ﻦ': 'n','ﻨ': 'n','ﻧ': 'n','ه': 'h','ﻩ': 'h','ﻪ': 'h','ﻬ': 'h','ﻫ': 'h','و': 'w','ﻭ': 'w','ﻮ': 'w','ي': 'y','ﻱ': 'y','ﻲ': 'y','ﻴ': 'y','ﻳ': 'y','آ': "'aa",'ـآ': "'aa",'ٱ': '','ﺁ': "'aa",'ﺂ': "'aa",'ة': 'at','ـة': 'at','ﺓ': 'at','ﺔ': 'at','ال': 'al','ـى': 'aa','ﻻ': 'laa','ﻼ': 'laa','ﲓ': 'iim','ﳰ': 'iim','ﳝ': 'iim','ﱘ': 'iim','ﲅ': 'lm','ﳭ': 'lm','ﳌ': 'lm','ﱂ': 'lm','ى': 'a','ﻯ': 'a','ﻰ': 'a','،‎': ',','؟': '?','؛': ';','۔': '.','﴾': '{','﴿': '}','\u064e': 'a','\u0650': 'i','\u064f': 'u','\u0627': 'aa','\u064a': 'ii','\u0648': 'uu','\u064b': 'an','\u064d': 'in','\u064c': 'un','گ': 'g','ڨ': 'g','ڭ': 'g','چ': 'j','ڥ': 'v','ڤ': 'v','پ': 'p','\u06e1': '','\u0652': '','\u0651': '','\u0670': 'aa','إ': "'i",// arabic Letter Alef With Hamza Below
  'أ': "'",'\u200e': '',// ltr marker
  ' ': ' ',}

const generate = (s) => {
  let out = []
  let i = 0
  let r = s
  let last
  while (r.length) {
    let found = false
    x:
    for (let k in m) {
      if (r.indexOf(k) === 0) {
        let v = k == '\u0651' ? last.split('').pop() : m[k]
        last = v
        i += k.length
        out.push(v)
        r = r.substr(k.length)
        found = true
        break x
      }
    }
    if (!found) {
      throw `oops ${out.join('')} from ${s},${r.codePointAt(0).toString(16)}`
    }
  }
  return out.join('')
    .replace(/ii+/g,'ii')
    .replace(/ee+/g,'ee')
    .replace(/aa+/g,'aa')
    .replace(/oo+/g,'oo')
    .replace(/uu+/g,'uu')
}

console.log(generate('ٱلْكَعْبَة‎'))
console.log(generate('اَلْمَسْجِدُ ٱلْحَرَامُ‎'))

以下是其中一些的输出

ٱلْكَعْبَة‎,lka'baat
اَلْمَسْجِدُ ٱلْحَرَامُ‎,aalmasdjidu lh~ar!aamu
ٱلْمَسْجِد ٱلْأَقْصَىٰ‎,lmasdjid l'aKs"aa
الحرم الشريف,aalh~r!m aalxr!iif
مسجد القبلتين,msdjd aalKbltiin

注意 (1) 和 (3) 一个l- 开头而不是 al-,而 2、4 和 5 以 aal- 开头。此外(切线注释),第一个-t 结尾,即使该词通常写成 Kabaa,没有 t

为什么 al- 与我在这里看到的有两种不同的书写方式(从维基百科复制这些词)。以及如何修复生成器以使其正确写入(看起来是短的 a,而不是长的 aa)?

如果您发现其他任何错误,我很想知道,这就是我目前在入门时所发现的。如果您知道我在此实现中缺少的一些一般信息,请告诉我。我已经包含了“arabic Shadda U+0651”来加倍辅音,以及我从维基百科 Arabic Alphabet 页面获得的所有其他内容

我不太熟悉阅读阿拉伯语,但我注意到这两组中的一些元音变音符号不同,只是不知道为什么或如何解决

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。