Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.11.2019, 19:02
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Как сделать транскрипцию
Добрый день. Нужно сделать транскрипцию с турецкого языка. Вот 2 textarea:
<textarea id="decoder-form__txt" name="input" placeholder="Ваш текст на турецком языке"></textarea>
<textarea id="decoder-form__result" placeholder="Как читается по-русски"></textarea>


Вот скрипт:
<script>
document.getElementById('decoder-form__txt').onkeyup = function() {
	var text = this.value;
	// Буква Ğ
	var tr = "İğ Eğ Öğ Üğ iğ eğ öğ üğ".split(/ +/g);
	var ru = "Ий Эй Ой Юй ий ей ой юй".split(/ +/g);
	for(var x = 0; x < tr.length; x++) {
		text = text.split(tr[x]).join(ru[x]);
	}
	
	// Сочетания Y с гласными
	var tr = "Ya Ye Yu Yü ya ye yu yü".split(/ +/g);
	var ru = "Я  Е  Ю  Ю  ья ье ю  ю".split(/ +/g);
	for(var x = 0; x < tr.length; x++) {
		text = text.split(tr[x]).join(ru[x]);
	}
	
	// Циркумфлекс
	var tr = "Gâ Kâ Lâ gâ kâ lâ Gû Kû Lû gû kû lû".split(/ +/g);
	var ru = "Гя Кя Ля гя кя ля Гю Кю Лю гю кю лю".split(/ +/g);
	for(var x = 0; x < tr.length; x++) {
		text = text.split(tr[x]).join(ru[x]);
	}
	
	// остальные буквы
	var tr = "A Â B C  Ç D E F G Ğ H I İ Î J K L M N O Ö P R S Ş T U Û Ü V Y Z a â b c  ç d e f g ğ h ı i î j k l m n o ö p r s ş t u û ü v y z".split(/ +/g);
	var ru = "А А Б ДЖ Ч Д Е Ф Г Г Х Ы И И Ж К Л М Н О Ё П Р С Ш Т У У Ю М Й З а а б дж ч д е ф г г х ы и и ж к л м н о ё п р с ш т у у ю м й з".split(/ +/g);
	for(var x = 0; x < tr.length; x++) {
		text = text.split(tr[x]).join(ru[x]);
	}
	document.getElementById('decoder-form__result').innerHTML = text;
}
</script>


Столкнулся с проблемой. При положении в начале слова, буква может иметь другой звук. В частности нужно:
1. В начале слова и после гласных ye → е, ya → я, yu (yü) → ю: Bahtiyar → Бахтияр, сейчас выводит Бахтиьяр
2. В начале слова и после гласной действуют правила e → э, ı → и, ö → о, ü → у

Прошу помощи.
Ответить с цитированием
  #2 (permalink)  
Старый 13.11.2019, 19:05
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

В общем-то всё работает, единственно нужно прописать правила для определения сочетаний букв в начале слова. При этом слова могут начинаться с большой и маленькой букв.
Ответить с цитированием
  #3 (permalink)  
Старый 13.11.2019, 19:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Янковиц
Bahtiyar → Бахтияр, сейчас выводит Бахтиьяр
так у вас ya это ья, строки 12 и 13, может надо убрать ь?
Ответить с цитированием
  #4 (permalink)  
Старый 13.11.2019, 19:44
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Нельзя, так как если сочетание букв в центре, то читается как "ья". С этим я разберусь, нужно именно перехватить начало слов. Тестирую:
Etmek - пока Етмек, а надо Этмек
Ответить с цитированием
  #5 (permalink)  
Старый 13.11.2019, 20:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Янковиц,
делайте через RegExp и обьект замены
Ответить с цитированием
  #6 (permalink)  
Старый 13.11.2019, 20:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Янковиц,
var obj  = {e : 'э'};//дописать в нижнем регистре
var reg = /(^|\s+)(e|r)/gim; // r заменить на нужые с|и|м|в|о|л|ы
var value = 'Etmek';
function fn(value)
{
   return value.replace(reg, function(a, b, c) {
var caps = c.charAt(0) != (c = c.toLowerCase()).charAt(0);
if(c in obj) c = obj[c];
if(caps) c = c.toUpperCase();
return b + c
})
}
value = fn(value);
alert(value);
value = 'etmek'
value = fn(value);
alert(value);

Последний раз редактировалось рони, 13.11.2019 в 21:09.
Ответить с цитированием
  #7 (permalink)  
Старый 13.11.2019, 20:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Янковиц,
var obj  = {ya : 'я'};//дописать в нижнем регистре
var reg = /(i|u|o)(ya|r)/gim; // r заменить на нужые символы
var value = 'Bahtiyar';
function fn(value)
{
   return value.replace(reg, function(a, b, c) {
var caps = c.charAt(0) != (c = c.toLowerCase()).charAt(0);
if(c in obj) c = obj[c];
if(caps) c = c.toUpperCase();
return b + c
})
}
value = fn(value);
alert(value);

Последний раз редактировалось рони, 13.11.2019 в 21:08.
Ответить с цитированием
  #8 (permalink)  
Старый 13.11.2019, 21:46
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

У вас получается, что düğün → дюйюн. Это в каком турецком так?

Сообщение от Янковиц
В начале слова и после гласной действуют правила e → э, ı → и, ö → о, ü → у
Ничего подобного в стандартном турецком языке нет!Например, ö не взаимозаменяема с o, сравните onu с önü, например тут — https://forvo.com/search/%C3%B6n%C3%BC/tr/

Сообщение от Янковиц
В начале слова и после гласной действуют правила... ı → и
Нет! Сравните ılık с ilikhttps://forvo.com/search/%C4%B1l%C4%B1k/tr/ т. е. ваш алгоритм из сообщения №1 показывает правильно — ılık [ылык], ilik [илик]

Последний раз редактировалось Malleys, 13.11.2019 в 21:55.
Ответить с цитированием
  #9 (permalink)  
Старый 13.11.2019, 22:11
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Эта ваша русская транскрипция имеет массу проблем, поскольку русский алфавит не способен передать все тонкости звучания турецкого языка. Используйте для транскрипции Международный Фонетический Алфавит (вы его видели, например, транскрипция в английском словаре) при помощи которого можно указать все тонкости произношения стандартного турецкого языка. Иначе это будет «лец ми спик фром май харт», только по турецки!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать калькулятор и с чего начать? A.P. Yellowman Общие вопросы Javascript 3 15.11.2013 21:32
Как сделать реакцию на изменение любого элемента формы. Mik Events/DOM/Window 3 28.07.2011 08:52
Как убрать hover? Либо как сделать стрелки статичными? krusty36 Элементы интерфейса 1 13.07.2011 09:20
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 09:06
Вопрос как сделать эту панельку Определённых размеров и свойств. jei jQuery 3 09.06.2009 19:14