Earley Parser를 DFA 용 Levenshtein Automata Algo와 유사한 퍼지 파서로 만들 수 있습니까?


10

입력 단어의 DFA 및 런타임 구성 Levenshtein Automata를 사용하여 퍼지 파싱 (일부 편집 거리에 오타가있는 문자열도 허용)을 수행하는 방법이 있습니다. Earley 파서로 비슷한 것을 할 수 있습니까? 이 질문에 대답하는 것은 물론 알고리즘을 이해하기가 어렵습니다.


1
PDA는 NFA와의 많은 작업에 대해 폐쇄되어 있으므로 원칙적으로 가능해야합니다. Earley 적응은 항목에 카운터를 사용할 수 있기 때문에 무례한 운동으로 보입니다. 뭔가 빠졌습니까?
Raphael

@Raphael 예 이것은 일반적인 아이디어입니다. 사용자가 알고 있거나 모르는 것을 평가하기가 어렵 기 때문에 제 답변이 더 깁니다.
babou

plz는 "Levenshtein Automata"에 대한 참조 / 스케치 정의를 인용합니다. 자격이 될 수있는 것을 알고 있지만 어느 것을 언급하고 있습니까?
vzn

답변:


8

대답은 '예'입니다. 그러나 동일한 기능을 가진 더 간단한 것이 있기 때문에 Earley 파서로는 그렇게하지 않을 것입니다.

기본적으로 Earley 파서는 문법이 모호 할 때 주어진 문자열에 대해 가능한 모든 구문 분석을 생성하는 컨텍스트가없는 일반 구문 분석기 제품군에 속합니다.

이 파서를 이해하는 데는 적어도 두 가지 방법이 있습니다.

  • 입력 스트링상의 문법에 대응하는 푸시 다운 오토 마톤의 동적 프로그래밍 해석으로서;

  • 유한 상태 오토 마톤과 문법의 교차점을 구성하는 것입니다.

단일 스트링을 구문 분석 할 때, 고려 될 유한 상태 오토 마톤은 구문 분석 될 스트링 만을 인식하는 선형 오토 마톤입니다 (상태의 수는 ). FA 와 CF garmmar (Bar Hillel, Perlis, Shamir 1961) 의 교차 산물 구성을 적용하면 를 생성 하는 새로운 문법 인 새로운 CF 문법을 얻게 됩니다 . 일반적으로 간과했던 흥미로운 점은 가 에 의해 사용되는 구문 분석 트리 를 비 터미널 이름 변경 (교차 곱으로 인해)까지 보존 한다는 것 입니다.| | + 1 A G F L ( A ) L ( G ) F Gw|w|+1AGFL(A)L(G)FG

따라서 FA 입력 문자열 만 생성하는 경우 문법 는 해당 문자열 만 생성합니다 ( 이면 빈 언어 생성 ). 또한 가 생성하는 데 사용할 수 있는 모든 구문 분석 트리를 사용하여 생성합니다.F L ( G ) GAFL(G)G

이 문법 는 일반적으로 공유 구문 분석 포리스트 라고하며 , 모든 일반 CF 구문 분석 알고리즘은 CYK, Earley, 일반화 된 LR 또는 LL 등의 제품 간 다소 최적화 된 버전의 교차 제품 구성입니다. 그래서 내가 말하는 것은 그들에게도 적용됩니다.F

그러나 보시다시피, 누군가 그것에 관심이 있다면 전체 정규 세트를 파싱하는 것으로 일반화됩니다.

그것은 정확히 당신의 질문입니다. 문자열 있습니다. 당신은 당신의 경우에 어떤 주어진 내의 모든 문자열을 생성하는 변환기입니다 유한 상태 변환기에 의해 정의 된 몇 가지 변화에 그것을 구문 분석 할 Levenshtein 편집 거리 의 (그러나 변환기의 기원은 중요하지 않다가). 이러한 문자열 세트는 FA로 정의 할 수있는 정규 세트이며 각 문자열의 편집 거리를 계산할 수있는 가중치 전환이 있습니다.www

문법 와의 교차 곱을 수행하면 교차 에있는 모든 문자열을 생성 하는 공유 구문 분석 포리스트 문법 나타납니다. 또한 허용되는 각 문자열의 편집 거리를 계산할 수 있도록 일부 규칙에 가중치를 적용합니다.FGF

원하는 경우, 최소한의 거리로 현만 유지하는 데 사용할 수 있습니다.

그러나, 유한 상태 머신을 갖는 구성이 연관되기 때문에 이것은 약간 개선 될 수있다.

문제의 경우와 같이 항상 동일한 유한 상태 변환기를 사용하는 경우 올바른 방법 은 입력 문자열과 상관 없이 문법 와 변환기 (여기서는 Levenshtein 오토 마톤) 를 작성하는 것 입니다. 이는 입력 문자열 를 구문 분석하는 데 사용할 수있는 가중치 문법을 제공합니다 . 문제는 잔인한 교차로 구성으로 구문 분석하면 Levenshtein 거리 (예 : 에서 문자열을 제공한다는 것 입니다.w Σ GwΣ

이전과 동일한 결과를 얻기 위해 해당 구성을 정리하는 것이 쉽지만, 가장 좋은 방법은 Earley를 포함하여 문헌의 대부분의 파서에서 사용하는 동적 프로그래밍 조직과 같이보다 통제 된 교차로 구성이며 생성을 피하기 위해 사용하는 것입니다 거리를 계산하고 원하는 임계 값을 초과하면 계산 경로를 중단하여 쓸모없는 규칙. 동적 프로그래밍을 사용하여 입력까지의 거리가 가장 짧은 문자열의 구문 분석 포리스트 (또는 구문 분석 트리)를 직접 계산할 수도 있습니다.


이것이 도움이된다고 생각하지만 질문에 "너무 많이 읽은"것이므로 "정확히 질문입니다"와 같은 말을하는 것은 실제로 정확할 수 없습니다. 당신은 엄격히 공식화되지 않은 다소 모호한 질문을했고, 그것을 스스로 공식화하려고했다. 원래 다소 모호한 아이디어를 공식화하는 방법은 여러 가지가있을 수 있습니다. 먼저 Levenshtein DFA 구조가 무엇을 하는지를 신중하게 정의하고 (알려진 / 조사 된 것이 있지만 어떤 것이 논의되고 있습니까?)이 개념을 CFL에 일반화 할 수 있는지 설명 할 수 있습니다.
vzn

1
나는 실제로 서로를 보완하는 다른 형식을 제시합니다. 프로세스에서 가중치를 정확하게 사용하는 것과 같이 내가 얻지 못한 미묘한 부분이 있습니다. 이는 정확한 결과에 달려 있습니다. 저의 목적은 저 자신의 의견에 거의 관심이없는 답변을 제공하는 것이 아니라 문제에 대한 이해를 넓히는 것입니다. 사용 된 편집 거리의 선택은 중요하지 않으며 가중 유한 상태 변환기로 표현할 수있는 모든 작업에 적합합니다.
babou
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.