Грамматическая основа (язык программирования)
Эта статья нуждается в дополнительных цитатах для проверки . ( ноябрь 2019 г. ) |
Grammatical Framework ( GF ) — язык программирования для написания грамматик естественных языков. GF способен анализировать и генерировать тексты на нескольких языках одновременно, работая с независимым от языка представлением значения. Грамматики, написанные на GF, можно скомпилировать в независимый от платформы формат, а затем использовать из разных языков программирования, включая C и Java , C# , Python и Haskell . Дополнителем GF является GF Resource Grammar Library , библиотека многократного использования для работы с морфологией и синтаксисом растущего числа естественных языков.
И сам GF, и библиотека грамматики ресурсов GF имеют открытый исходный код . Типологически GF — функциональный язык программирования. Математически это теоретико-типовая формальная система ( логическая структура точнее, ), основанная на интуиционистской теории типов Мартина-Лёфа с дополнительными суждениями , специально адаптированными к области лингвистики.
Особенности языка
[ редактировать ]- система статических типов для обнаружения потенциальных ошибок программирования
- функциональное программирование для мощных абстракций
- поддержка написания библиотек для использования в других грамматиках
- инструменты для извлечения информации , для преобразования лингвистических ресурсов в GF [1]
Учебное пособие
[ редактировать ]Цель: написать многоязычную грамматику для выражения утверждений о том, что Джон и Мэри любят друг друга. [2]
Абстрактные и конкретные модули
[ редактировать ]В GF грамматики разделены на два типа модулей:
- модуль абстрактный , содержащий формы суждений
cat
иfun
.cat
или объявления категорий перечисляют категории, т.е. все возможные типы деревьев, которые могут быть.fun
или объявления функций указывают функции и их типы , они должны быть реализованы конкретными модулями (см. ниже).
- один или несколько конкретных модулей, содержащих формы суждений
lincat
иlin
.lincat
или определения типа линеаризации , говорит, какой тип объектов линеаризация создает для каждой категории, перечисленной вcat
.lin
или правила линеаризации реализуют функции, объявленные вfun
. Они говорят, как деревья линеаризуются.
Учтите следующее:
Абстрактный синтаксис
abstract Zero = {
cat
S ; NP ; VP ; V2 ;
fun
Pred : NP -> VP -> S ;
Compl : V2 -> NP -> VP ;
John, Mary : NP ;
Love : V2 ;
}
Конкретный синтаксис: английский
concrete ZeroEng of Zero = {
lincat
S, NP, VP, V2 = Str ;
lin
Pred np vp = np ++ vp ;
Compl v2 np = v2 ++ np ;
John = "John" ;
Mary = "Mary" ;
Love = "loves" ;
}
Уведомление: Str
(список токенов или «строка») как единственный тип линеаризации.
Делаем грамматику многоязычной
[ редактировать ]Один абстрактный синтаксис может быть применен ко многим конкретным синтаксисам, в нашем случае по одному для каждого нового естественного языка, который мы хотим добавить. Ту же систему деревьев можно представить:
- разные слова
- разные порядки слов
- различные типы линеаризации
Конкретный синтаксис: французский
concrete ZeroFre of Zero = {
lincat
S, NP, VP, V2 = Str ;
lin
Pred np vp = np ++ vp ;
Compl v2 np = v2 ++ np ;
John = "Jean" ;
Mary = "Marie" ;
Love = "aime" ;
}
Перевод и многоязычное поколение
[ редактировать ]Теперь мы можем использовать нашу грамматику для перевода фраз с французского на английский. Следующие команды можно выполнить в интерактивной оболочке GF.
Импортируйте множество грамматик с одним и тем же абстрактным синтаксисом.
> import ZeroEng.gf ZeroFre.gf
Languages: ZeroEng ZeroFre
Перевод: линеаризация канала в синтаксический анализ
> parse -lang=Eng "John loves Mary" | linearize -lang=Fre
Jean aime Marie
Многоязычное поколение: линеаризация на все языки
> generate_random | linearize -treebank
Zero: Pred Mary (Compl Love Mary)
ZeroEng: Mary loves Mary
ZeroFre: Marie aime Marie
Параметры, таблицы
[ редактировать ]В латыни есть падежи : именительный падеж подлежащего, винительный падеж объекта.
- Иоаннес Мариам амат «Джон-Ном любит Мэри-Акк»
- Мария Иоаннем действительно «Мэри-Ном любит Джона-Акка»
Мы используем тип параметра для регистра (всего 2 из 6 случаев в Latin). Тип линеаризации NP представляет собой табличный тип : от Case
к Str
. Линеаризация John
это таблица перегиба . При использовании NP мы выбираем ( !
) соответствующий случай из таблицы.
Конкретный синтаксис: латынь.
concrete ZeroLat of Zero = {
lincat
S, VP, V2 = Str ;
NP = Case => Str ;
lin
Pred np vp = np ! Nom ++ vp ;
Compl v2 np = np ! Acc ++ v2 ;
John = table {Nom => "Ioannes" ; Acc => "Ioannem"} ;
Mary = table {Nom => "Maria" ; Acc => "Mariam"} ;
Love = "amat" ;
param
Case = Nom | Acc ;
}
Прерывистые составляющие, записи
[ редактировать ]В голландском языке глагол heeft lief является прерывистым компонентом. Тип линеаризации V2
это тип записи с двумя полями . Линеаризация Love
это рекорд . Значения полей выбираются по проекции ( .
)
Конкретный синтаксис: голландский
concrete ZeroDut of Zero = {
lincat
S, NP, VP = Str ;
V2 = {v : Str ; p : Str} ;
lin
Pred np vp = np ++ vp ;
Compl v2 np = v2.v ++ np ++ v2.p ;
John = "Jan" ;
Mary = "Marie" ;
Love = {v = "heeft" ; p = "lief"} ;
}
Переменные и встроенные функции, соглашение, поддержка Unicode
[ редактировать ]Для иврита NP имеет род как неотъемлемую характеристику – поле в записи. VP используется пол В качестве переменной характеристики – аргумент таблицы. При предикации VP получает пол NP.
Конкретный синтаксис: иврит.
concrete ZeroHeb of Zero = {
flags coding=utf8 ;
lincat
S = Str ;
NP = {s : Str ; g : Gender} ;
VP, V2 = Gender => Str ;
lin
Pred np vp = np.s ++ vp ! np.g ;
Compl v2 np = table {g => v2 ! g ++ "את" ++ np.s} ;
John = {s = "ג׳ון" ; g = Masc} ;
Mary = {s = "מרי" ; g = Fem} ;
Love = table {Masc => "אוהב" ; Fem => "אוהבת"} ;
param
Gender = Masc | Fem ;
}
Визуализация деревьев разбора
[ редактировать ]GF имеет встроенные функции, которые можно использовать для визуализации деревьев синтаксического анализа и выравнивания слов.
Следующие команды сгенерируют деревья синтаксического анализа для заданных фраз и откроют созданное изображение PNG, используя системный файл. eog
команда.
> parse -lang=Eng "John loves Mary" | visualize_parse -view="eog"
> parse -lang=Dut "Jan heeft Marie lief" | visualize_parse -view="eog"
![]() |
![]() |
Создание выравнивания слов
[ редактировать ]- В языках L1 и L2: связывайте каждое слово с его наименьшим связующим поддеревом.
- Удалите промежуточное дерево, объединив ссылки непосредственно из L1 в L2.
В целом это дает выравнивание фраз. Ссылки могут быть пересекающимися, фразы — прерывистыми. align_words
команда имеет аналогичный синтаксис:
> parse -lang=Fre "Marie aime Jean" | align_words -lang=Fre,Dut,Lat -view="eog"

Ресурсная библиотека грамматики
[ редактировать ]В приложениях на естественном языке библиотеки — это способ справиться с тысячами деталей, связанных с синтаксисом, лексикой и флексией. Библиотека грамматики ресурсов GF является стандартной библиотекой для Grammatical Framework. Он охватывает морфологию и базовый синтаксис все большего числа языков, включая африкаанс, амхарский (частичный), арабский (частичный), баскский (частичный), болгарский, каталанский, китайский, чешский (частичный), датский, голландский, английский, Эстонский, финский, французский, немецкий, древний греческий (частичный), современный греческий, иврит (фрагменты), хинди, венгерский (частичный), интерлингва, итальянский, японский, корейский (частичный), латынь (частичный), латышский, мальтийский, монгольский , непальский, норвежский букмол, норвежский нюнорск, персидский, польский, пенджабский, румынский, русский, синдхи, словацкий (частично), словенский (частично), сомалийский (частично), испанский, суахили (фрагменты), шведский, тайский, турецкий (фрагменты) ) и урду. Кроме того, 14 языков имеют лексику WordNet и крупномасштабные расширения синтаксического анализа. [3]
Полную документацию по API библиотеки можно найти на странице RGL Synopsis . В документе о статусе RGL указаны языки, доступные в настоящее время в грамматической библиотеке ресурсов GF, включая их зрелость.
Использование GF
[ редактировать ]GF был впервые создан в 1998 году в европейском исследовательском центре Xerox в Гренобле в рамках проекта Multilingual Document Authoring. В Xerox он использовался для прототипов, включая ресторанный разговорник, систему запросов к базе данных, формализацию инструкций системы сигнализации с переводом на 5 языков и авторскую систему описаний медицинских препаратов.
Более поздние проекты с использованием GF и участием третьих сторон включают:
- REMU : Надежная многоязычная цифровая связь, проект, финансируемый Шведским исследовательским советом в период с 2013 по 2017 год.
- MOLTO : многоязычный онлайн-перевод, проект ЕС, работавший в 2010–2013 годах.
- SALDO : шведский морфологический словарь, основанный на правилах, разработанных для GF и функциональной морфологии.
- WebAlt : многоязычная генерация математических упражнений (коммерческий проект)
- TALK: многоязычные и мультимодальные системы разговорного диалога
В академических целях GF использовался во многих докторских диссертациях и стал результатом множества научных публикаций ( см. в списке публикаций GF некоторые из них ).
В коммерческом плане GF использовался рядом компаний в таких областях, как электронная коммерция, здравоохранение и перевод формальных спецификаций на естественный язык. [4]
Сообщество
[ редактировать ]Список рассылки для разработчиков
[ редактировать ]Существует активная группа для разработчиков и пользователей GF, расположенная по адресу https://groups.google.com/group/gf-dev.
Летние школы
[ редактировать ]2020 – GF как ресурс по вычислительному праву (Сингапур)
[ редактировать ]Седьмая летняя школа GF , отложенная из-за COVID-19, пройдет в Сингапуре. Летняя школа , организованная совместно с Центром вычислительного права Сингапурского университета менеджмента , будет уделять особое внимание вычислительному праву.
2018 г. – Шестая летняя школа GF (Стелленбош, ЮАР)
[ редактировать ]Шестая летняя школа ГФ стала первой, проведенной за пределами Европы. Основными темами летней школы были ресурсы африканского языка и растущее использование GF в коммерческих приложениях.
2017 – GF in a Full Stack of Language Technology (Рига, Латвия)
[ редактировать ]Пятая летняя школа ГФ прошла в Риге, Латвия. В этой летней школе приняли участие несколько представителей стартапов, которые представили примеры промышленного использования GF.
2016 – Летняя школа по машинному переводу на основе правил (Аликанте, Испания)
[ редактировать ]GF была одной из четырех платформ, представленных на Летней школе по машинному переводу на основе правил , наряду с Apertium, Matxin и TectoMT.
2015 – Четвертая летняя школа GF (Гозо, Мальта)
[ редактировать ]Четвертая летняя школа GF прошла на острове Гозо на Мальте. Как и предыдущее издание 2013 года, эта летняя школа сотрудничала с другими ресурсами, такими как Apertium и FrameNet.
2013 – Расширение грамматических ресурсов (озеро Кимзее, Германия)
[ редактировать ]Третья летняя школа GF прошла на острове Фрауэнхимзее в Баварии, Германия, по специальной теме «Расширение грамматических ресурсов». Эта летняя школа была сосредоточена на расширении существующих грамматик ресурсов с конечной целью работы с любым текстом на поддерживаемых языках. Расширение лексики является очевидной частью этой работы, но интерес представляли и новые грамматические конструкции. Особый интерес был к переносу ресурсов из других подходов с открытым исходным кодом, таких как WordNets и Apertium, и, в свою очередь, к обеспечению возможности повторного использования ресурсов GF в других подходах.
2011 – «Границы многоязычных технологий» (Барселона, Испания)
[ редактировать ]Вторая Летняя школа GF под названием « Границы многоязычных технологий» прошла в 2011 году в Барселоне, Испания. Его спонсировали CLT , Центр языковых технологий Университета Гетеборга, и UPC , Политехнический университет Каталонии. Школа занималась новыми языками, а также способствовала текущей работе над теми языками, которые уже находятся в стадии разработки. Особенно поощрялось отсутствие языков ЕС.
Школа началась с двухдневного курса GF, предназначенного для тех, кто хочет получить представление о GF или обзор текущей работы.
Все результаты летней школы доступны в виде программного обеспечения с открытым исходным кодом, выпущенного по лицензии LGPL.
2009 – Летняя школа GF (Гетеборг, Швеция)
[ редактировать ]
Первая летняя школа GF прошла в 2009 году в Гетеборге, Швеция. Это была совместная попытка создать грамматики новых языков в Grammatical Framework, GF. Эти грамматики были добавлены в Библиотеку грамматик ресурсов, которая ранее содержала 12 языков. Около 10 новых языков уже находятся в стадии разработки, и цель Школы - освоить 23 новых языка. Все результаты Летней школы были доступны в виде программного обеспечения с открытым исходным кодом, выпущенного по лицензии LGPL.
Летняя школа была организована группой языковых технологий факультета компьютерных наук и инженерии . Группа является частью Центра языковых технологий , основного исследовательского направления Университета Гетеборга .
Код, созданный участниками школы, доступен в репозитории GF darcs, подкаталог вклад/летняя школа .
Ссылки
[ редактировать ]- ^ Ранта, Аарне (2011). Грамматическая основа: программирование с использованием многоязычных грамматик . Публикации CSLI, Центр изучения языка и информации. стр. 8–9 . ISBN 978-1-57586-627-7 .
- ^ Учебное пособие LREC 2010.
- ^ «WordNet в GF» . Гитхаб . 16 октября 2021 г.
- ^ "Клиенты" .