Аннотация. Данная работа заключается в создании системы автоматической идентификации непрерывной арабской речи с большим словарным запасом в режиме одного динамика. Основная идея заключалась в сравнении расшифрованной последовательности арабской речи и эталонной модели, которую мы будем вычислять, опираясь на биективную связь между речью и ее фонетической транскрипцией. Генерируются два вектора: один представляет собой эталон, обобщающий вероятность появления арабских бифонем, а другой дает представление о последовательности речи, произносимой как правильное. На основе этих двух векторов мы можем идентифицировать фонемы, которые создают проблемы с произношением для говорящих, и другие фонемы, которые появляются на их месте. Исправление — это всего лишь игра с подстановками и проверками на принадлежность к арабскому лексикону. Полученные результаты были обнадеживающими, они позволили достичь скорости идентификации 97% обнаруженных ошибок.
АРАБСКИЙ ЯЗЫК
Арабский язык, на котором говорят 445 миллионов человек, занимает 4-е место по количеству носителей и 8-е место по количеству страниц, циркулирующих в Интернете [1, 2]. Благодаря своим морфологическим и синтаксическим свойствам арабский язык считается сложным для изучения в области автоматической языковой обработки [3, 4], плохое произношение увеличивает эту трудность. В автоматическом исправлении речи мы находим средство, облегчающее понимание арабской речи.
Основная система:
Нейронный алгоритм:
Система корпуса:
КОД ВЕКТОРОВ, ГЕНЕРИРУЮЩИХ:
#*********библиотеки*********
импортировать нлтк
из математического импорта *
импортировать numpy как np
ядро класса:
#**********fn уборки************
#@классметод
деф чистый(продолжение):
здоровый=””
для i в диапазоне (0, len (продолжение)):
если cont[i].isalpha() или cont[i]==” “:
здоровый=здоровый+продолжение[i]
вернуться (здоровым)
#**********fn стандартизации********
#@классметод
деф стенд (здоровый):
n=len(здоровый)
спли=””
si=””
список=[]
для я в диапазоне (0, n):
си=си+здоровый[я]
если здоров[i]=="ئ" или здоров[i]=="ى" или здоров[i]=="ء" или здоров[i]=="آ" или здоров[i]=="إ" :
si=si.replace(здоровый[i],'ا')
Элиф Здраво[i]==”ة”:
si=si.replace(здоровый[i],'ت')
Элиф Здраво[i]==”ؤ”:
si=si.replace(здоровый[i],'ا')
для i в диапазоне (0, len (si) -1):
если si[i]!=” “ и si[i+1:i+2]!=” “:
spli=spli+si[i:i+2]
list.insert (я, си [я: я + 2])
возврат (список)
#*********fn вероятности*********
#@классметод
def proba(list,compte,phonetique):
для i в диапазоне (0, len (список)):
если список[i]!=” “ :
вычислить[список[i]]+= 1
для valeur in compte:
phonetique[valeur]=compte[valeur]/len(список)
#************fn моделирования***************
#@классметод
деф моделирование (список):
k=0
модель = []
lettre1=["ي","و","ه","ن","م","ل","ك","ق","ف","غ","ع","ظ" ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ث», «ب», «ت», «ا»]
lettre1.sort()
#toutes les combainaisons возможны
для i в диапазоне (0, len (lettre1)):
для j в диапазоне (0, len (lettre1)):
model.insert(k,lettre1[i]+lettre1[j])
k+=1
возврат (модель)
#рассчитать рефмодель
#@классметод
def refmodel(модель,список,refphonetique,compteur):
для i в диапазоне (0, len (модель)):
для j в диапазоне (0, len (список)):
если модель[i]==список[j]:
компьютер[модель[i]]+= 1
для valeur in compteur:
refphonetique[valeur]=compteur[valeur]/len(список)
#********************нашел*************
#@классметод
определение найдено (модель, компьютер1, компьютер2):
G=[]
k=0
для valeur в модели:
если compteur1[valeur]!=0 и compteur2[valeur]==0:
G.insert(k,значение)
k+=1
возврат (Г)
#*********************очистка последнего списка***************
#@классметод
Def Realist (G):
s=””
список=[]
для i в диапазоне (0, len (G)):
s=s+G[i]
для i в диапазоне (0, len (s)):
list.insert (я, с [я: я + 1])
возврат (список)
#******************************событие******************
#@классметод
деф окк (список):
сравнить = {}.fromkeys (набор (список), 0)
для i в диапазоне (0, len (список)):
если список[i]!=” “ :
сравнить[список[i]]+= 1
возврат (сравните)
#*********************лакуна*******************
#@классметод
def lacune (сравните):
лак=[]
k=0
для valeur в сравнении:
если круглый (сравните [значение]/57) == 1:
lac.insert(k,valeur)
k+=1
возврат (лак)
Тест ядра Jupyter:
Сравнение двух моделей: