Jump to content

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

From Meta, a Wikimedia project coordination wiki

구문을 사용하는 템플릿이 주어지면 컴포지션 구문(따라서 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("!")
    ]))

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(".")
])

각주

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