2011-03-07 41 views
8

如何动态删除阿拉伯语发音符号 我设计的电子书“CHM”,并有多种html页面包含阿拉伯文字 但经过一段时间的搜索引擎要突出一些 阿拉伯语词汇,因为它的因此,当页面加载使用JavaScript功能时,可能会去掉阿拉伯变音符文本? 但必须有选项可以再次启用,所以我 不想身体,但暂时从HTML中删除它,的JavaScript +删除阿拉伯语文字读音符号动态

事情是我不知道从哪里开始,什么是使用

正确的函数

谢谢:)

对于实例

Text : الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ 
converted to : الحمد لله رب العالمين 

回答

0

This site有Javascript的Unicode范式,其可用于做你尝试一些什么套路。如果没有别的,它可以提供一个好的起点。

如果您可以预处理数据,Python具有良好的Unicode例程以简化这些类型的转换工作。这可能是一个很好的选择,如果你可以进行预处理你的CHM文件produe一个单独的索引文件,它可能被再合并到您的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' 
+0

谢谢,我会采取alook您的信息 – 2011-03-07 21:55:43

6

试试这个

Text : الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ 
converted to : الحمد لله رب العالمين 

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;     
} 

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

优势 巴克使用更少的带宽在Javascript中做到这一点,美国可以在1次射门通 整个巴克古兰经文本搜索。与阿拉伯文搜索相比较直观 降压到阿拉伯语和阿拉伯语到降压是一个简单的JS调用。现场播放 样本:http://jsfiddle.net/BrxJP/您可以在几毫秒内从巴克文字中去除所有元音 。为什么要这样做?你可以在 javascript中搜索,忽略taskheel的差异(Fathah,Dammah, Kasrah)。这导致更多的命中。正则表达式+降压文本可以导致 真棒优化。所有搜索都可以在本地运行。 http://qurandev.appspot.com如何生成数据?只用一到一个 映射:http://corpus.quran.com/java/buckwalter.jsp

+0

萨米尔这是只有特定古兰经或它是否也适用于所有阿拉伯文字? – abbood 2016-06-15 12:14:45

+0

abbood我认为它适用于所有的阿拉伯文字 – Sameer 2016-06-16 15:56:47

1

这里是一个JavaScript代码,可以处理移除阿拉伯语变音符号几乎所有的时间。

var arabicNormChar = { 
    'ك': 'ک', 'ﻷ': 'لا', 'ؤ': 'و', 'ى': 'ی', 'ي': 'ی', 'ئ': 'ی', 'أ': 'ا', 'إ': 'ا', 'آ': 'ا', 'ٱ': 'ا', 'ٳ': 'ا', 'ة': 'ه', 'ء': '', 'ِ': '', 'ْ': '', 'ُ': '', 'َ': '', 'ّ': '', 'ٍ': '', 'ً': '', 'ٌ': '', 'ٓ': '', 'ٰ': '', 'ٔ': '', '�': '' 
} 

var simplifyArabic = function (str) { 
    return str.replace(/[^\u0000-\u007E]/g, function(a){ 
     var retval = arabicNormChar[a] 
     if (retval == undefined) {retval = a} 
     return retval; 
    }).normalize('NFKD').toLowerCase(); 
} 

//now you can use simplifyArabic(str) on Arabic strings to remove the diacritics 

注意:您可以覆盖arabicNormChar自己的喜好。

2

我写了这个函数处理字符串混合阿拉伯文和英文字符,删除特殊字符(包括变音符号)和规范一些阿拉伯字符,如将所有ة的成ه的。

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; 
 
}
<input value="الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ" type="text" id="input"> 
 
<button onclick="document.getElementById('input').value = normalize_text(document.getElementById('input').value)">Normalize</button>

0

使用此正则表达式来捕获所有tashkeel

[-ؚٟ]