javascript +动态删除阿拉伯语文本变音符号

Jom*_*rza 8 javascript arabic diacritics

如何动态删除阿拉伯语变音我正在设计一个电子书"chm"并且有多个html页面包含阿拉伯语文本但有时候搜索引擎想要突出显示一些阿拉伯语单词,因为它的变音符号因此可以在页面加载时使用JavaScript函数会删除阿拉伯语变音文本?但必须有再次启用的选项,所以我不想从HTML中删除它但是暂时的,

问题是我不知道从哪里开始以及使用什么是正确的功能

谢谢 :)

例如

Text : ????????? ??????? ????? ?????????????
converted to : ????? ??? ?? ???????? 
Run Code Online (Sandbox Code Playgroud)

Ras*_*leh 9

我编写了这个函数来处理混合阿拉伯语和英语字符的字符串,删除特殊字符(包括变音符号)并规范化一些阿拉伯字符,比如将所有 ?'s 转换为 ?'s。

normalize_text = function(text) {

  //remove special characters
  text = text.replace(/([^\u0621-\u063A\u0641-\u064A\u0660-\u0669a-zA-Z 0-9])/g, '');

  //normalize Arabic
  text = text.replace(/(?|?|?)/g, '?');
  text = text.replace(/(?)/g, '?');
  text = text.replace(/(?|?)/g, '?')
  text = text.replace(/(?)/g, '?');

  //convert arabic numerals to english counterparts.
  var starter = 0x660;
  for (var i = 0; i < 10; i++) {
    text.replace(String.fromCharCode(starter + i), String.fromCharCode(48 + i));
  }

  return text;
}
Run Code Online (Sandbox Code Playgroud)
<input value="????????? ??????? ????? ?????????????" type="text" id="input">
<button onclick="document.getElementById('input').value = normalize_text(document.getElementById('input').value)">Normalize</button>
Run Code Online (Sandbox Code Playgroud)


Sam*_*eer 6

试试这个

Text : ????????? ??????? ????? ?????????????
converted to : ????? ??? ?? ???????? 
Run Code Online (Sandbox Code Playgroud)

http://www.suhailkaleem.com/2009/08/26/remove-diacritics-from-arabic-text-quran/

代码是C#而不是javascript.还在试图弄清楚如何在javascript中实现这一点

编辑:显然它在javascript中非常容易.diacratics存储为单独的"字母",可以很容易地删除它们.

var CHARCODE_SHADDA = 1617;
var CHARCODE_SUKOON = 1618;
var CHARCODE_SUPERSCRIPT_ALIF = 1648;
var CHARCODE_TATWEEL = 1600;
var CHARCODE_ALIF = 1575;

function isCharTashkeel(letter)
{
    if (typeof(letter) == "undefined" || letter == null)
        return false;

    var code = letter.charCodeAt(0);
    //1648 - superscript alif
    //1619 - madd: ~
    return (code == CHARCODE_TATWEEL || code == CHARCODE_SUPERSCRIPT_ALIF || code >= 1612 && code <= 1631); //tashkeel
}

function stripTashkeel(input)
{
  var output = "";
  //todo consider using a stringbuilder to improve performance
  for (var i = 0; i < input.length; i++)
  {
    var letter = input.charAt(i);
    if (!isCharTashkeel(letter)) //tashkeel
      output += letter;                                
  }


return output;                   
}
Run Code Online (Sandbox Code Playgroud)

编辑:这是另一种使用BuckData的方法http://qurandev.github.com/

优势Buck使用更少的带宽在Javascript中,你可以通过一次性搜索整个Buck古兰经文本.直观的阿拉伯语搜索比较巴克到阿拉伯语和阿拉伯语到巴克是一个简单的js调用.在这里播放实时样本:http://jsfiddle.net/BrxJP/您可以在几毫秒内从Buck文本中删除所有元音.为什么这样?你可以在javascript中搜索,忽略taskheel的差异(Fathah,Dammah,Kasrah).这导致更多的点击率.正则表达式+降压文本可以带来令人敬畏的优化.所有搜索都可以在本地运行. http://qurandev.appspot.com如何生成数据?使用以下方法进行一对一映射:http://corpus.quran.com/java/buckwalter.jsp


sam*_*ias 0

该站点有一些 Javascript Unicode 规范化例程,可用于执行您正在尝试的操作。如果不出意外的话,它可以提供一个良好的起点。

如果您可以预处理数据,Python 具有良好的 Unicode 例程来轻松完成此类转换。如果您可以预处理 CHM 文件以生成单独的索引文件,然后将其合并到 CHM 中,这可能是一个不错的选择:

import unicodedata

def _strip(text):
    return ''.join([c for c in unicodedata.normalize('NFD', text) \
        if unicodedata.category(c) != 'Mn'])

composed = u'\xcd\xf1\u0163\u0115\u0155\u0148\u0101\u0163\u0129\u014d' \
    u'\u0146\u0105\u013c\u012d\u017e\u0119'

_strip(composed)
'Internationalize'
Run Code Online (Sandbox Code Playgroud)