如何动态删除阿拉伯语变音符号 我正在设计一个电子书“chm”,并且有多个html页面包含阿拉伯语文本 但是有些时候搜索引擎想突出一些 阿拉伯语单词,因为它的变音符号,所以当页面加载使用JavaScript函数可能会删除阿拉伯语变音文本? 但必须有选项再次启用所以我 不希望从物理上删除它但是暂时的,
问题是我不知道从哪里开始以及使用什么是正确的功能
谢谢你:)例如
Text : الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ
converted to : الحمد لله رب العالمين
答案 0 :(得分: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/
执行此操作的另一种方法优点 Buck使用较少的带宽在Javascript中,你可以通过搜索 整个巴克古兰经文本在1枪。与阿拉伯语搜索相比直观 降压到阿拉伯语和阿拉伯语到巴克是一个简单的js电话。现场直播 示例:http://jsfiddle.net/BrxJP/您可以删除所有元音 来自巴克文本的几毫秒。为什么这样?你可以搜索 javascript,忽略了taskheel的差异(Fathah,Dammah, Kasrah)。这导致更多的点击率。正则表达式+降压文本可以导致 令人敬畏的优化。所有搜索都可以在本地运行。 http://qurandev.appspot.com数据如何生成?只是一对一的 使用http://corpus.quran.com/java/buckwalter.jsp
进行映射
答案 1 :(得分: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>
答案 2 :(得分: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。
答案 3 :(得分:1)
使用此正则表达式捕获所有tashkeel
[-ؚٟ]
答案 4 :(得分:0)
This site有一些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'
答案 5 :(得分:0)
我尝试了以下解决方案,效果很好:
const str = 'الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ';
const withoutDiacs = str.replace(/([^\u0621-\u063A\u0641-\u064A\u0660-\u0669a-zA-Z 0-9])/g, '');
console.log(withoutDiacs); //الحمد لله رب العالمين