crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Алгоритм адаптации Qt документации...
ViGOur
  опции профиля:
сообщение 20.12.2007, 14:32
Сообщение #1


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Возьмем к примеру класс QString, по идее основная масса исправлений приходится на описание функций.

Возникает вопрос, какой алгоритм однозначно без ошибок поменяет английское описание на русское, когда есть и то и то, но русское немного устаревшее, вроде того, что меньше функций. Или добавлено совсем чуть-чуть дополнительного текста.

Разметка примерно такая:
Английский вариант
<h3 class="fn"><a name="QString"></a>QString::QString ()</h3>
<p>Constructs a null string. Null strings are also empty.</p>
<p>See also <a href="qstring.php#isEmpty">isEmpty</a>().</p>

<h3 class="fn"><a name="QString-2"></a>QString::QString ( const <a href="qchar.php">QChar</a> * <i>unicode</i>, int <i>size</i> )</h3>
<p>Constructs a string initialized with the first <i>size</i> characters of the <a href="qchar.php">QChar</a> array <i>unicode</i>.</p>
<p><a href="qstring.php">QString</a> makes a deep copy of the string data.</p>

<h3 class="fn"><a name="QString-3"></a>QString::QString ( <a href="qchar.php">QChar</a> <i>ch</i> )</h3>
<p>Constructs a string of size 1 containing the character <i>ch</i>.</p>


Русский вариант:
<h3 class="fn"><a name="QString"></a>QString::QString ()</h3>
<p>Создает нулевую строку. Нулевая строка всегда пустая.</p>
<p>См. также <a href="qstring.php#isEmpty">isEmpty</a>().</p>

<h3 class="fn"><a name="QString-2"></a>QString::QString ( const <a href="qchar.php">QChar</a> * <i>unicode</i>, int <i>size</i> )</h3>
<p>Создает строку инициализированную первыми <i>size</i> символов массива <a href="qchar.php">QChar</a> <i>unicode</i>.</p>
<p><a href="qstring.html">QString</a> производит глубокое копирование информации строки.</p>

<h3 class="fn"><a name="QString-3"></a>QString::QString ( <a href="qchar.php">QChar</a> <i>ch</i> )</h3>
<p>Создает строку длиной 1 содержащую символ <i>ch</i>.</p>


Сообщение отредактировал ViGOur - 20.12.2007, 14:34
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 20.12.2007, 18:24
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Как вариант, можно взять старые английскую версию и русскую версии, распарсить их по тегам, и вогнать в QMap<QString, QString>.
Ключем будет английский вариант, а значением русский.

После чего читаем новую версию, парсим на лету и сравниваем с ключами в QMap, если совпадает, то английскую строку на русскую.

Это как вариант, но хотелось бы еще рассматреть какие-нибудь варианты. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 21.12.2007, 8:24
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Я бы нарисовал на python-е. :)
Документы разбираются например BeautifulSoup, потом идёшь по деревам параллельно и перекидываешь строки из русского в английское. Как маркеры синхронизации использовать текст в тагах <h3 class="fn"> и аналогичных.

Оставь ссылку на несколько русских файлов - на выходных помучаю. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 21.12.2007, 8:53
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


От akorchagin перевод Qt 4.1.0.

Но вся проблема в том, что как я посмотрел, например в том же QString в Qt 4.3.2 по сравнению с 4.1.0 описание явно отличается, явно изменилось описание, вместо последовательного разбито на части, некоторые строки вообще убраны, ну и конечно же добавлено много функций.

Поэтому я думаю, что обычными маркерами не отделаться...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Admin
  опции профиля:
сообщение 21.12.2007, 9:05
Сообщение #5


Администратор
****

Группа: Администратор
Сообщений: 646
Регистрация: 9.10.2007
Из: crossplatform.ru
Пользователь №: 1

Спасибо сказали: 17 раз(а)




Репутация:   2  


[OFFTOP]
Цитата(Tonal @ 21.12.2007, 8:24) *
Документы разбираются например BeautifulSoup
Еще документация для перевода, сколько же ее... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 22.12.2007, 18:28
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Цитата(Admin @ 21.12.2007, 12:05) *
[OFFTOP]
Цитата(Tonal @ 21.12.2007, 8:24) *
Документы разбираются например BeautifulSoup
Еще документация для перевода, сколько же ее... :)

Надо просто свою писать, и сразу на русском. :-)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 22.12.2007, 18:32
Сообщение #7


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(Tonal @ 22.12.2007, 18:28) *
Надо просто свою писать, и сразу на русском. :-)
Возможно, но прежде чем писать свою неплохо было бы перевести и хорошо написанную, правда на английском. :)

Хотя у меня есть идея написать документацию в примерах по Qt, подробно описывающию применение всех функций каждого из классов.
Но это пока идея, и пока не знаю, хорошая или нет. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 2.1.2008, 21:41
Сообщение #8


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Тема еще пока актуальна!

На даный момент бодаюсь с обработкой регулярными выражениями, и при сдвиге в форматитировании немного в сторону результат получается не тот, что ожидался, может быть это и из-за того, что я плохо знаю регулярные выражения. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 4.1.2008, 23:54
Сообщение #9


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Не надо регекспы. Там все файлы в формате xhtml - нормально парсяться любым xml парсером.
Все описания функции/свойства находяться на одном уровне.
Всегда начинаются с тага <h3 class="fn">
его первый ребёнок - пустой якорь, например <a name="checkable-prop"></a>
Дальше идём по братьям до следующего подобного <h3 class="fn">, или до пустого <p />, за которым сразу <address>.

Вот код на python для выдёргивания:
from BeautifulSoup import BeautifulStoneSoup, Tag

def get_soup(f_name):
  content = file(f_name).read().replace(
    '<?xml version="1.0" encoding="iso-8859-1"?>',
    '<?xml version="1.0" encoding="windows-1251"?>', 1)
  return BeautifulStoneSoup(content)
            
def get_all_func(soup):
  def is_func(tag):
    return (
      isinstance(tag, Tag) and tag.name == 'h3' and
      dict(tag.attrs).get('class') == 'fn')

  def is_stop(tag):
    if not (isinstance(tag, Tag) and tag.name == 'p'):
      return False
    child = tag.contents[0]
    return isinstance(child, Tag) and child.name == 'address'

  funcs = []
  for tag in soup.findAll('h3', **{'class': 'fn'}):
    tags = [tag]
    funcs.append((tag.a['name'], tags))
    tag = tag.nextSibling
    while tag and not (is_func(tag) or is_stop(tag)):
      tags.append(tag)
      tag = tag.nextSibling
  return funcs

def test()
  funcs = get_all_func(get_soup(r'4.1.0\qabstractbutton.html'))
  for func in funcs:
    print '@', func[0]
    for dscr in func[1]:
      print dscr

test()

Собственно, осталось нарисовать алгоритм слияния - он тоже довольно прост...

Но есть одно маленькое но:
Что, если в новой версии поменялось описание функции, или, например её аргументы?
Тогда, при пакетной конвертации оно неглядя замениться старым вариантом, что не есть хорошо.

Напрашивается полуавтоматный конвертор, который бы давал возможность просматривать описания перев их заменой и даже править по ходу.

Мне кажется, вполне можне нарисовать на основе приведённого алгоритма
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 5.1.2008, 1:39
Сообщение #10


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(Tonal @ 4.1.2008, 23:54) *
Что, если в новой версии поменялось описание функции, или, например её аргументы?
Тогда, при пакетной конвертации оно неглядя замениться старым вариантом, что не есть хорошо.
Это ерунда, так как по английскому и русскому оригиналам делается некий словарик, который загоняется в QMap, ключем является английское предложение, значением русское, если ключ и значение одинаковы, то это или название функции или не переведенный фрагмент, следовательно не учитывается. После чего читается новый документ, который нужно перевести, и при парсинге идет сверка с полученным ранее "словариком", и в случае совпадения ключей замена их английского значения на русское.

Но в данном подходе тоже есть но, так как кажется в описании класса QString было некое изменение, что-то вроде:
было: variable - descriprion
стало: variable is descriprion
в следствии чего не переведенный фрагмент. :(

Подумываю правильным ли будет в этом случае разбивать на слова и если будет например 90% сходство английского варинта (ключей), то менять его на русский.

Честно говоря не подумал о XML парсинге попробую, спасибо... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 9.12.2021, 7:09