阿拉伯语数据集清理:删除阿拉伯语文本以外的所有内容
Arabic Dataset Cleaning: Removing everything but Arabic text
我有一个庞大的阿拉伯语数据集,我清理了数据中的特殊字符、英文字符。但是,我发现该数据集包含许多其他语言,如中文、日文、俄文等。问题是我无法确切地说出阿拉伯语中混合了哪些其他语言,因此我需要一个解决方案来删除所有内容来自 pandas 数据框的文本而不是阿拉伯字符。
这是我的代码:
def clean_txt(input_str):
try:
if input_str: # if the input string is not empty do the following
input_str = re.sub('[?؟!@#$%&*+~\/=><]+^' , '' , input_str) # Remove some of special chars
input_str=re.sub(r'[a-zA-Z?]', '', input_str).strip() # remove english chars
input_str = re.sub('[\s]+'," ",input_str) # Remove all spaces
input_str = input_str.replace("_" , ' ') #Remove underscore
input_str = input_str.replace("ـ" , '') # Remove Arabic tatwelah
input_str =input_str.replace('"','')# Remove "
input_str =input_str.replace("''",'')# Remove ''
input_str =input_str.replace("'",'')# Remove '
input_str =input_str.replace(".",'')# Remove .
input_str =input_str.replace(",",'')# Remove ,
input_str =input_str.replace(":",' ')# Remove :
input_str=re.sub(r" ?\([^)]+\)", "", str(input_str)) #Remove text between ()
input_str = input_str.strip() # Trim input string
except:
return input_str
return input_str
语言检测是一个已解决的问题。
最简单的算法方法是在一堆 single-language 文本中扫描字符 bi-grams,
并计算它们与目标文本的 bi-gram 频率之间的距离。
你最简单的实现是调用这个 NLTK 例程:
from nltk.classify.textcat import TextCat
nltk.download(['crubadan', 'punkt'])
tc = TextCat()
>>> tc.guess_language('Now is the time for all good men to come to the aid of their party.')
'eng'
>>> tc.guess_language('Il est maintenant temps pour tous les hommes de bien de venir en aide à leur parti.')
'fra'
>>> tc.guess_language('لقد حان الوقت الآن لجميع الرجال الطيبين لمساعدة حزبهم.')
'arb'
input_str = re.sub(r'[^ \p{Arabic}]', '', input_str)
所有 not-space 和 not-Arabic 都被删除。您可能会添加标点符号,需要处理空格,例如 ()
但您可以查看 Unicode script/category 名称。
已更正 而不是 InArabic
应该是 Arabic
,参见 Unicode scripts。
终于找到答案了:
text ='大谷育江 صباح الخيرfff :"""%#$@&!~(2009 مرحباً Добро пожаловать fffff أحمــــد ݓ'
t = re.sub(r'[^0-9\u0600-\u06ff\u0750-\u077f\ufb50-\ufbc1\ufbd3-\ufd3f\ufd50-\ufd8f\ufd50-\ufd8f\ufe70-\ufefc\uFDF0-\uFDFD]+', ' ', text)
t
' صباح الخير 2009 مرحباً أحمــــد ݓ'
我有一个庞大的阿拉伯语数据集,我清理了数据中的特殊字符、英文字符。但是,我发现该数据集包含许多其他语言,如中文、日文、俄文等。问题是我无法确切地说出阿拉伯语中混合了哪些其他语言,因此我需要一个解决方案来删除所有内容来自 pandas 数据框的文本而不是阿拉伯字符。 这是我的代码:
def clean_txt(input_str):
try:
if input_str: # if the input string is not empty do the following
input_str = re.sub('[?؟!@#$%&*+~\/=><]+^' , '' , input_str) # Remove some of special chars
input_str=re.sub(r'[a-zA-Z?]', '', input_str).strip() # remove english chars
input_str = re.sub('[\s]+'," ",input_str) # Remove all spaces
input_str = input_str.replace("_" , ' ') #Remove underscore
input_str = input_str.replace("ـ" , '') # Remove Arabic tatwelah
input_str =input_str.replace('"','')# Remove "
input_str =input_str.replace("''",'')# Remove ''
input_str =input_str.replace("'",'')# Remove '
input_str =input_str.replace(".",'')# Remove .
input_str =input_str.replace(",",'')# Remove ,
input_str =input_str.replace(":",' ')# Remove :
input_str=re.sub(r" ?\([^)]+\)", "", str(input_str)) #Remove text between ()
input_str = input_str.strip() # Trim input string
except:
return input_str
return input_str
语言检测是一个已解决的问题。
最简单的算法方法是在一堆 single-language 文本中扫描字符 bi-grams, 并计算它们与目标文本的 bi-gram 频率之间的距离。
你最简单的实现是调用这个 NLTK 例程:
from nltk.classify.textcat import TextCat
nltk.download(['crubadan', 'punkt'])
tc = TextCat()
>>> tc.guess_language('Now is the time for all good men to come to the aid of their party.')
'eng'
>>> tc.guess_language('Il est maintenant temps pour tous les hommes de bien de venir en aide à leur parti.')
'fra'
>>> tc.guess_language('لقد حان الوقت الآن لجميع الرجال الطيبين لمساعدة حزبهم.')
'arb'
input_str = re.sub(r'[^ \p{Arabic}]', '', input_str)
所有 not-space 和 not-Arabic 都被删除。您可能会添加标点符号,需要处理空格,例如 ()
但您可以查看 Unicode script/category 名称。
已更正 而不是 InArabic
应该是 Arabic
,参见 Unicode scripts。
终于找到答案了:
text ='大谷育江 صباح الخيرfff :"""%#$@&!~(2009 مرحباً Добро пожаловать fffff أحمــــد ݓ'
t = re.sub(r'[^0-9\u0600-\u06ff\u0750-\u077f\ufb50-\ufbc1\ufbd3-\ufd3f\ufd50-\ufd8f\ufd50-\ufd8f\ufe70-\ufefc\uFDF0-\uFDFD]+', ' ', text)
t
' صباح الخير 2009 مرحباً أحمــــد ݓ'