2012-04-03 4 views
1

사용자가 입력 한 문장이 문법적으로 올바른지 여부를 확인하기 위해 도구 (LEX & YACC)를 설계했습니다. 문장의 의미가 꽉 찼는 지 여부를 확인하는 법. 내 도구가 문장의 패턴을 인식합니다. 예 : 패턴 s + v + o의 경우 "책을 읽습니다."는 오른쪽 문장입니다! "나는 그 책을 마시고있다"는 의미가없는 패턴과 일치합니다! YACC에서 문장의 의미 검사 규칙을 부여하는 방법은 무엇입니까?문장을 검사하는 방법은 LEX & YACC를 사용하여 꽉 참인지 아닌지를 나타냅니다.

답변

4

공식 구문 분석 메커니즘을 사용하여 자연 언어를 구문 분석하려고합니다.

자연 langauges 좋은 깨끗한 문법 규칙을 따르지 않기 때문에 이것은 거의 작동하지 않습니다. 배울 필요가 있습니다 natural language parsing methods.

일단 원시 구문 분석이 끝나면 세계, 사물, 사물의 속성 및 사물이 상호 작용하는 방식에 대한 지식의 거대한 데이터베이스가 있어야합니다. 여기서 "책은 마실 수 없다"는 지식은 어디에서 오며, 당신의 파싱을 필터링하는 데 사용됩니다. 물론, 당신은이 지식을 당신의 YACC 문법에 추가 할 수 있습니다. 그리고 나서 당신의 예를 다루 겠지만, 사람들이 실제로 말하는 것을 다루기 위해서는 톤이 필요합니다. 또는 말하기가 합리적으로 불가능합니다.

"무색의 녹색 아이디어가 맹렬히 잤다". "마리아는 어린 양, 약간의 치즈, 그리고 약간의 마실 것"을 가지고있었습니다.

+0

제안 해 주셔서 감사합니다. 그것은 내가 사물을 분명히 이해하는 데 도움이되었습니다! –

1

문제의 첫 번째 부분에도 Yacc을 사용할 수 없습니다 : 문장이 문법인지 확인하십시오. 자연어에는 모호하지 않은 문맥없는 문법이 없습니다. 그래서 당신은 문장의 제한된 다양성을 인식하는 장난감 프로그램을 만들고 있습니다. 좋아, 그걸 지나쳐서 장난감이 이런 종류의 의미를 조작하게 만드는 방법에 대해 생각해 봅시다.

프로그래밍 언어의 함수처럼 "인수"의 종류를 나타내는 동사에 대한 데이터베이스를 만들기 만하면됩니다. 데이터베이스는 어떤 동사가 해당 동사를 수행하는지, 어떤 종류의 객체로, 가능한 악기를 사용하여 무엇을 상황 등

예 "그 개는 잎이 달린 의자를 썼다." 우리는 우리의 작은 장난감 데이터베이스에서 "쓰기"를 찾고 "dog"가 가능한 주제의 목록에 없다는 것을 알아야합니다. 동사는 전이 적이지만 "의자"는 가능한 직접 객체가 아니며 "leaf" 가능한 도구가 아닙니다.

그래서 Google 프로그램은 문장을 거부하고 그 이유 중 하나 이상을 제공 할 수 있습니다.

A는 정수이며 func는 두 개의 인수가있는 경우 B 문자열, 또는 func(A, B, C) 때, 말, A + B을 거부과 크게 다르지 않다.

상징적 인 표현을 쉽게 처리하는 언어로이 작업을 수행하는 것이 좋습니다. 이 작업은 트리 구조에서 패턴 일치를 수행 할 수 있다는 이점이 있습니다.

Lex와 Yacc은 실제로 이런 종류의 작업에 그다지 가치를 부여하지 않습니다. 최소한 C 코드를 생성하고 인터페이스하는 정규 lex 및 Yacc는 아닙니다.

+0

모호성은 YACC에서는 문제이지만 Earley 또는 GLR 파서에서는 문제가 아닙니다. –

+1

그 진술은 오해를 배제 할까 봐 걱정됩니다. GLR은 모호한 문법을 ​​다루는 방법이 아니라 LALR (1) (Yacc의 알고리즘)이 충분히 강력하지 않은 모호하지 않은 문법을 처리하는 방법입니다. GLR은 문맥없는 LR 문법이없는 영어와 같은 언어를 처리 할 수 ​​없습니다. LALR (1)은 lookahead의 토큰 하나와 구문 분석 테이블 압축에 대한 몇 가지 제한 사항을 가짐으로써 일부 문법에 대한 작업 테이블을 구성하는 것을 불가능하게함으로써 허튼 소리를냅니다. 임의의 미리보기 및 압축되지 않은 LR 테이블이 있어도 자연어는 구문 분석 할 수 없습니다. 도움이되지 않습니다. – Kaz

+0

글래스는 당신이 기대하는 것보다 더 잘 어울리는다고 생각합니다. (실제로 NLP 커뮤니티에서 온 것입니다.) 실제 컴퓨터 언어 용 구문 분석기는 상황에 맞는 언어를 실제로 사용합니다. 우리는 컨텍스트 - 프리 문법을 작성하고 원시 파싱 기계 외부에서 상황에 민감한 부분을 적용함으로써이를 처리하기로 선택합니다. 나는 왜 영어가 다른지 모르겠다 ... 당신은 그것을 (WLOG) * 컨텍스트 - 프리 문법 (최악의 경우 : "영어 = 단어 *;")을 쓸 수 있습니다. 문제는 원시 NLP 파서가 "파서 외부"검사와 비교하여 얼마나 많은 상황 별 감도를 처리하는지입니다. –

0

IRa Baxter 세계, 사물, 물건의 속성 및 사물과 상호 작용하는 방법에 대한 지식 데이터베이스를 보유하면 YACC 문법에이 지식을 약간 추가 할 수 있습니다. 사람들이 실제로 말하는 것을 처리하기 위해 톤이 필요하거나 합리적으로 말할 수 없게됩니다.

예제를 통해 YACC 문법에 지식을 추가하는 방법을 명확히 할 수 있습니다.