파이썬에 추론 엔진 구축
-
18-09-2019 - |
문제
나는 방향을 찾고 있습니다 상표 이 문제:
파이썬에 간단한 추론 엔진 (더 나은 이름이 있습니까?)을 구축하려고합니다.
1- 단순히 공백 분리 된 값 목록을 작성하여 토큰 목록을 만듭니다.
2- 일반 표현식을 사용 하여이 토큰을 분류하십시오
3- 더 높은 수준의 규칙 세트를 사용하여 분류에 따라 결정을 내립니다.
예시:
"90001" - 하나의 토큰은 Zipcode Regex와 일치하며 규칙이 있습니다. 우편 번호 만 포함하는 문자열 특정 행동이 발생합니다
"30 + 14" - 3 개의 토큰, 수치 값에 대한 정규식 및 수학 연산자 일치, 규칙이 존재합니다. 수치 값과 수학 연산자가 뒤 따르는 다른 수치 값이 뒤 따릅니다. 특정 행동이 발생합니다
나는 3 단계를 가장 잘하는 방법, 더 높은 수준의 규칙 세트에 어려움을 겪고 있습니다. 일부 프레임 워크가 존재해야한다고 확신합니다. 어떤 아이디어? 또한이 문제를 어떻게 특성화 하시겠습니까? 규칙 기반 시스템, 전문가 시스템, 추론 엔진 등이 있습니까?
감사!
해결책
3 단계 #3이 당신에게 어려움을 겪는 사람이라는 것에 매우 놀랐습니다 ...
각 토큰을 올바르게 레이블링/분류 할 수 있다고 가정하면 (그리고 분류하기 전에 많은 모호한 경우가있을 수 있으므로 적절한 토큰을 찾을 수 있습니다 ...), "3 단계"문제는 컨텍스트가없는 문법으로 쉽게 다룰 수있는 것 같습니다. 원하는 동작 (예 : 우편 번호 조회 또는 수학적 표현 계산 등)은 가능한 토큰 범주로 만들어진 생산 규칙 자체가있는 기호가됩니다. 이것을 BNF 표기법으로 설명하기 위해
<SimpleMathOperation> ::= <NumericalValue><Operator><NumericalValue>
어쩌면 당신의 관심사는 상황이 복잡해지면 비 분쇄 된 문법 규칙에 따라 전체 요구 사항을 표현하기가 어려워 질 것입니다. 아니면 당신의 관심사는 규칙을 동적으로 추가 할 수 있으므로 문법 "컴파일"논리가 프로그램과 통합되도록 강요 할 수 있다는 것입니다. 우려가 무엇이든, 나는이 세 번째 단계가 비교적 사소 할 것이라고 생각합니다.
반면에, 다양한 범주 (및 기본 입력 텍스트)가 일반 언어로 설명 할 수있는 경우 (질문에서 힌트를 힌트하는 것처럼) 텍스트 파서 및 분류기 (1 단계 및 1 단계 및 #2 ...)는 일반적으로 사소한 일보다 적습니다 ..
문법 작성 및 평가를 단순화하는 Python 라이브러리 : 일부 예 :
다른 팁
"문법 추론"(문법 유도) 라이브러리를 검색하는 것처럼 보입니다.