Как определить ударение в слове?

У меня на сайте есть сервис, который позволяет искать рифмы к словам. В настоящее время поиск ведется по словарю Зализняка, который мне бы хотелось расширить. При помощи морфологического модуля от AOT я могу находить словоформы к слову (гуглить, гуглил, гуглили и т.д), причем этот модуль позволяет находить словоформы эвристически, если их нет в словаре, как в примере в скобках. Но вся проблема состоит в том, что в этом случае, модуль не определяет ударение в слове, а для поиска рифм, сами понимаете, это необходимо. Может кто подскажет как же все таки найти ударение? И возможно ли это вообще?
  • Вопрос задан
  • 7445 просмотров
Пригласить эксперта
Ответы на вопрос 4
ixSci
@ixSci
Так в словоформах тоже самое ударение, что и в источнике. Используйте его
Ответ написан
ivanra
@ivanra
Могу дать наводку.
В свое время была такая популярная библиотека padeg.dll, позволявшая склонять ФИО, должности и названия организаций. В слонении названий там применялся внутренний алгоритм, преобразующий исходный текст в строку звучности.
Возможно, это то, что вам надо.
Я в свое время конвертировал эту библиотеку их delphi в java, вот кусок кода оттуда:
strToSonic
	/**
	 * разрешенные символы
	 */
	private static final String legalChar = "абвгдежзийклмнопрстуфхцчшщъыьэюя";
	/**
	 * звучности символов
	 * 3 - гласные
	 * 2 - сонорные
	 * 1 - шумные
	 * ъ и ь не имеют звучности и обозначены символом ^
	 */
	private static char sonic(char index) {
		//       абвгдежзийклмнопрстуфхцчшщъыьэюя
		return ("31111311321222312113111111^3^333".charAt(index-'а'));
	}
	/**
	 * Формирует строку звучности, соответствующую строке символов
	 * @param value
	 * @return
	 */
	public static String strToSonic(String value) {
		StringBuilder result = new StringBuilder();
		// заменим ё на е
		value = value.toLowerCase().replace("ё", "е");	
		if (value.length()>0) 
			// для всех символов
			for (int i = 0; i < value.length(); i++) {			
				//if (legalChar.indexOf(value.charAt(i)) >= 0)	
				char ch = value.charAt(i);
				// если символ разрешенный
				if (legalChar.charAt(0)<=ch && ch<=legalChar.charAt(legalChar.length()-1)) {
					char test = sonic(ch);
					// и имеет звучность
					if (test != '^')
						// заменим его на звучность
						result.append(test);	
				}
			}
		return result.toString();
	}
Ответ написан
Yoh_Asakura
@Yoh_Asakura
Программист
На мой взгляд, у вас есть несколько вариантов:
1) Либо используете словарь, где вы указываете ударения. Для облегчения вашей работы, можете сделать небольшую онлайн форму и люди вам помогут с накоплением таких данных (как привлечь пользователей, отдельный вопрос), однако тут стоит задуматься о грамотности пользователей (можно проверить грамотность небольшим тестом и только потом предоставить возможность).
2) Либо оставляете эту идею.
Как мне кажется третьего не дано.
Ответ написан
@linguist
Программа расстановки ударений:

morpher.ru/accentizer

API: morpher.ru/ws3/#addstressmarks
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы