2013-04-02 2 views
2

NLTK의 문서와 같은 CFG에서와 같이 '정규 표현식'사이의 실제적인 차이점이 있습니까? 정규 언어가 아닌 문맥이없는 언어가 있기 때문에 분명히 있어야하지만 CFG 방식이 정규 표현식보다 빛나는 구체적인 예를 찾을 수는 없습니다. RegexpParser의 문서에서NLTK 정규 표현식과 CFG

http://nltk.org/book/ch07.html

답변

4

:

조항의 패턴은 순서대로 실행됩니다. 초기 패턴은 나중에 패턴이 실행되지 못하도록 청크 경계를 도입 할 수 있습니다. 때때로 개별 패턴은 이 입력의 여러 겹쳐진 범위에서 일치합니다. 보다 일반적으로 정규 표현식 대체와 마찬가지로, 청크는 이 가능한 첫 번째 일치를 식별 한 다음이 끝나면 과 일치하는 것을 계속 찾습니다.

문법의 절도 순서대로 실행됩니다. 캐스케이드 된 청크 파서는 둘 이상의 절이있는 것입니다. 이 청크 분석기에 의해 생성 된 구문 분석 트리의 최대 깊이는 이고 문법의 절 수와 같습니다.

즉, 각 절/패턴은 으로 실행됩니다. 따라서 이전 절의 결과와 일치하도록 나중에 절의 출력을 필요로하는 즉시 문제가 발생합니다. 고양이 스텝을 낮은 소리를 내며

:

실제적인 예는 더 큰 문장의 절로 사용할 수 있습니다 그 자체로 완전한 문장 수있는 방법은 무엇인가이다.

그는 고양이가 purried 것을 들었다.

그녀는 고양이가 돈을 끊었다는 소식을 들었습니다.

RegexpParser를 만들 때 위의 문서에서 읽을 수 있듯이이 문장의 "깊이"에 대한 임의의 제한을 설정하고 있습니다. 문맥 자유 문법에는 "재귀 제한"이 없습니다.

설명서에는이 문제를 다소 완화하기 위해 루핑을 사용할 수 있다고 언급되어 있습니다. 적절한 문법을 ​​2 ~ 3 번 실행하면 더 깊이 파싱 할 수 있습니다. 외부 논리를 추가하여 문법을 여러 번 반복하거나 더 이상 구문 분석 할 수 없을 때까지 반복 할 수 있습니다.

그러나 문서에도 언급되어 있듯이이 파서의 기본 접근 방식은 여전히 ​​"탐욕스러운"것입니다. 고정 된 또는 가변적 인 단계 수에 대해 이렇게 진행됩니다.

  • 한 단계로 할 수있는만큼 많은 청킹을 수행합니다.
  • 마지막 단계의 출력을 다음 단계의 입력으로 사용하고 반복하십시오.

초기 단계가 실수하면 전체 구문 분석이 손상 될 수 있기 때문에 이것은 순진합니다.는 "정원 경로 문장"의

생각해은 : 헛간 떨어졌다지나

말은 경주.

와 유사한 문자열하지만 완전히 다른 문장 :

말은 헛간을지나 경주.

이 두 문장을 구문 분석하는 RegexpParser를 구성하는 것이 어려울 수 있습니다. 그 방법은 올바른 초기 청킹에 의존하기 때문입니다. 하나에 대한 올바른 청킹은 다른 청크의 초기 청킹이 될 것입니다. 그러나 구문 분석 논리의 후기 수준에이를 때까지는 "현재있는 문장"을 알 수 없습니다.

예를 들어 "헛간이 떨어졌을 때"가 일찍 정리되면 구문 분석이 실패합니다.

"좋지 않은"구문 분석으로 끝날 때 외부 로직을 추가하여 더 나은 결과를 찾을 수 있는지 확인할 수 있습니다. 그러나, 그 시점에서 파싱 알고리즘의 중요한 부분은 RegexpParser 대신 외부 논리에 있다는 것을 알게 될 것입니다.