내 독서에서 대부분의 문법은 무한한 수의 문자열을 생성하는 데 관심이있는 것 같습니다. 다른 방법으로 일하면 어떻게 되나요?
길이가 m 인 n 개의 문자열이 주어진 경우 해당 문자열을 생성하는 문법과 해당 문자열 만 생성 할 수 있어야합니다.
이를위한 알려진 방법이 있습니까? 이상적으로는 연구 할 수있는 기술 이름입니다. 또는 그러한 방법을 찾기 위해 문헌 검색을 어떻게해야합니까?
내 독서에서 대부분의 문법은 무한한 수의 문자열을 생성하는 데 관심이있는 것 같습니다. 다른 방법으로 일하면 어떻게 되나요?
길이가 m 인 n 개의 문자열이 주어진 경우 해당 문자열을 생성하는 문법과 해당 문자열 만 생성 할 수 있어야합니다.
이를위한 알려진 방법이 있습니까? 이상적으로는 연구 할 수있는 기술 이름입니다. 또는 그러한 방법을 찾기 위해 문헌 검색을 어떻게해야합니까?
답변:
이것은 "문법 유도"의 일반적인 주제에 속한다. 이 문구를 검색하면 수많은 문헌이 나타납니다. 예를 들어 컨텍스트 프리 문법 유도 , https://en.wikipedia.org/wiki/Grammar_induction , https://cstheory.stackexchange.com/q/27347/5038을 참조하십시오 .
일반 언어 (문맥이없는 언어가 아닌) 는 정규식 골프 NP- 완료입니까?를 참조하십시오 . , 주어진 문자열을 수락하고 다른 주어진 문자열을 거부하는 가장 작은 DFA , 정규 세트 학습을위한 Dana Angluin 알고리즘 및 https://cstheory.stackexchange.com/q/1854/5038 이 개선 되었습니까 ?
여러 가지 방법이 있으므로 결과의 품질에 대한 추가 기준을 부과해야합니다.
당신이 요구하는 것은 검색 색인과 유사합니다. 실제로 유한 상태 변환기를 작성하여 텍스트를 인식하는 데 사용할 수 있습니다. 예를 들어 Lucene은이 알고리즘을 사용합니다. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698
실용적으로 사용하려면 Andrew Gallant가 작성한이 블로그 게시물을 확인하십시오. Automata 및 Rust가있는 인덱스 1,600,000,000 키
이 글에서 그는 모든 단어를 인식 할 수 있도록 텍스트 모음에 FSA를 구성하는 방법을 설명합니다. 최종 결과는 미리 정렬 된 키로부터 선형 시간과 일정한 메모리로 대략 최소 FST를 구성하는 것입니다.
구현은 그의 fst
라이브러리 에서 사용할 수 있습니다 : https://github.com/BurntSushi/fst
reinierpost가 제기 한 질문에 대한 답변으로 원래 질문에도 답변합니다.
우리는 다음과 같이 사전 오토 마톤을 구성합니다 :
오토 마톤의 최대 크기는 입력 문자열의 총 길이입니다. 일정한 시간에 전환을 시뮬레이션하고 새로운 전환을 만들 수 있다고 가정하면 런타임은 입력 문자열의 총 길이입니다. 최상의 경우 나 최악의 경우는 없습니다.
이 오토 마톤은 최소입니다. 일반적인 경우에 오토마타와 문법은 거의 일대일로 대응하기 때문에 문법에서도 마찬가지입니다.