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

템플릿 언어는 추상 위키백과의 범위 내에서 사용하기 위한 것이지만 유연하게 해석할 수 있습니다. 예를 들어 위키함수 또는 Scribunto로 쉽게 변환할 수 없는 언어에 대한 실현자가 이미 있지만 출력은 위키백과 문서가 되거나 NLG의 첫 번째 단계(위키데이터 + 생성자 + 템플릿)를 사용하고 싶을 수 있지만 출력은 위키백과 문서가 아닌 자신의 모바일 앱에 대한 다국어 퀴즈를 위한 것입니다. 이것은 실행 불가능해서는 안됩니다. 이를 실현하기 위한 핵심 단계는 템플릿 언어를 사용 가능한 많은 시스템 중에서 문법적 프레임워크 및 SimpleNLG와 같은 다른 실현자 또는 NLG 시스템(의 일부)으로 변환하는 것입니다. 이러한 각 시스템에는 어떤 방식으로든 관련된 문법 또는 템플릿을 지정하는 고유한 방법과 의도된 의미를 알고리즘적으로 제공하는 해석 알고리즘이 있습니다. 이러한 이유로 템플릿 언어를 무손실 방식으로 다른 템플릿 사양 언어 또는 유사한 형식화에 매핑하는 것이 불가능할 수 있습니다. 오히려 아이디어는 서로 모순되지 않고 가능한 한 많이 의도된 의미가 보존되도록 템플릿 구문의 변환을 고안하는 것입니다.

ToCT로의 전환

이 그림에서는 "복잡한 템플릿을 위한 작업 온톨로지"(ToCT)[1]를 사용합니다. 온톨로지는 고유의 의미(웹 온톨로지 언어 OWL로 표현되는 OWL 온톨로지의 경우 모델 이론 또는 그래프 기반)를 가지므로 알고리즘 해석이 필요하지 않습니다. 필요한 것은 제약 조건을 고려하여 템플릿 언어의 해당 요소를 ToCT 요소에 매핑하는 방법입니다.

ToCT 요소에 매핑

먼저 비공식적으로 비교하면 다음을 관찰합니다. 텍스트, 슬롯 및 함수가 있는 템플릿 언어와 달리 ToCT는 "단어"와 "슬롯"을 핵심 요소로 가지고 있으며 기능 및 하위 템플릿을 무시합니다. 템플릿 언어의 역할과 종속 관계는 현재 UD/SUD 의미의 종속성 그래프를 기반으로 하지 않는(그러나 부분적으로 영감을 받은) 관계인 보다 유연한(과소 지정됨) '의존' 관계로 ToCT에서 일반화된 대응 관계를 갖습니다. 반대로 ToCT에는 일치 및 접사와 같은 단어 조각에 대한 특정 요소가 있어 니제르-콩고 B 언어를 쉽게 만들 수 있습니다. 템플릿 언어에는 언어의 1차 요소가 없습니다. 각 ToCT 요소는 사용자가 수정할 수 있는 자동 생성된 부품 이름으로 식별되므로 템플릿 언어의 해당 식별자와 일치할 수 있습니다. 템플릿 언어로 선택할 수 있는 언어는 위키데이터가 지원하는 언어에 따라 다르지만, 이는 길리스-웨버의 MoLA, Tittel & Keet(2019),[2] 언어 주석 모델을 사용하는 ToCT에서 더 유연합니다. 모든 ISO 639 코드뿐 아니라 사용자 정의(구어 또는 사어) 언어, 방언 ​​및 기타 언어도 포함합니다.

정확한 1:1 매핑이 아니기 때문에 손실이 없을 수 없으며 어느 방향에서든 인간 개입이 필요합니다. 템플릿 언어에서 ToCT로 가능한 절차는 다음과 같으며 위에서 소개한 템플릿 언어는 "TL"로 표시하고 ToCT는 "ToCT"로 표시합니다.

  1. 각 하위 템플릿을 기본 템플릿으로 펼쳐서 템플릿에 대해 하나의 수준만 있도록 템플릿을 확장합니다. 여기에는 지정될 수 있는 일부 전제 조건에 따라 하위 템플릿 변형 선택의 가능한 프로세스가 포함됩니다.
  2. 하위 템플릿 역할을 하는 각 하위 기능을 기본 템플릿에 하나의 수준만 있도록 펼쳐서 템플릿을 확장합니다.
  3. "TL" 템플릿의 언어 속성 전송: ISO 639 언어 코드를 복사하고 시스템에서 생성된 이름을 사용하거나 다른 이름을 추가하고 기본/대체를 표시합니다.
  4. 1부터 시작하여 처음부터 끝까지 "TL" 요소의 순서를 인덱싱합니다.
  5. 연속적인 "TL" 요소를 단어 형성별로 그룹화하고 음운 조건으로 인한 축약형을 생략합니다.
  6. "TL"에서 "To"로 단어가 되도록 의도된 각 변경 불가능한 텍스트 문자열을 변환합니다:
    1. unimorphic 단어인 경우 "Unimorphic word" 요소를 사용하고 인덱스 번호를 전송합니다.
    2. 구문(두 단어 이상)인 경우 "Phrase" 요소를 사용하고 색인 번호를 전송합니다.
  7. 단어나 구가 되도록 의도된 각 격리 슬롯에 대해 각 "TL" 슬롯을 "ToCT" 슬롯으로 변환하여 인덱스 번호를 전송합니다.
  8. 다형성 단어인 단어가 되도록 의도된 "TL" 텍스트와 슬롯의 각 조합에 대해 각 요소에 대해 다음을 결정합니다:
    1. 요소가 무엇인지 결정하세요: 콩코드, 접사, 루트 또는 어간(일부 텍스트 문자열) 또는 슬롯(즉, 언어 데이터가 아닌 내용을 가져오는 것).
    2. "다형성 단어"를 만들고 그에 따라 해당 요소를 순서대로 추가합니다.
  9. "To"의 요소 순서가 "TL"과 동일한지 확인합니다.
  10. "ToCT"의 의존성에 대한 "TL" 의존성을 해결합니다. (TL 종속성은 reliesOn보다 더 구체적일 수 있으므로 무손실 프로세스는 아닙니다. ToCT의 reliesOn은 가까운 시일 내에 개선될 예정입니다.)
  11. "TL" 템플릿에서 "ToCT"로 구두점을 전송합니다.

Turtle 구문의 예

ToCT는 직렬화를 위해 W3C 표준인 간결한 RDF 삼중 언어인 Turtle 구문으로 템플릿의 인스턴스화를 저장합니다. (OWL(RDF/XML) 또는 다른 것에 대한 공식 교환 구문일 수도 있습니다.) 사람이 사용하기 위한 것이 아니라 백엔드 처리를 위한 정교한 Turtle 구문으로 인해 다음 두 가지 예만 포함합니다. 스웨덴어로 된 가장 쉬운 템플릿과 isiZulu용으로 가장 정교한 템플릿입니다.

스웨덴어로 실행 중인 예제의 템플릿 구문:

Age_renderer_sv(Entity, Age_in_years): "{Person(Entity)} är {Age_in_years} år gammal."

ToCT 구문은 다음과 같으며 나중에 설명할 것입니다(@base@prefix가 포함된 첫 번째 부분은 지금은 무시할 수 있는 Turtle 관리자일 뿐입니다).

@base <http://people.cs.uct.ac.za/~zmahlaza/templates/owlsiz/> .
@prefix toct: <https://people.cs.uct.ac.za/~zmahlaza/ontologies/ToCT#> .
@prefix mola: <https://ontology.londisizwe.org/mola#> .
@prefix co: <http://purl.org/co/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix cao: <http://people.cs.uct.ac.za/~zmahlaza/ontologies/ConcordAnnotationOntology#> .

<ageSE> a toct:Template
    ; toct:supportsLanguage <lang>
    ; toct:hasFirstPart <Person>
    ; toct:hasLastPart <.>
    ; toct:hasPart <ar>, <ageYears>, <argammal> .

<lang> a mola:Language
    ; mola:isFamily <Swedish> .

<Person> a toct:Slot
    ; toct:hasLabel ""^^xsd:string
    ; toct:hasNextPart <ar> .

<ar> a toct:UnimorphicWord
    ; toct:hasValue "är"^^xsd:string
    ; toct:hasNextPart <ageYears> .

<ageYears> a toct:Slot
    ; toct:hasLabel ""^^xsd:string
    ; toct:hasNextPart <argammal> .

<argammal> a toct:Phrase
    ; toct:hasValue "år gammal"^^xsd:string
    ; toct:hasNextPart <.> .

<.> a toct:Punctuation
    ; toct:hasValue "."^^xsd:string .

ageSE는 "ToCT" 템플릿에 대해 선택된 이름이고 lang은 언어를 기록합니다. Person은 "TL"과 마찬가지로 슬롯이며 레이블은 위키데이터에서 가져오기 때문에 비어 있습니다. 그것은 다음 부분으로 ar을 가지고 있는데, 이것은 unimorphic 단어이고 표시될 레이블은 är입니다. 그런 다음 ageYears는 "TL"과 같은 슬롯이고 argammal이라는 마지막 다중 단어 불변 부분은 구입니다. 구두점으로 끝납니다. 종속성과 다형성 단어가 없습니다.

isiZulu에서 실행 중인 예제의 템플릿 구문은 다음과 같습니다:

Age_renderer_zu(Entity, Age_in_years):
"{subj:Person(Entity)} {root:SubjectConcord()}na{Year(Age_in_years)}."
Year_zu(years):
"{root:Lexeme(L686326} {concord:RelativeConcord()}{Copula()}{concord_1<nummod:NounConcord()}-{nummod:Cardinal(years)}"

ToCT 구문(또한 아래에 설명됨):

@base <http://people.cs.uct.ac.za/~zmahlaza/templates/owlsiz/> .
@prefix toct: <https://people.cs.uct.ac.za/~zmahlaza/ontologies/ToCT#> .
@prefix mola: <https://ontology.londisizwe.org/mola#> .
@prefix co: <http://purl.org/co/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix cao: <http://people.cs.uct.ac.za/~zmahlaza/ontologies/ConcordAnnotationOntology#> .

<PersonAge> a toct:Template
    ; toct:supportsLanguage <lang>
    ; toct:hasFirstPart <Person>
    ; toct:hasLastPart <punct>
    ; toct:hasPart <hasyears>, <isof> .

<lang> a mola:Language
    ; mola:isFamily <isiZulu> .

<Person> a toct:Slot
    ; toct:hasLabel ""^^xsd:string
    ; toct:hasNextPart <hasyears> .

<hasyears> a toct:PolymorphicWord
    ; toct:reliesOn <Person>
    ; toct:hasFirstPart <SC>
    ; toct:hasPart <na>
    ; toct:hasLastPart <unyaka>
    ; toct:hasNextPart <isof> .

<isof> a toct:PolymorphicWord
    ; toct:hasFirstPart <RC>
    ; toct:hasPart <cop>
    ; toct:hasPart <nounprefix>
    ; toct:hasPart <dash>
    ; toct:hasLastPart <yearno>
    ; toct:hasNextPart <punct> .

<punct> a toct:Punctuation
    ; toct:hasValue "."^^xsd:string .

<SC> a toct:Concord
    ; cao:hasConcordType <subjC>
    ; toct:reliesOn <Person>
    ; toct:hasLabel ""^^xsd:string .

<na> a toct:UnimorphicAffix
    ; toct:hasValue "na"^^xsd:string .

<unyaka> a toct:Slot
    ; toct:hasLabel ""^^xsd:string .

<RC> a toct:Concord
    ; cao:hasConcordType <relC>
    ; toct:reliesOn <unyaka>
    ; toct:hasLabel ""^^xsd:string .

<cop> a toct:Copula
    ; toct:hasLabel ""^^xsd:string .

<nounprefix> a toct:UnimorphicAffix
    ; toct:reliesOn <yearno>
    ; toct:hasValue ""^^xsd:string .

<dash> a toct:UnimorphicAffix
    ; toct:hasValue "-"^^xsd:string .

<yearno> a toct:Slot
    ; toct:hasLabel ""^^xsd:string

이 경우 스웨덴어 템플릿에 대한 설명도 마찬가지로 몇 가지 추가 사항이 있습니다. 첫째, ConcordPolymorphicWord와 같은 더 많은 요소가 있습니다. 후자에 대한 표기 원칙은 템플릿과 동일합니다. 부품이 있는 순서가 있고 각 부품에는 추가 세부 정보를 제공하는 항목이 있습니다. 예를 들어, isof 다형성 단어는 아래 항목에서 그것이 Concord 유형이고(hasConcordType 포함) concord 유형이며 unyaka로 식별되는 부분에 reliesOn하는 부분 RC를 포함합니다(unyaka는 위키데이터에서 어휘소를 가져오기 위한 슬롯이지만 필요한 경우 나중 단계에서 복수형으로 간주되는 루트일 수도 있습니다.). 이는 "TL" 템플릿의 "{root:Lexeme(L686326} {concord:RelativeConcord()}" 부분과 동일합니다.

<add system here>로 변환

...

각주

  1. Mahlaza, Zola; Keet, C. Maria (2021), AdeebNqo/ToCT, doi:10.5281/zenodo.5074931 
  2. Gillis-Webber, Frances; Tittel, Sabine; Keet, C. Maria (2019), 웹에서 언어 주석을 위한 모델, doi:10.1007/978-3-030-21395-4_1