2011-03-07 18 views
8

cómo eliminar de forma dinámica árabe diacrítica Estoy diseñando un "CHM" libro electrónico y tienen múltiples páginas HTML contienen texto árabe pero algún tiempo, el motor de búsqueda quiere destacar algunas de las palabras árabes porque su ¿Diacrítico así que es posible cuando la carga de la página para usar funciones de JavaScript que quitaría el texto diacrítico árabe? pero debe tener la opción de habilitar de nuevo, así que no quiero sacarlo de HTML físicamente, pero temporal,Javascript + eliminar diacrítica texto árabe dinámicamente

la cosa es que no sé por dónde empezar y qué es la función de derecho de uso

gracias :)

Por ejemplo

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

Respuesta

0

This site tiene algunas rutinas para la normalización Javascript Unicode que podría ser utilizado para hacer lo que usted está tratando. Si nada más podría proporcionar un buen punto de partida.

Si puede preprocesar los datos, Python tiene buenas rutinas Unicode para facilitar el trabajo de este tipo de transformaciones. Esta podría ser una buena opción si puede preprocesar el archivo CHM a produe un archivo de índice separado que podría ser fusionada luego en su centro de facilitación:

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

gracias tomaré alook a su información –

6

probar este

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

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

El el código es C#, no javascript. Aún tratando de averiguar cómo lograr esto en javascript

EDITAR: Aparentemente es muy fácil en javascript. Los diacráticos se almacenan como "letras" separadas y se pueden eliminar con bastante facilidad.

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

Editar: Aquí hay otra manera de hacerlo utilizando BuckData http://qurandev.github.com/

Ventajas Buck utiliza menos ancho de banda en JavaScript, u ​​puede buscar a través de todo el texto corán Buck en 1 tiro. intuitiva en comparación con la búsqueda en árabe Buck en árabe y árabe en Buck es una llamada js simple. Juega con live muestra aquí: http://jsfiddle.net/BrxJP/ Puedes quitar todas las vocales del texto Buck en pocos milisegundos. ¿Por qué hacer esto? Puede buscar en javascript, haciendo caso omiso de las diferencias de tareas (Fathah, Dammah, Kasrah). Lo que lleva a más visitas. El texto regex + buck puede llevar a optimizaciones increíbles. Todas las búsquedas se pueden ejecutar localmente. http://qurandev.appspot.com ¿Cómo se generan los datos? sólo uno-a-uno mapeo usando: http://corpus.quran.com/java/buckwalter.jsp

+0

Sameer es esto sólo específico para el Corán o ¿es también aplicable a todo el texto árabe? – abbood

+0

abbood Creo que se aplica a todo el texto árabe – Sameer

1

Aquí hay un código javascript que puede manejar la eliminación de diacríticos árabes casi todo el tiempo.

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 

Nota: es posible anular el arabicNormChar a sus propias preferencias.

2

Escribí esta función que maneja cadenas con caracteres mixtos en árabe e inglés, eliminando caracteres especiales (incluyendo signos diacríticos) y normalizando algunos caracteres árabes como convertir todas las 'en' ه '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; 
 
}
<input value="الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ" type="text" id="input"> 
 
<button onclick="document.getElementById('input').value = normalize_text(document.getElementById('input').value)">Normalize</button>

0

Utilice esta expresión regular para capturar todas tashkeel

[-ؚٟ]

Cuestiones relacionadas