如何从 python 中的文本文件中清除非阿拉伯字母?
How to clean non Arabic letters from a text file in python?
更新-
python 非常陌生,
如何清除除阿拉伯字母以外的所有文本。我使用了正则表达式函数但没有成功。
这是我的代码
# load text
filename = '/content/drive/MyDrive/Colab Notebooks/ArabicKidsStories.txt'
file = open(filename,'rt')
text = file.read()
file.close()
import re
text = re.sub('([@A-Za-z0-9_]+)|[^\w\s]|#|http\S+', '', text) # cleaning up
print (text)
这是输出样本
تفقدت نظارتي حين استيقظت صباحا فلم أجدها في مكانها وبحثت عنها في كل مكان دون أن أعثر لها على أثر يا إلهي كيف سأخرج اليوم من البيت وأواجه النهار
وتناهى إلي من الخارج صوت نقار الخشب فوق جذع شجرة قريبة فأسرعت إلى الباب وفتحته وإذا ضوء النهار يبهر بصري فأغلقت عيني وهتفت أيها النقار أين أنت
وحاولت عبثا أن أفتح عيني وأنا أقول عفوا لا أستطيع أن أفتح عيني إن الضوء يعميني
فقال نقار الخشب هذا طبيعي يا عزيزتي فأنت لم تضعي نظارتك الشمسية
وتراجعت قليلا وقلت لقد اختفت نظارتي
فتساءل نقار الخشب اختفت ماذا تقولين
وبدل أن أجيبه قلت أرجوك ابحث لي عن نظارتي إنني لا أستطيع الخروج من دونها
ولاذ نقار الخشب لحظة ثم قال حسن ابقي أنت في البيت وسأبحث لك أنا عنها
ومضى نقار الخشب فأغلقت الباب والنافذة وقبعت في الظلام يا للغرابة إنني أرى في الليل أيضا أوه كلا إنني أحب النهار وأحبذ أن أطير دوما في النور مع رفاقي إنني لا أحب الليل ولا أريد أن يكون الظلام عالمي ترى أين اختفت هذه النظارة اللعينة
ـــــــــــــ
عاد نقار الخشب متعبا قبل المساء وقال لي آسف يا عزيزي سألت عن نظارتك الطيور جميعا لكن أحدا منهم لم يرها
فأطرقت برأسي برهة ثم قلت أشكرك يا عزيزي سأبحث عنها بنفسي ليلا
واتسعت عينا نقار الخشب دهشة وقال ليلا
وقبل أن أجيبه مضى على عجل وهو يقول عفوا صغاري ينتظرونني الآن إلى اللقاء
如有任何帮助,我们将不胜感激。
提前致谢。
据我了解你。你只想清理非阿拉伯字符(所以像 1 @ ? 这样的字符不会被删除)。
如果您想要删除另一个字符,只需将其添加到 charsotdelete.
如果您有任何问题,请告诉我。
charstodelete = 'azertyuiopqsdfghjklmwxcvbn'
filename = '/content/drive/MyDrive/Colab Notebooks/ArabicKidsStories.txt'
file = open(filename,'r')
text = file.read()
file.close()
output_text = ''
# It's all about this
for char in text:
if char in charstodelete or char in chartodelete.upper():
continue
else:
output_text += char
outputfile = open('/content/drive/MyDrive/Colab Notebooks/output.txt','w')
outputfile.write(output_text)
outputfile.close()
编辑: 如果您像您所说的那样是初学者,那么使用 Reg Ex 会有点痛苦。我建议使用这样的代码而不是 Reg Ex
您的正则表达式有两个问题。首先,“@”符号必须在[范围内],而不是在范围外。其次,您在 0 到 9 之间的破折号类型有误。这是更正后的表达式。有效:
'([@A-Za-z0-9_ـــــــــــــ]+)|[^\w\s]|#|http\S+'
试试这个:
text = re.sub('[a-zA-Z0-9_]|#|http\S+', '', text)
我只是删除了 [^\w\s] 并且它删除了所有字母数字下划线而不删除阿拉伯文本
我们可以通过字符代码找到阿拉伯字符,而不是尝试删除非阿拉伯字符。 Arabic unicode block 是来自 0x0600
- 0x06ff
.
的代码
这是查找所有单词的正则表达式:
import re
arabic_words = re.findall('[\u0600-\u06ff]+', input_text)
print(arabic_words)
这里的表达式是使用一个或多个字符范围(+
)。这应该给你一个单词列表。
如果上面的文字被安排成句子,您可以在适当地拆分文本以将句子放在一起之后进行类似的操作。
如果有人仍然无法清理阿拉伯语数据集,请参阅此文档enter link description here 以过滤掉 non-Arabic 个单词:
from pyarabic.araby import tokenize, is_arabicrange, strip_tashkeel
text = u"اسمٌ الكلبِ في اللغةِ الإنجليزية Dog واسمُ الحمارِ Donky"
tokenize(text, conditions=is_arabicrange, morphs=strip_tashkeel)
#result: ['اسم', 'الكلب', 'في', 'اللغة', 'الإنجليزية', 'واسم', 'الحمار']
更新- python 非常陌生, 如何清除除阿拉伯字母以外的所有文本。我使用了正则表达式函数但没有成功。
这是我的代码
# load text
filename = '/content/drive/MyDrive/Colab Notebooks/ArabicKidsStories.txt'
file = open(filename,'rt')
text = file.read()
file.close()
import re
text = re.sub('([@A-Za-z0-9_]+)|[^\w\s]|#|http\S+', '', text) # cleaning up
print (text)
这是输出样本
تفقدت نظارتي حين استيقظت صباحا فلم أجدها في مكانها وبحثت عنها في كل مكان دون أن أعثر لها على أثر يا إلهي كيف سأخرج اليوم من البيت وأواجه النهار
وتناهى إلي من الخارج صوت نقار الخشب فوق جذع شجرة قريبة فأسرعت إلى الباب وفتحته وإذا ضوء النهار يبهر بصري فأغلقت عيني وهتفت أيها النقار أين أنت
وحاولت عبثا أن أفتح عيني وأنا أقول عفوا لا أستطيع أن أفتح عيني إن الضوء يعميني
فقال نقار الخشب هذا طبيعي يا عزيزتي فأنت لم تضعي نظارتك الشمسية
وتراجعت قليلا وقلت لقد اختفت نظارتي
فتساءل نقار الخشب اختفت ماذا تقولين
وبدل أن أجيبه قلت أرجوك ابحث لي عن نظارتي إنني لا أستطيع الخروج من دونها
ولاذ نقار الخشب لحظة ثم قال حسن ابقي أنت في البيت وسأبحث لك أنا عنها
ومضى نقار الخشب فأغلقت الباب والنافذة وقبعت في الظلام يا للغرابة إنني أرى في الليل أيضا أوه كلا إنني أحب النهار وأحبذ أن أطير دوما في النور مع رفاقي إنني لا أحب الليل ولا أريد أن يكون الظلام عالمي ترى أين اختفت هذه النظارة اللعينة
ـــــــــــــ
عاد نقار الخشب متعبا قبل المساء وقال لي آسف يا عزيزي سألت عن نظارتك الطيور جميعا لكن أحدا منهم لم يرها
فأطرقت برأسي برهة ثم قلت أشكرك يا عزيزي سأبحث عنها بنفسي ليلا
واتسعت عينا نقار الخشب دهشة وقال ليلا
وقبل أن أجيبه مضى على عجل وهو يقول عفوا صغاري ينتظرونني الآن إلى اللقاء
如有任何帮助,我们将不胜感激。 提前致谢。
据我了解你。你只想清理非阿拉伯字符(所以像 1 @ ? 这样的字符不会被删除)。
如果您想要删除另一个字符,只需将其添加到 charsotdelete.
如果您有任何问题,请告诉我。
charstodelete = 'azertyuiopqsdfghjklmwxcvbn'
filename = '/content/drive/MyDrive/Colab Notebooks/ArabicKidsStories.txt'
file = open(filename,'r')
text = file.read()
file.close()
output_text = ''
# It's all about this
for char in text:
if char in charstodelete or char in chartodelete.upper():
continue
else:
output_text += char
outputfile = open('/content/drive/MyDrive/Colab Notebooks/output.txt','w')
outputfile.write(output_text)
outputfile.close()
编辑: 如果您像您所说的那样是初学者,那么使用 Reg Ex 会有点痛苦。我建议使用这样的代码而不是 Reg Ex
您的正则表达式有两个问题。首先,“@”符号必须在[范围内],而不是在范围外。其次,您在 0 到 9 之间的破折号类型有误。这是更正后的表达式。有效:
'([@A-Za-z0-9_ـــــــــــــ]+)|[^\w\s]|#|http\S+'
试试这个:
text = re.sub('[a-zA-Z0-9_]|#|http\S+', '', text)
我只是删除了 [^\w\s] 并且它删除了所有字母数字下划线而不删除阿拉伯文本
我们可以通过字符代码找到阿拉伯字符,而不是尝试删除非阿拉伯字符。 Arabic unicode block 是来自 0x0600
- 0x06ff
.
这是查找所有单词的正则表达式:
import re
arabic_words = re.findall('[\u0600-\u06ff]+', input_text)
print(arabic_words)
这里的表达式是使用一个或多个字符范围(+
)。这应该给你一个单词列表。
如果上面的文字被安排成句子,您可以在适当地拆分文本以将句子放在一起之后进行类似的操作。
如果有人仍然无法清理阿拉伯语数据集,请参阅此文档enter link description here 以过滤掉 non-Arabic 个单词:
from pyarabic.araby import tokenize, is_arabicrange, strip_tashkeel
text = u"اسمٌ الكلبِ في اللغةِ الإنجليزية Dog واسمُ الحمارِ Donky"
tokenize(text, conditions=is_arabicrange, morphs=strip_tashkeel)
#result: ['اسم', 'الكلب', 'في', 'اللغة', 'الإنجليزية', 'واسم', 'الحمار']