Este é um projeto pessoal que fiz para aprender mais sobre duas coisas: sistemas de recuperação de informações e combinadores de analisador.
Em essência, este programa é um repl com dois comandos: índice e consulta.
Confira o repositório, CD no diretório, execute 'pilha de construção'
Pilha: https://docs.haskellstack.org/en/stable/readme/
A pilha é incrível. Use pilha.
Você tem duas opções.
Não entrar em pânico! Isso está funcionando como pretendido. Este é um REPL simples, portanto o programa está esperando que você execute comandos. O programa suporta dois - índice e consulta.
O comando do índice indexa um documento e o prepara para pesquisas. O comando leva dois argumentos. O primeiro é um índice de documentos, em forma inteira. O segundo é uma lista de palavras, separadas pelo espaço em branco.
Alguns comandos de exemplo:
Observe que, se você reutilizar um índice, o documento anterior será excluído a favor do novo. Portanto, se você executar os comandos acima e procurar pizza, não obterá nenhum resultado.
As palavras na lista de palavras devem ser compostas por letras. Números e símbolos não são válidos e lançarão um erro.
O comando consulta executa uma pesquisa nos documentos que você indexou anteriormente. A consulta mais simples é de uma única palavra:
Mas eles podem se tornar mais avançados e particulares, juntando -se a termos com operadores booleanos - | (ou) e & (e), assim:
Você pode aninhar essas consultas para o comprimento arbitrário, mas, ao adicionar operadores, a consulta levará mais tempo para ser executada. Isso ocorre porque a biblioteca de texto completo não suporta consultas booleanas, apenas pesquisas de termo. Portanto, este aplicativo deve ingressar (por união ou por cruzamento), o índice resultante lista manualmente.
Observe também que cada termo deve ser aninhado em Parens. Finja que você está em uma variante estranha de Lisp e ficará bem.
Basta inserir um comando vazio. Ctrl-D também funcionará (EOF).