2016-08-25 70 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) 

這裏是我的文件的樣本:

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