如何处理阿拉伯语中重复的字母

时间:2016-08-25 06:09:50

标签: python arabic

我想通过用一个字符替换重复的字符来规范化阿拉伯字符串。例如:单词

[JsonConverter(typeof(SettingsJsonConverter))]
public class Settings
{
    [JsonIgnore]
    public Dictionary<string, object> Entries { get; private set; }

    public Settings()
    {
        this.Entries = new Dictionary<string, object>();
    }

    public DateTime GetDate(string key)
    {
        return (DateTime)this.Entries[key];
    }
}

将被标准化为

 رااااائع

我找到了一个适合英语(python)的正则表达式:

رائع

但是,这个正则表达式对阿拉伯字符串不起作用。我不负责任。我想知道是否有人可以帮助我并提前感谢。

4 个答案:

答案 0 :(得分:1)

您需要将此行添加到您的代码中: from __future__ import unicode_literals

# encoding: utf-8
from __future__ import unicode_literals
import re
s="رااااائع"

s = re.sub(r'(.)\1+', r'\1', s)
print s

Out put:

رائع

答案 1 :(得分:0)

尝试以下方法:

import itertools
string = u"رااااائع"
''.join(char for char, _ in itertools.groupby(string))

我无法用阿拉伯语测试它,但它适用于普通字符串

参考:itertools.groupby

答案 2 :(得分:0)

您正在转换无法转换为utf-8的字符。

  

UnicodeDecodeError:&#39; ascii&#39;编解码器不能将字节0xd8解码到位   0:序数不在范围内(128)

我建议您使用忽略或替换:

v= var.encode('utf-8', 'ignore')

或:

v= var.encode('utf-8', 'replace')

Reference

答案 3 :(得分:0)

适用于字符串的代码如下:

#!/usr/bin/python 
# -*-coding:utf-8 -*
import re, string,sys
import itertools
my_file = open("./out.txt", "w")
ch= u"كتاب راااااائع جداااا"
s ="".join(c for c, _ in itertools.groupby(ch))
a=s.encode('utf-8')
my_file.write(a +"\n") // le fichier contient "كتاب رائع جدا"

当我想对文件中的每一行进行规范化时,我使用以下代码:

#!/usr/bin/python 
# -*-coding:utf-8 -*
import re, string,sys
import itertools
mon_fichier = open("./file.txt", "r")
my_file = open("./file_norm.txt", "w")
contenu = mon_fichier.read()
liste = contenu.split('\n')
for var in liste:   
    v= var.encode('utf-8')
    s ="".join(c for c, _ in itertools.groupby(v))
    b= s.encode('utf-8')
    my_file.write(b +"\n")   

我有以下错误:

v = var.encode('utf-8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)

以下是我的文件示例:

كتاب مممممممممتاز جدااااااا
قصّة شيقة و راااااائعة  
مذذذذذذهل