Я пытаюсь выполнить некоторое сопоставление регулярного выражения внутри файла, который содержит арабский текст из нескольких абзацев, но я не могу получить доступ к содержимому соответствующего объекта, мой код выглядит следующим образом:
import re
import pandas as pd
reg =r"^[\u0621-\u064A۰-۹0-9 ]+$"
dataset =pd.read_csv('test.txt',header=None,index_col=False)
for row in dataset.itertuples():
for pattern in enumerate(row,start=1):
pattern=row[1].split('\n')
print(pattern)
matches=re.finditer(reg,pattern,re.MULTILINE)
print(matches)
Я использую редактор spyder, который встроен в дистрибутив Anaconda для python 3.6.
Я пробовал функцию re.match
, lambda x: x[1]
, пытаясь захватить содержимое, matches.group()
, чтобы перебрать сегменты соответствия, str(pattern)
и многие другие решения, но ни одно из них не сработало так, как ожидалось.
В какой-то момент мне удалось узнать, находит ли оно совпадение, и это дало мне Нет хотя я проверил, что мой файл начинается с арабских букв !!
, с другой стороны, я легко могу выполнить задачу, когда простой текст напрямую передается поисковику в виде строки !!
import re
import pandas as pd
reg =r"^[\u0621-\u064A۰-۹0-9 ]+$"
test= ("هو الذي يصوركم في الأرحام كيف يشاء لا إله إلا هو العزيز الحكيم \n"
"ربنا إنك جامع الناس ليوم لا ريب فيه إن الله لا يخلف الميعاد \n"
"الصابرين والصادقين والقانتين والمنفقين والمستغفرين بالأسحار \n"
"0123456789 \n")
#Specifying encoding and text behavior
match=re.finditer(reg,test, re.MULTILINE)
print (match)
#looping over lines inside text
for matchNum, match in enumerate(match, start=1):
print("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
и вывод в порядке, как и ожидалось:
runfile('C:/Users/Al-Hammad/Documents/PhD/Second Year 2018-2019/Spring Semester 2018-2019/NLP/Assignments/Assignment 1/Arabic NLP.py', wdir='C:/Users/Al-Hammad/Documents/PhD/Second Year 2018-2019/Spring Semester 2018-2019/NLP/Assignments/Assignment 1')
<callable_iterator object at 0x000000000B285BA8>
Match 1 was found at 0-63: هو الذي يصوركم في الأرحام كيف يشاء لا إله إلا هو العزيز الحكيم
Match 2 was found at 64-124: ربنا إنك جامع الناس ليوم لا ريب فيه إن الله لا يخلف الميعاد
Match 3 was found at 125-185: الصابرين والصادقين والقانتين والمنفقين والمستغفرين بالأسحار
Match 4 was found at 186-197: 0123456789
вывод первого кода должен совпадать с найденным в тестовом файле, это может быть что-то вроде: ['العربية لغة رسمية في كل دول الوطن العربي إضافة إلى كونها لغة رسمية في تشاد وإريتريا وإسرائيل. وهي إحدى اللغات الرسمية الست في منظمة الأمم المتحدة، ويُحتفل باليوم العالمي للغة العربية في 18 ديسمبر كذكرى اعتماد العربية بين لغات العمل في الأمم المتحدة.[7]']
но это дает мне эту ошибку и не переходит к другим параграфам:
runfile('C:/Users/Al-Hammad/Documents/PhD/Second Year 2018-2019/Spring Semester 2018-2019/NLP/Assignments/Assignment 1/1-4-2019.py', wdir='C:/Users/Al-Hammad/Documents/PhD/Second Year 2018-2019/Spring Semester 2018-2019/NLP/Assignments/Assignment 1')
['اللُّغَة العَرَبِيّة هي أكثر اللغات تحدثاً ونطقاً ضمن مجموعة اللغات السامية، وإحدى أكثر اللغات انتشاراً في العالم، يتحدثها أكثر من 467 مليون نسمة،[4](1) ويتوزع متحدثوها في الوطن العربي، بالإضافة إلى العديد من المناطق الأخرى المجاورة كالأحواز وتركيا وتشاد ومالي والسنغال وإرتيريا وإثيوبيا وجنوب السودان وإيران. اللغة العربية ذات أهمية قصوى لدى المسلمين، فهي عندهم لغة مقدسة إذ أنها لغة القرآن، وهي لغة الصلاة وأساسية في القيام بالعديد من العبادات والشعائر الإسلامية.[5][6]']
Traceback (most recent call last):
File "<ipython-input-41-3249da970121>", line 1, in <module>
runfile('C:/Users/Al-Hammad/Documents/PhD/Second Year 2018-2019/Spring Semester 2018-2019/NLP/Assignments/Assignment 1/1-4-2019.py', wdir='C:/Users/Al-Hammad/Documents/PhD/Second Year 2018-2019/Spring Semester 2018-2019/NLP/Assignments/Assignment 1')
File "C:\Users\Al-Hammad\Anaconda3\envs\py36\lib\site-packages\spyder\utils\site\sitecustomize.py", line 692, in runfile
execfile(filename, namespace)
File "C:\Users\Al-Hammad\Anaconda3\envs\py36\lib\site-packages\spyder\utils\site\sitecustomize.py", line 101, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/Al-Hammad/Documents/PhD/Second Year 2018-2019/Spring Semester 2018-2019/NLP/Assignments/Assignment 1/1-4-2019.py", line 21, in <module>
matches=re.finditer(reg,pattern,re.MULTILINE)
File "C:\Users\Al-Hammad\Anaconda3\envs\py36\lib\re.py", line 229, in finditer
return _compile(pattern, flags).finditer(string)
TypeError: expected string or bytes-like object
Может кто-нибудь сказать, пожалуйста, что я здесь делаю не так?