Pergunta

Eu estou procurando direção e tentando rótulo este problema:

Eu estou tentando construir um motor simples inferência (há um nome melhor?) Em Python que terá uma string e -

1 - criar uma lista de símbolos por simplesmente criar uma lista de espaço em branco separada valores

2 - categorizar esses tokens, usando expressões regulares

3 - Use um conjunto maior nível de regras para tomar decisões com base nas categorizações

Exemplo:

"90001" - um símbolo, corresponde ao regex CEP, existe uma regra para uma string contendo apenas um código postal faz com que um determinado comportamento para ocorrer

"30 + 14" - três fichas, regexs para valor numérico e operadores matemáticos coincidirem, existe uma regra para um valor numérico seguido por um operador matemático seguido por outro valor numérico faz com que um determinado comportamento para ocorrer

Eu estou lutando com a melhor forma de fazer Etapa # 3, o conjunto de maior nível de regras. Tenho certeza de que alguma estrutura deve existir. Alguma ideia? Além disso, como você caracterizaria esse problema? Regra sistema baseado, sistema especialista, motor de inferência, outra coisa?

Obrigado!

Foi útil?

Solução

Eu estou muito surpreso que a etapa # 3 é o que lhe dá problemas ...

Assumindo que você pode rotular / categorizar corretamente cada token (e que, antes de categorização pode encontrar as fichas apropriadas, como pode haver muitos casos ambíguos ...), a "Etapa # 3" problema parece que poderia ser facilmente resolvido com uma gramática livre de contexto , onde cada uma das ações desejadas (de pesquisa, tais como ZIP código ou de cálculo expressão matemática ...) seria símbolos com sua regra de produção própria feita das possíveis categorias de tokens. Para ilustrar isso na notação BNF, poderíamos ter algo parecido

<SimpleMathOperation> ::= <NumericalValue><Operator><NumericalValue>

Talvez a sua preocupação é que quando as coisas ficam complicadas, torna-se difícil expressar toda a exigência em termos de regras não conflitantes gramática. Ou talvez a sua preocupação é que se pode adicionar regras de forma dinâmica, portanto, forçando a gramática lógica "compilação" para ser integrado com o programa? Seja qual for a preocupação, eu acho que este terceiro passo será comparativamente ser trivial.

Por outro lado, ea menos que as várias categorias (e texto de entrada subjacente) são tais que pode ser descrito com uma linguagem regular, bem (como você parece sugerir na questão), um analisador de texto e classificador (Passos # 1 e # 2 ...) é tipicamente um menos de assunto trivial ..

Alguns exemplos de Python bibliotecas que a escrita simplificar e gramáticas avaliando:

Outras dicas

Parece que você procurar "gramática inferência" (indução gramática) biblioteca.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top