추상 위키백과/위키함수용 템플릿 언어/템플릿 구문을 위키함수로 변환

구문을 사용하는 템플릿이 주어지면 컴포지션 구문(따라서 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)).
  • 결과 함수 호출 목록은 루트 레이블 슬롯의 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("!")
    ]))

TemplateTemplateText 함수와 종속 관계 이름에서 파생된 함수는 모두 어휘소 목록을 반환할 것으로 예상됩니다. 따라서 생성자를 템플릿으로 변환할 때 가칭 Render라는 추가 함수를 적용해야 합니다. 이 함수는 실현된 텍스트를 문자열로 반환하기 위해 NLG 파이프라인의 다른 모듈을 통해 lemma-tree를 처리해야 합니다.

언어별 함수 디스패치

위키함수에서 언어별 함수 디스패치는 언어 코드 접미사로 모든 함수 레이블을 보강하여 구현됩니다. 예를 들어, TemplateText의 영어, 독일어 및 브라질 포르투갈어 버전은 (영어로) TemplateText_en, TemplateText_deTemplateText_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(".")
])

각주

  1. 여기에서 "어휘소"이라는 용어는 상당히 광범위하게 사용됩니다. 언어의 전형적인 내용어, 문법 형태소 또는 (특정 상황에서는) 문법 구를 가리킬 수 있습니다. 본질적인 것은 문법적 특징을 특징으로 하는 하나 이상의 형식 목록을 표시한다는 것입니다.
  2. 위키데이터의 어휘소 정의와 데이터 유형 정의가 매우 유사하다는 점에 유의하세요. 그러나 이것들은 별개의 개체입니다.
  3. 서브템플릿은 반드시 어떤 언어 단위와도 일치하지 않으며(비록 이상적으로는 종속성 트리의 언어 구성 요소와 일치해야 함) 더욱이 그 사용은 템플릿 작성자의 재량에 달려 있기 때문에 이 부분 트리 사양은 특정 특정 항목과 반드시 일치하지 않습니다. 언어 논리가 아닌 하위 템플릿 사용 측면에서 템플릿 구성을 반영합니다.
  4. 이에 대한 초기 구현은 게릿에서 찾을 수 있습니다.
  5. root 레이블이 지정된 슬롯이 없으면(다른 레이블도 없는 경우에만 허용됨) 첫 번째 슬롯이 루트로 식별됩니다.
  6. 이것은 모든 위키함수 함수가 다른 언어로 된 레이블을 가질 수 있다는 사실과 무관합니다. 이러한 모든 레이블은 구현에 의해 처리되는 대로 구현의 언어 코드를 표시하는 규칙을 따라야 합니다.