Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

Сутнісний словник

with 9 comments

Вікіпедія – не словник. Правило вікіпедії.

Ігноруйте усі правила. Ще одне правило.

Я вже напевне кілька разів про це згадував, але сьогодні таки оформлю окремою заміткою. Проблема звичайних двомовних словників в тому, що вони намагаються встановити зв’язки між словами в різних мовах. А це досить важко зробити, і встановлюється зв’язок багато до багато. Перекладачу доводиться вибирати одне з можливих слів, як варіант перекладу.

Схема двомовного словника

Статті вікіпедії містять інформацію не про слова. Вони містять інформацію про певні сутності, якщо це так можна назвати. Назва сутності міститься в заголовку статті. Окрім цього є альтернативні назви, з яких створюють перенаправлення. Маємо множину назв для однієї сутності, серед яких можна виділити канонічну – назву статті, на яку й посилаються всі інші.

Окрім цього, стаття містить посилання на всі статті іншими мовами, а ті в свою чергу так само. Загалом, це можна представити такою схемою:

Схема вікісловника

Якщо ми здійснюємо переклад, то ми шукаємо канонічну назву за даною, потім дивимось її зв’язок з канонічною назвою в іншій мові, і переклад загалом завершений. Вибирати з якихось варіантів перекладу не потрібно, бо зв’язок між сутностями 1:1.

В мене є Англійсько-Український словник, в якому 151993 пар канонічних форм, і 514515 перенаправлень. В даний момент можна скачати з Dropbox (~30Мб). (Якщо хтось порадить якийсь кращий хостинг файлів (бажано, щоб він був “вічний”, як оця стаття), то буду дуже вдячний).

Всередині архіву знаходяться власне два словники, і файлик getdict.py, який демонструє роботу з ними:

#! coding=utf8 
import filedict 
 
iwikis = filedict.FileDict("iwikis") # Підключаємось до інтервікі 
redirs = filedict.FileDict("enredirects") # Підключаємось до перенаправлень 
 
def trans(w): 
        if w in redirs: # Якщо це перенаправлення - проходимо 
                a = redirs[w]  
        else: 
                a = w 
        if a in iwikis: # І перекладаємо 
                return iwikis[a] 
 
 
if __name__=="__main__": 
        print u"Привіт, [["+trans("World")+"]]!" 

filedict – модуль з персистентним аналогом класу dictinary. Я про нього вже писав.

Далі, я можу розповісти як це було складено.

Інтервікі я брав парсячи XML-дамп yкраїнської вікіпедії. (Знаходиться приблизно тут: http://download.wikimedia.org/ukwiki/20110328/ukwiki-20110328-pages-articles.xml.bz2) Для великих файлів єдиним варіантом є парсер SAX. Як я його написав – вже не пам’ятаю. Суть в тому, що код заплутаний, і одноразовий, знаходиться в файлі makedicts.py.

Список перенаправлень англійської вікіпедії я взяв з проекту Freebase Wikipedia Extraction. Шукаємо тут останню версію файлу, що містить в назві слово “redirects”. На даний момент це сімдесятиметровий архів, що містить всередині TSV-файл. В кожному його рядку міститься якийсь ідентифікатор, назва перенаправлення, і назва статті на яку перенаправляють. Були проблеми з юнікодом, але в документації до модуля tsv було пояснення як їх уникнути. Там якийсь заплутаний код з кодеками.

Враховуючи те, що перенаправлень англійська вікіпедія має близько 5 мільйонів, я вирішив додавати в словник лише ті, які посилаються на статті що мають український відповідник, що зменшило розмір словника в 10 разів.

Advertisements

Written by bunyk

Квітень 6, 2011 at 21:26

Відповідей: 9

Subscribe to comments with RSS.

  1. impressive!

    jtimv

    Квітень 6, 2011 at 21:35

    • Хех. Яке щастя, що курсову ніхто напевне читати не буде, і не змусить мене переписувати всі пости в “науковому стилі”.

      bunyk

      Квітень 6, 2011 at 21:37

  2. Як я розумію, це свого роду винахід. Однак треба щоб оцінили науковці. Спробуйте зконтактуватися з Амакухою.

    Юрій Пероганич

    Квітень 7, 2011 at 20:22

    • Ну, враховуючи що “Винаходом може бути пристрій, спосіб, речовини, застосування пристроїв за новим раніше невідомим призначенням, …”, то може і винахід. З іншого боку, не думаю що я один таким “словником” вже давно користуюся. І коли хтось придумував інтервікі, то теж напевне мав якусь мету. І взагалі, все занадто тривіально.

      І не знаю чи це взагалі може бути цікаво Макусі (бо повторюсь, це дуже тривіально), але напевне послухаю вас і поділюсь цією ідеєю ще й з ним.

      bunyk

      Квітень 7, 2011 at 21:42

  3. Хотів би дещо додати до твоєї моделі семантичних зв’язків поміж мовами. Як і будь-яка модель, вона має певний рівень відповідності реальності. Власне, твоя модель не враховує зв’язок між словником і людиною. В якості прикладу можна привести усі ті обговорення на вікі щодо адекватності перекладів технічних термінів на укр. мову. Погодься, іноді важко знати не те що “канонічну” назву, а й звичайну.

    Ось недавній приклад. У англійській термінології (електроніка) є термін “switch” – “перемикач”. Так ось, англійці використовують зв’язний термін “semiconductor switch”. І як його перекласти? “Напівпровідниковий перемикач”? Це ж нісенітниця, ніхто так діоди і транзистори не називає. “Напівпровідникови ключ”? Також термін не вживаний.

    Одним словом, треба доробити модель. На жаль, я не знаю, що допоможе. Колись ти писав “як жаль, що я не народився в англомовній сім’ї”. Я тільки зараз зрозумів всю силу фрази.

    danbst

    Квітень 7, 2011 at 21:32

    • А чому перемикач не підходить? Тому що перемикач обов’язково має бути фізичним? Це ж не “Ґудзик”. 🙂
      До речі, є гарне слово “реле” (от дві секунди тому думав що реле бувають лише електромагнітними).

      Більше того, я не знаю нормального відповідника слову “entity”, бо від слова “сутність” відгонить подібним філософським поняттям “essense”. А це слово має передавати основну ідею статті. Добре їм в Metaweb – назвали елементи своєї онтології вузлами, і не паряться.

      Про “жаль, що я не нативно-англомовний”, я повторно зацитую Ґордера:

      – А ще ти казав, що французи були більшими раціоналістами ніж британці.
      – Ця різниця сягає своїм корінням ще в часи середньовіччя. Коли англійці говорять “common sense” (“здоровий глузд”), французи вживають близьке за значенням “evidense”. Англійський вираз можна перекласти як “спільний досвід”, а по-французьки це означає “очевидність”, тобто те, що належить до сфери розуму.

      Може саме тому що я найкраще знаю англійську я й записався в позитивісти. Мені вони якось більш зрозумілі ніж екзистенціалісти (французи). Про німців – взагалі мовчу.

      bunyk

      Квітень 7, 2011 at 21:54

      • Так проблема в тому, що тразистор – це не перемикач )) він нічого не перемикає, проте він є “current switching device”! Реле також не підходиться, тому що реле – це не абстракція (як перемикач), а конкретний пристрій.

        Про німців, до-речі, можна довго мовчати…

        А “entity” – це хіба не “поняття”?

        danbst

        Квітень 7, 2011 at 23:35

  4. Все залежить від того, який переклад Ви збираєтесь робити.
    У тій же лінгво вказана вагомість (частотність) перекладу слова.

    Так, словосполучення будуть мабуть краще перекладатися, бо їх може не бути в словнику. Але думаю, що гугл вже використовує цей метод.

    Алекс

    Квітень 8, 2011 at 10:29

  5. […] проектом, який я хотів би аби хтось реалізував. Качаємо дамп вікіпедії. Наприклад німецької. Вибираємо текст статтей, […]


Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: