如何加入阿拉伯字母组成单词

时间:2011-09-11 08:40:32

标签: algorithm nlp arabic

我必须从xml文件中读取阿拉伯字母并将其显示为单词

输入:سعادة 输出:سعادة看起来像..

我不知道在任何语言中怎么做,要读什么算​​法,我需要一些起点来完成这项任务

我也不确定我是否添加了正确的标签,请随意进行更改。

2 个答案:

答案 0 :(得分:3)

除非你的任务是编写系统GUI级渲染/布局引擎,否则eSniff的回答几乎肯定是你想要做什么。这种组合的阿拉伯字母将由窗口系统为您完成,如the Wikipedia page上简要说明的那样。在几乎所有情况下,您都应该避免遗留的阿拉伯语演示文稿字符代码点。只需要一个基本的Unicode阿拉伯语代码点字符串,并将它们发送到UI中的文本字段,它们将被正确呈现....

答案 1 :(得分:0)

对于参考:http://en.wikipedia.org/wiki/Arabic_alphabethttp://en.wikipedia.org/wiki/Arabic_characters_in_Unicode

首先,我不太了解阿拉伯语单词形式,我只读了上面的维基百科文档(上面链接)。感谢给我一个阅读它的理由,但请原谅我,如果我完全搞砸了这个: - )......

问题似乎是将char映射到它的正确" case"根据它在这个词中的位置,对吧?我基于您在示例中显示的更改来实现此目的。无论如何,在英语中,这就像上面的第一个字母。在阿拉伯语中,似乎有4个字符案例(开头,中间,结束和隔离)。如果这是正确的,这里是C#中的一个示例,它执行此映射:

class ArabicMapper
{ 
    enum CaseMap{End=0, Middle=1, Beginning=2, Isolated=3};
    Dictionary<char, char[]> charMap; // This maps base letters to one of their four cases.
    public ArabicMapper()
    {
        //Create the char map for each letter in the alphabet. {BaseLetter, {End, Middle, Beginning, Isolated}}
        charMap = new Dictionary<char, char[]>();
        charMap.Add(0627, new char[] { FE8D, 0627, 0627, FE8E }); // ʾalif : Not sure of the rules for middle/beginning, so just using the isolated...
        charMap.Add(0628, new char[] { FE90, FE92, FE91, FE8F }); // bāʾ :
        //... and so on for each char ...

    }
    public string charsToWord(char[] word)
    {

        if (word.Length >= 2)
        {
            StringBuilder finalWord = new StringBuilder();

            for(int i=0; i<word.Length; i++)
            {
                if (i == 0)
                    finalWord.Append((charMap[word[i]])[CaseMap.Beginning]);
                else if(i == word.Length-1)
                    finalWord.Append((charMap[word[i]])[CaseMap.End]);
                else
                    finalWord.Append((charMap[word[i]])[CaseMap.Middle]);
            }
            return finalWord.ToString();
        }
        else
        {
            (charMap[word[0]])[CaseMap.Isolated].ToString();
        }
    }
}

P.S。我没有测试这段代码,所以它可能无法正常工作。请将其视为伪代码。