LINUX.ORG.RU

mclient — оболочка для онлайн-словаря multitran.ru

 , , ,


6

4

Появилась программа mclient, которая ориентируется прежде всего на профессиональных переводчиков, но может быть полезна и изучающим иностранные языки. Программа соединяется с сайтом multitran.ru, популярным лингвистическим ресурсом, и выдает переводы для следующих языков: английский, немецкий, испанский, французский, нидерландский, итальянский, латышский, эстонский, калмыцкий, африкаанс, эсперанто.

Направление перевода, число и падеж автоматически определяются сайтом.

В отличие от популярных оболочек для словарей StarDict, GoldenDict и пр., mclient не использует Webkit для отображения полученной страницы, а анализирует полученный перевод, разбивает его на отдельные варианты перевода для более удобной работы с клавиатуры.

По интерфейсу mclient напоминает платную оболочку для оффлайн-словаря Мультитран, и фактически представляет собой бесплатную ее замену, требующую, однако, доступа к Интернету.

Среди особенностей программы:

  • Переключение между вариантами перевода с помощью клавиатуры.
  • Быстрый перевод выбранного термина (Enter).
  • Быстрое копирование в буфер обмена (Ctrl+Enter).
  • Навигация по словарям и вариантами перевода с помощью стрелок, (Control-)Home, (Control-)End, и т.д.
  • Переключение между строкой поиска и областью терминов - F6 (см. руководство).
  • Режим перевода буфера обмена.
  • История.

Программа распространяется на условиях GPL v.3. Доступны бинарные сборки под Linux и Windows.

>>> Проект на github

anonymous

Проверено: fallout4all ()
Последнее исправление: cetjs2 (всего исправлений: 3)

скрины конечно крутые

msgxx
()
Ответ на: комментарий от GladAlex

Смотреть то стоит? Или можно сразу мимо проходить?

mandala ★★★★★
()

о хоспади, что там за помойка в репозитории...

Выкинь всё кроме readme и директории sources.

invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 1)

Идея хорошая. Реализацию бы подтянуть.

https://github.com/sklprogs/mclient/blob/master/2015-04-15/sources/mes_ru.py

В 21 веке так не переводят. см. po/gettext

tcl...

python3...

if sys_type=='win':
	sysdiv='\\'
else:
	sysdiv='/'
...
def prepare_str(line,Extended=False):
	cur_func=sys._getframe().f_code.co_name
	line=line.lower()
	line=line.replace('ё','е')
	line=line.replace('"','')
	line=line.replace('“','')
	line=line.replace('”','')
	line=line.replace('«','')
	line=line.replace('»','')
	line=line.replace('(','')
	line=line.replace(')','')
	line=line.replace('[','')
	line=line.replace(']','')
	line=line.replace('{','')
	line=line.replace('}','')
	line=line.replace('*','')

Пилить и пилить, но для начала стоит навести порядок в репозитории. Где искать main.cfg? Либо положить в sources, а лучше сделать так, чтобы без конфига тоже работало.

RPG
()
Последнее исправление: RPG (всего исправлений: 1)

Код страшный, конечно. Я бы посоветовал хотя бы регэкспы побольше использовать - пусть это и плохой стиль для html, но оно будет всё равно компактнее и понятнее текущего подхода. Вёрстка мультитрана кривая и жуткая, но можно попробовать сделать всё покрасивее.

risenshnobel ★★★
()
	for i in range(len(text)):
		if text[i]==dlb:
			dlbs+=[i]
			# Проверка защищает от двойных dlb и пробелов
			if word!='':
				words.append(word)
			word=''
			nls+=[len(words)]
			k=-1
		elif text[i]==' ':
			spaces+=[i]
			spaces_sl+=[k]
			if word!='':
				words.append(word)
			word=''
		else:
			word+=text[i]
			if len(word)==1:
				first_syms+=[i]
				first_syms_sl+=[k]
				if word.isalpha():			
					first_syms_nf+=[i]
					first_syms_nf_sl+=[k]
				elif i+1 < len(text):
					delta=i+1
					kdelta=k+1
					while delta < len(text) and not text[delta].isalpha():
						delta+=1
						kdelta+=1
					first_syms_nf+=[delta]
					first_syms_nf_sl+=[kdelta]
					log(cur_func,lev_info,mes.first_syms_cor % (i,delta))
				else:
					first_syms_nf+=[i]
					first_syms_nf_sl+=[k]
					log(cur_func,lev_warn,mes.first_syms_failure)
		k+=1

Автор, вы так string.split делаете?

И к этому тоже комментарий не помешает:

	for i in range(words_num):
		words_nf.append(prepare_str(words[i],Extended=True))
		last_syms+=[first_syms[i]+len(words[i])-1]
		last_syms_nf+=[first_syms_nf[i]+len(words_nf[i])-1]
		last_syms_sl+=[first_syms_sl[i]+len(words[i])-1]
		last_syms_nf_sl+=[first_syms_nf_sl[i]+len(words_nf[i])-1]
		if i in nls:
			sent_no+=1
		sent_nos+=[sent_no]

...

	sents=[]
	sents_nf=[]
	old_sent_no=-1
	cur_sent=[]
	cur_sent_nf=[]
	cur_pos=[]
	cur_pos_nf=[]
	cur_pos_sl=[]
	cur_pos_nf_sl=[]
	for i in range(len(sent_nos)):
		sent_no=sent_nos[i]
		if sent_no!=old_sent_no:
			if cur_sent!=[]:
				sents+=[cur_sent]
			if cur_sent_nf!=[]:
				sents_nf+=[cur_sent_nf]
			if cur_pos!=[]:
				sents_pos+=[cur_pos]
			if cur_pos_nf!=[]:
				sents_pos_nf+=[cur_pos_nf]
			if cur_pos_sl!=[]:
				sents_pos_sl+=[cur_pos_sl]
			if cur_pos_nf_sl!=[]:
				sents_pos_nf_sl+=[cur_pos_nf_sl]
			cur_sent=[]
			cur_sent_nf=[]
			cur_pos=[]
			cur_pos_nf=[]
			cur_pos_sl=[]
			cur_pos_nf_sl=[]
			old_sent_no=sent_no
		cur_sent+=[words[i]]
		cur_sent_nf+=[words_nf[i]]
		cur_pos+=[[first_syms[i],last_syms[i]]]
		cur_pos_sl+=[[first_syms_sl[i],last_syms_sl[i]]]
		cur_pos_nf+=[[first_syms_nf[i],last_syms_nf[i]]]
		cur_pos_nf_sl+=[[first_syms_nf_sl[i],last_syms_nf_sl[i]]]
RPG
()

Для парсинга html существует замечательная библиотека nokogiri, частенько её пользую в ruby, на питон она тоже была.

UPD: возможно ошибся, что-то не нахожу её для питона

GanGSISoft ★★
()
Последнее исправление: GanGSISoft (всего исправлений: 3)

Можно ещё туда официально распространяемый демо-словарь мультитрана для онлайна подключить.

dn2010 ★★★★★
()

Спасибо тебе, товарищ Анонимус!

А подскажи, а каково отношение Мультитрана к твоей программе.

В смысле, они же, вроде, за счёт рекламы монетизируются, поэтому совсем их лишать HTML'я (и приложенного к нему JS) вроде как нечестно. С другой стороны, их JS таков, что GoldenDict от него пучит (или пучило некоторое время назад).

Или ты не заморачивался?

AlexM ★★★★★
()
Ответ на: комментарий от prizident

Некоторое время назад, когда я интересовался вопросом, попытка использовать Мультитран в «режиме веб-сайта» в GD приводила к тому, что GD исполнял JS в окне перевода (у него же там WebKit), и JS первым дело очищал весь контекст, то есть, другие словари оказывались недоступными.

Совсем отказываться от их HTML и JS - это лишать их денег за рекламу, что не есть гуд. С другой стороны, исполнять их JS тоже крайне неудобно. Поэтому я отключил у себя Мультитран в GD и хожу туда браузером. Из-за лени, ясен пень.

AlexM ★★★★★
()
Ответ на: комментарий от prizident

goldendict/stardict и пр. вещи, конечно, хорошие, но я хотел сделать управление с клавиатуры и выделение отдельных терминов, как это сделано в проприетарной оболочке Мультитрана. Большинство имеющихся оболочек просто загружают статью с сайта через webkit, но не анализируют ее.

anonymous
()
Ответ на: комментарий от invy

Освою бранчи/релизы - можно будет выкинуть.

anonymous
()
Ответ на: комментарий от RPG

Где искать main.cfg?

В любой бинарной сборке - linux.7z или windows.7z.

Либо положить в sources, а лучше сделать так, чтобы без конфига тоже работало.

Самая первая версия работает без конфига, но люди стали жаловаться, что им не нравятся цвета, да и окно всегда было на весь экран. А делать меню настроек, которое только временно помнит настройки - муторно и для меня, и для пользователя.

anonymous
()
Ответ на: комментарий от RPG

Что предлагаете по поводу определения ОС? Использовать жестко заданное значение для системного разделителя ('/','\') - самый примитивный вариант, но у меня случались ситуации, когда другие варианты могут не сработать или не подходят. То же самое при автоматическом определении home и tmp - при запуске с виндового сервера home находился локальный с диска C:\, а не серверный каталог, который был выделен под документы.

Что вам не нравится в коде с replace? Слишком длинно?

anonymous
()
Ответ на: комментарий от actionless

ололо. это как бранчи Subversion, только еще тупее...

t184256 ★★★★★
()
Ответ на: комментарий от risenshnobel

Дело в том, что при анализе текста я запоминаю позиции определенных фрагментов - это поможет при их выделении. А регэкспы могут сломать результат анализа позиций, и не удастся определить, где тут начало термина (он может состоять из нескольких слов), и где конец.

anonymous
()
Ответ на: комментарий от RPG

Нет, здесь идет анализ начала и конца слов вместе с пунктуацией и без, и собирается также другая информация. Это полезно для выделения слов. def analyse_text уже используется в других проектах, поэтому специально корежить ее не стал.

anonymous
()
Ответ на: комментарий от GanGSISoft

Я пытался использовать BeautifulSoup, но на верстке Мультитрана он не всегда срабатывает. Кроме того, мне нужно точно знать позиции тэгов, потому что они разграничивают термины. Помимо этого, тэги в Мультитране частенько не закрываются, что усложняет их прогон в анализаторах.

anonymous
()
Ответ на: комментарий от anonymous

Поддерживаются все языки, предоставленные сайтом. Японского словаря на сайте пока нет.

anonymous
()
Ответ на: комментарий от anonymous

Просто я писал когда-то давно консольный клиент к мультитрану (в рамках обучения go), и у меня вроде бы всё получалось именно регэкспами, в том числе и разбиение слов, шаманства хватало, но кода вышло не так и много, строк 300 на парсинг и преобразование во внутренние структуры (слово, перевод и т.д.).

Собранный бинарник и сейчас работает, а вот исходники так сходу не найду, надо посмотреть будет как-нибудь.

risenshnobel ★★★
()
Ответ на: комментарий от dn2010

Имеется в виду подключить их коммерческие оффлайн-словари? Единственный плюс в этом будет только, если сайт уйдет в оффлайн. Онлайн-версия всегда новее, потому что термины добавляются пользователями. А коммерческие словари - дело муторное, и их использование потенциально нарушает EULA.

anonymous
()
Ответ на: комментарий от AlexM

Я свою программу на их сайте не светил - вдруг еще html-код изменят. Но вообще, есть и другие оболочки, правда, на основе браузера, и вроде как хозяева Мультитрана были не против. А что касается рекламы - ну это как наличие adblock: с одной стороны, создатель рекламы может и пропустить клиента, а с другой стороны, каждый раз видеть баннер, мерчающий раз в секунду, тоже не хочется. Да и даже при наличии adblock меньше рекламы в Интернете не стало.

anonymous
()
Ответ на: комментарий от anonymous

Они публиковали выдернутый из словаря миллион самых распространённых слов, http://multitran.sourceforge.net/, полезно оно бывает, если сайт или интернеты не работают, а посмотреть надо сейчас и срочно.

dn2010 ★★★★★
()

Ну и вид. Использую сам сайт мультитрана, хватает за уши.

Deleted
()
Ответ на: комментарий от tranceGemini

По датам разнесены релизы, а не коммиты. В чем проблема-то?

anonymous
()

В отличие от популярных оболочек для словарей StarDict, GoldenDict и пр.

... эта хрень заставляет ставить персональную оболочку для мультитрана вместо использования универсальной. Жрите сами.

massimus ★★★
()
Ответ на: комментарий от massimus

Что-то я обосрал, но не обосновал :)
Смысл в чём: в реальной работе без толковых en-en словарей не обойтись, «мультик» велик, но не бесконечен.

massimus ★★★
()
Ответ на: комментарий от massimus

Ты, видимо, не понял, зачем нужна другая оболочка. Читай еще раз тред.

«мультик» велик, но не бесконечен.

Напиши свои правила для анализа других сайтов.

Deleted
()
Ответ на: комментарий от Deleted

Напиши свои правила для анализа других сайтов.

И в этом как раз тупик этой идеи.
Когда нужно много сайтов, нужно много правил. А в голдендикт тот же можно прицепить почти любой сайт, в котором есть поле ввода, и искать сразу по всем. И сделать может это любой человек, а написать правила анализа — нет.
Я не спорю, что у этой оболочки есть преимущества, но целевой группой пользователей в топике называются переводчики, а не программисты. Я с ними работаю вплотную и истинно говорю: каждый пользуется ещё ворохом онлайн-словарей помимо мультитрана, в основном одноязычных толковых. И каждый из них не умеет писать правила анализа этих сайтов.
Наверняка есть люди, которые пользуются только мультиком, и им эта оболочка непременно облегчит жизнь. Но не переводчикам.

massimus ★★★
()
Ответ на: комментарий от massimus

Наверняка есть люди, которые пользуются только мультиком, и им эта оболочка непременно облегчит жизнь. Но не переводчикам.

Я сам профессиональный переводчик, и эту программу прежде всего для себя и пишу. GoldenDict и пр., это, конечно, хорошо, но если вы хотя бы прочитали описание и взглянули на скриншот, вы, возможно, поняли бы основную фишку: быстрый перевод признаков (Enter на выделении), быстрое копирование (Ctrl+Enter). GoldenDict так умеет (по крайней мере, работает ли с Мультитраном)?

Вы сами указали, что переводчики, помимо Мультитрана, используют и другие словари (хотя лично мне и Мультитрана хватает). Что мешает использовать мою программу наравне с другими? Откуда сразу фанатизм «если у меня есть X, зачем мне Y» (особенно, с учетом того, что программы работают принципиально по-разному)?

mclient - это не замена таким гигантам как Stardict/GoldenDict, да и не задумывался в качестве их замены (да и зачем?). Он заточен под Мультитран, потому что иначе, без анализа тэгов, границы терминов не определить, соответственно, и никаких преимуществ перед *dict не будет.

anonymous
()
Ответ на: комментарий от anonymous

но если вы хотя бы прочитали описание и взглянули на скриншот

Описание добросовестно читал дважды, скриншот смотрел, но, видимо, надо будет скачать и попользоваться, чтобы более предметно разговаривать. То, что из сайта выколупывается только нужная информация — просто замечательно. Но на этом пока заканчивается то, что мне показалось бы преимуществом. Всякие прыжки хоткеями по переведённым терминам мне кажутся пустой тратой времени: пока до нужного доскачешь и скопируешь, быстрее набрать вручную или тупо выделить мышью сразу нужное и скопировать. Остальное есть в любой вменяемой словарной оболочке.

GoldenDict так умеет (по крайней мере, работает ли с Мультитраном)?

Быстрый перевод — это который Enter на термине в результатах запускает его перевод? Умеет, но по даблклику, включается в настройках. Лишний раз тянуться к мыши, конечно, но не смертельно. С Мультитраном да, засада, пытается ссылки во внешнем браузере открывать, приходится выделить, чтобы перевести. А ещё гаже то, что найденные фразы приходится в любом случае в браузере открывать, ибо они в мультике отдельной страницей. Про быстрое копирование не въехал, чем Ctrl+Enter быстрее Ctrl+C или буфера выделения?

Что мешает использовать мою программу наравне с другими?

Лишняя сущность, лишнее окно. Держать под каждый словарь спецоболочку неудобно, а вот в одном месте вести поиск по куче словарей — очень удобно. Хоть вы и говорите, что программа работает принципиально по-другому, но основную задачу-то решает ту же: получить переводы терминов.

Кстати, идея! В голдене, говорят, есть такая штука:

Ability to run arbitrary external programs for audio playback or content generation (text-to-speech, man pages etc) (use the latest Git version for this)

Интересно, реально ли к нему mclient прикрутить? С мклиента контент, с голдена оболочка, очень даже неплохо на мой вкус.

massimus ★★★
()
Ответ на: комментарий от massimus

Всякие прыжки хоткеями по переведённым терминам мне кажутся пустой тратой времени: пока до нужного доскачешь и скопируешь,

Вам кажется, а я уже опробовал. Для начала по тексту нужно пробежаться глазами. Можно как раз в это время жать стрелки. Лично я читаю переводы из всех предметных областей, а не просто ищу конкретную. Перескок на следующий словарь с помощью стрелки вниз в любом случае будет сделан быстрее, чем глаза успеют дочитать.

быстрее набрать вручную или тупо выделить мышью сразу нужное и скопировать.

Если это делать раз по 30 на дню, то становится неудобно. Кроме того, поддержка мыши тоже планируется.

anonymous
()
Ответ на: комментарий от massimus

Умеет, но по даблклику, включается в настройках.

Даблклик, как я понимаю, распространяется только на 1 слово из словаря?

Про быстрое копирование не въехал, чем Ctrl+Enter быстрее Ctrl+C или буфера выделения?

Чтобы сделать Ctrl+C, надо сначала выделить текст. mclient сам выделяет текст, находя его границы. После перехода на нужное словосочетание и нажатия Ctrl+Enter, словосочетание скопируется, а окно свернется, показывая приложение для вставки. В общем, если вы не работали с проприетарной оболочкой для Мультитрана, скачайте ее и попробуйте. Логика та же.

anonymous
()
Ответ на: комментарий от massimus

Интересно, реально ли к нему mclient прикрутить? С мклиента контент, с голдена оболочка, очень даже неплохо на мой вкус.

Да все возможно, но получится монстр-франкенштейн: webkit со стороны GoldenDict и предметный анализ каждого конкретного сайта. У GoldenDict и пр. вообще весьма низкие возможности самостоятельного анализа текста, потому что... webkit!

anonymous
()

(Автор) Регулярно отслеживать тред не буду, пишите на почту: skl.progs at gmail dot com.

anonymous
()

Реорганизовал репозиторий. Добавил управление мышью ( massimus).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.