추상 위키백과/위키함수용 템플릿 언어/템플릿 구문을 위키함수로 변환
구문을 사용하는 템플릿이 주어지면 컴포지션 구문(따라서 Z7 함수 호출 개체)으로 구문 분석할 수 있으며 그런 다음 위키함수 오케스트레이터에서 직접 평가할 수 있습니다.
평가 출력 유형
제안된 NLG 아키텍처에 따라 템플릿 렌더러의 출력은 "렘마 트리"여야 합니다. 아래 제안된 현재 구현에서 필요한 출력은 완전히 지정된 트리가 아니라 다음 필드가 있는 Z 유형으로 정의되는 “어휘소 목록”, 어휘소[Note 1]입니다:[Note 2]
- 의미표제어: 어휘의 인용 형식(대부분 디버깅 목적으로 필요)
- 언어 코드 (대부분 템플릿의 대상 언어 코드와 동일하지만 특수한 경우에 따라 다를 수 있음)
- 품사
- 모든 형식에 적용할 수 있는 통합 가능한 문법적 특징 목록
- 형식에 대한 제약 조건으로 사용되는 통합할 수 있는 문법적 특징 목록(종속 규칙 적용으로 채워짐)
- 실제로, 위의 두 목록은 문법적 특징의 단일 목록으로 구현될 수 있습니다.
- 형식 목록, 후자는 다음 필드가 있는 Z-유형입니다.
- 정자법
- 공백 처리(다양한 유형의 접어/접사를 처리하기 위해 형식 앞/뒤에 공백을 표시할지 여부)
- 형식에 특정한 불확실한 문법적 특징 목록
위에서 언급한 통일할 수 없는 문법적 특징 유형에는 세 가지 필드가 있습니다:
- 통합 색인: 파생된 다른 어휘와 함께 이러한 기능을 식별하는 역할을 합니다.
- 문법 범주: 기능 유형, 예: "숫자" 또는 "성별"
- 문법적 특징(적절한): 특징 자체, 예를 들어 "복수" 또는 "남성"
어휘소 목록 유형은 항목이 어휘소 유형이거나 어휘소 목록 자체일 수 있는 목록입니다. 또한 이러한 각 목록은 아마도 Z22(쌍) 유형을 통해 루트 어휘소의 인덱스로 확장됩니다. 그 결과 하위 템플릿의 루트와 상위 템플릿 사이의 호만 기록되고 단일 템플릿 내의 호는 유지되지 않는 어휘소의 부분적으로 지정된 종속성 트리가 생성됩니다.[Note 3]
합성된 함수의 구성
합성된 함수 호출은 다음과 같이 작성됩니다:[Note 4]
- 모든 템플릿 요소는 다음과 같이 함수 호출로 변환됩니다:
- 문장 부호를 포함한 텍스트 요소는 TemplateText 함수에 인수로 전달됩니다. 예를 들어,
TemplateText("is")
,TemplateText(".")
.- TemplateText 함수는 모든 단어(또는 문장 부호)를 어휘소(또는 보다 정확하게는 길이가 1인 어휘소 목록)로 변환합니다. 대부분의 경우 어휘소에는 정확히 하나의 형식, 즉 제공된 텍스트가 포함되어 정적 텍스트를 효과적으로 시뮬레이션합니다. 그러나 일부 경우에 이는 특정 단어를 형식 목록으로 확장(예: 영어 결정자 "a"는 {"a", "an"}으로 확장될 수 있음)하거나 일부 관련 주석을 적용하여 특정 공통 문법 패턴에 더 쉽게 접근할 수 있는 기회를 제공합니다.
- 문자열이 있는 슬롯 또는 문자열 인수 보간도 TemplateText 호출로 변환됩니다. 예를 들어,
{"text"} → TemplateText("text")
,{string_field} → TemplateText(string_field)
. - 다른 인수 유형의 보간은 유사하게 처리되지만 다른 함수(TBD)과 함께 처리됩니다.
- 예를 들어, 숫자 유형은 암시적
Cardinal
함수를 사용하여 어휘소로 변환될 수 있습니다. 이 함수는 숫자 값을 어휘소 유형 – 예: 숫자 1에서 문자열 1로 – 으로 변환할 뿐만 아니라 숫자 값에 해당하는 문법적 숫자 기능(예를 들어, 가산 명사를 정량화할 때 문장의 1은 관련된 명사의singular
렌더링을 강제하고, 예를 들어 문법 수에 대한 언어의 문법에 따라plural
의 경우 2)으로 어휘소를 풍부하게 합니다.
- 예를 들어, 숫자 유형은 암시적
- 함수 호출이 있는 슬롯은 단순히 해당 함수 호출(하위 템플릿일 수 있음)을 사용합니다. 예를들어,
{Lexeme(entity}) → Lexeme(entity)
. 이러한 함수는 어휘소 목록 유형을 반환해야 합니다. - 모든 조건부 함수는 이전에 주어진 함수 호출 위에 적용됩니다. 예를 들어,
{Lexeme(entity}|Elide_if(ellipsis)} → Elide_if(ellipsis, Lexeme(entity))
.
- 문장 부호를 포함한 텍스트 요소는 TemplateText 함수에 인수로 전달됩니다. 예를 들어,
- 결과 함수 호출 목록은 루트 레이블 슬롯의 1 기반 인덱스와 함께 템플릿 함수로 전달됩니다.[Note 5] 예를 들면 다음과 같습니다:
Hello {root:Person(entity}|Elide_if(ellipsis)}! →
Template(2, [TemplateText("Hello") Elide_if(ellipsis, Person(entity)) TemplateText("!")])
- 종속성 관계는 대상 및 소스 레이블의 1 기반 인덱스와 함께 템플릿 호출 위에 추가 함수 호출로 적용됩니다. 이는 각 종속성 역할이 주어진 역할의 적용을 반영하기 위해 기본형 트리를 변환하는 위키함수 함수에 해당해야 함을 의미합니다. 예를 들어
amod
역할은 기본형 트리에서 주어-동사 일치를 강제합니다. 예를 들어:Bonjour {det:DefiniteArticle()} {amod:Lexeme(L10098)} {root:Person(entity}! →
amod(3, 4, det(2, 4, Template(4, [
TemplateText("Bonjour")
DefiniteArticle()
Lexeme("L10098") -- adjective "petit"
Person(entity)
TemplateText("!")
]))
Template 및 TemplateText 함수와 종속 관계 이름에서 파생된 함수는 모두 어휘소 목록을 반환할 것으로 예상됩니다. 따라서 생성자를 템플릿으로 변환할 때 가칭 Render라는 추가 함수를 적용해야 합니다. 이 함수는 실현된 텍스트를 문자열로 반환하기 위해 NLG 파이프라인의 다른 모듈을 통해 lemma-tree를 처리해야 합니다.
언어별 함수 디스패치
위키함수에서 언어별 함수 디스패치는 언어 코드 접미사로 모든 함수 레이블을 보강하여 구현됩니다. 예를 들어, TemplateText의 영어, 독일어 및 브라질 포르투갈어 버전은 (영어로) TemplateText_en
, TemplateText_de
및 TemplateText_pt-BR
로 이름이 지정됩니다.[Note 6] 주어진 함수의 가장 언어별 버전을 찾기 위해 함수 이름을 "레이블 제거"를 할 때, 그것은 템플릿 파서의 작업이 될 것입니다.
컴포지션 구문으로 변환의 예
여기에서 템플릿 사양 문서에 제공된 예제를 구성 구문으로의 변환과 함께 반복합니다.
스웨덴어
읽기의 편의를 위해 템플릿 구문을 반복합니다.
Age_renderer_sv(Entity, Age_in_years): "{Person(Entity)} är {Age_in_years} år gammal ."
해당 컴포지션 구문(줄임말):
Age_renderer_sv(Entity, Age_in_years): Template(1, [
Person(Entity)
TemplateText("är")
TemplateText(Age_in_years)
TemplateText("år")
TemplateText("gammal")
TemplateText(".")
])
프랑스어
템플릿 구문:
Age_renderer_fr(Entity, Age_in_years):
"{Person(Entity)} a {Year(Age_in_years)}."
Year_fr(years): "{nummod:Cardinal(years)} {root:Lexeme(L10081)}"
컴포지션 구문:
Age_renderer_fr(Entity, Age_in_years): Template(1, [
Person(Entity)
TemplateText("a")
Year_fr(Age_in_years)
TemplateText(".")
])
Year_fr(years): num(1, 2, Template(2, [
Cardinal_fr(years)
Lexeme_fr(L10081)
]))
히브리어
템플릿 구문:
Age_renderer_he(Entity, Age_in_years):
"{subj:Person(Entity)} {root:GenderedLexeme(L64310, L64399)} {gmod:Year(Age_in_years)}."
Year_he(years):
"{nummod:Cardinal(years)|Elide_if(years<=2)} {root:Lexeme(L68440)|Elide_if(years>2)}"
컴포지션 구문:
Age_renderer_he(Entity, Age_in_years):
gmod(3, 2, subj(1, 2, Template(2, [
Person(Entity)
GenderedLexeme(L64310, L64399)
Year_he(Age_in_years)
TemplateText(".")
])))
Year_he(years):
nummod(1, 2, Template(2, [
ElideIf(years<=2, Cardinal_he(years))
ElideIf(years>2, Lexeme(L68440)) ]))
줄루어
템플릿 구문:
Age_renderer_zu(Entity, Age_in_years):
"{subj:Person(Entity)} {sc:SubjectConcord()}na{Year(Age_in_years)}."
Year_zu(years):
"{root:Lexeme(L686326} {concord:RelativeConcord()}{Copula()}{concord_1<nummod:NounConcord()}-{nummod:Cardinal(years)}"
컴포지션 구문:
Age_renderer_zu(Entity, Age_in_years):
subj(1, 2, Template(2, [
Person(Entity)
SubjectConcord()
TemplateText("na")
Year(Age_in_years)
TemplateText(".")
]))
Year_zu(years):
nummod(6, 1, concord(4, 6, concord(2, 1, Template(1, [
Lexeme(L686326)
RelativeConcord()
Copula()
NounConcord()
TemplateText("-")
Cardinal(years)
]))))
브르타뉴어
템플릿 구문:
Age_renderer_br(Entity, Age_in_years):
"{Cardinal(Age_in_years)} {Lexeme(L45068)} eo {Person(Entity)} ."
컴포지션 구문:
Age_renderer_br(Entity, Age_in_years):
Template(1, [
Cardinal_br(Age_in_years)
Lexeme(L45068)
TemplateText("eo")
Person(Entity)
TemplateText(".")
])
각주
- ↑ 여기에서 "어휘소"이라는 용어는 상당히 광범위하게 사용됩니다. 언어의 전형적인 내용어, 문법 형태소 또는 (특정 상황에서는) 문법 구를 가리킬 수 있습니다. 본질적인 것은 문법적 특징을 특징으로 하는 하나 이상의 형식 목록을 표시한다는 것입니다.
- ↑ 위키데이터의 어휘소 정의와 데이터 유형 정의가 매우 유사하다는 점에 유의하세요. 그러나 이것들은 별개의 개체입니다.
- ↑ 서브템플릿은 반드시 어떤 언어 단위와도 일치하지 않으며(비록 이상적으로는 종속성 트리의 언어 구성 요소와 일치해야 함) 더욱이 그 사용은 템플릿 작성자의 재량에 달려 있기 때문에 이 부분 트리 사양은 특정 특정 항목과 반드시 일치하지 않습니다. 언어 논리가 아닌 하위 템플릿 사용 측면에서 템플릿 구성을 반영합니다.
- ↑ 이에 대한 초기 구현은 게릿에서 찾을 수 있습니다.
- ↑
root
레이블이 지정된 슬롯이 없으면(다른 레이블도 없는 경우에만 허용됨) 첫 번째 슬롯이 루트로 식별됩니다. - ↑ 이것은 모든 위키함수 함수가 다른 언어로 된 레이블을 가질 수 있다는 사실과 무관합니다. 이러한 모든 레이블은 구현에 의해 처리되는 대로 구현의 언어 코드를 표시하는 규칙을 따라야 합니다.