나는 엄밀히 구성된 영어의 아주 작은 하위 집합을 의미 론적 파싱을위한 토큰에 넣을 수 있어야하는 작은 하스켈 프로젝트에 참여하고 있습니다. 이것은 발행 된 명령보다 많은 다른 최종 효과를 가진 시스템에 대해 매우 순진한 자연어 인터페이스입니다. 나는 현재이 용도로 Alex를 사용하고 있지만 Alex는 사전에 의존하여 정적으로 컴파일됩니다. 시스템의 본질은 컴파일 후 세계의 엔드 이펙터의 수와 타입이 증가하고 감소 할 수 있기 때문에 런타임에 어빌리티에서 실행 가능한 토큰을 추가하거나 제거 할 수 있어야합니다.런타임 동적 어휘집을 허용하는 하스켈의 어휘 분석을위한 상용 솔루션이 있습니까?
내가 동적 렉싱 솔루션을 둘러보고 시도했습니다, 그리고 내가 할 수있는 가장 가까운 this 내가 좋아하는 몇 가지 방법을 생각해 왔던
2000 년 이후 업데이트 된 것으로 보이지 않는 동적 렉서 엔진이었다 (Attoparsec, 아마도)보다 낮은 수준의 접근법을 사용하거나 Alex의 재 컴파일 훅을 연결하고 나머지 응용 프로그램과 렉서를 분리 할 수도 있습니다.
이런 종류의 어휘 분석을위한 잘 알려진 해결책이 있습니까? Natural Language Processing for the Working Programmer을 통해 작업 할 예정이므로 덜 단순화 된 접근 방식을 취할 수 있지만 현재 기본적으로 렉서가 필요합니다.
성능 문제는 얼마나됩니까? 많은 효율성을 필요로하는지 여부에 따라 매우 간단한 솔루션을 상상할 수 있습니다. – sclv
@sclv 성능은 실시간에 가깝습니다 (응답 성의 관점에서 결정론적인 의미는 아닙니다). –
Dynamic Lexer Engine은 오랫동안 업데이트되지 않았기 때문에 자동으로 나쁜 것은 아닙니다. 어쩌면 이미 완벽하고 업데이트 할 필요가 없을 수도 있습니다. :) –