2011-03-07 71 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

[-ؚٟ]