2016-08-25 63 views
1

我想通过用一个字符替换重复的字符来规格化阿拉伯文字符串。例如:单词如何处理阿拉伯文中的重复字母

رااااائع 

将被标准化为

رائع 

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

s="I loooooooooooooooooove you" 
s = re.sub(r'(.)\1+', r'\1', s) // s= "I love you" 

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

回答

0

尝试以下操作:

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

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

工作

参考:itertools.groupby

+0

的代码不能正常工作。字符串“رااااائع”保持原样 – amibar

+0

编辑:再试 –

+0

打印给我رائع –

0

要转换无法转换为字符UTF-8。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd8 in position 0: ordinal not in range(128)

我建议你使用忽略或更换:

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

或:

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

Reference

+0

我仍然有两个选项“忽略”和“替换”相同的错误 – amibar

+0

我试着复制你的代码,我的作品并优雅地转换رااااائع,而不需要忽略或替换任何字符。你能否更新你的问题,也许发布一段文件内容? – Eduard

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 

输出地说:

رائع 
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) 

这里是我的文件的样本:

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