Git Product home page Git Product logo

docsolr's Introduction

Diário Livre

Sistema de busca do Diário Oficial Municipal de São Paulo. Atualmente rodando aqui: http://devcolab.each.usp.br/do/

Instalação

Para deixar esta aplicação funcionando, siga os seguintes passos:

Instalar o Ruby on Rails

Para o desenvolvimento desta aplicação foram utilizadas as seguintes versões de software:

Versão do Ruby: 2.1.2

Versão do Rails: 4.1.2

Configuração

  • Crie um diretório com todo o conteúdo deste repositório.

  • Rode o seguinte código na linha de comando:

cd (diretório da aplicação)
bundle install
rake db:migrate
  • Para alterar a porta que dá acesso ao Solr (por padrão 8080), altere os arquivos solr.yml e jetty.yml do diretório conf.

Inicialização

Depois de rodar o seguinte código na linha de comando:

cd (diretório da aplicação)
rails s

Você poderá acessar o site em http://localhost:3000.

Atenção!!!: Caso você vá rodar o código em produção dessa forma, não esqueça de alterar as senhas no arquivo config/secrets.yml conforme as instruções no mesmo.

Configurações do Solr

Os arquivos armazenados no diretório files_solr deste repositório devem ser colocados na pasta base do solr (no ubuntu /usr/share/solr).

Indexação de conteúdo

Para indexar o CSV com o conteúdo dos DOCs, basta utilizar a api do Solr:

http://localhost:8080/solr/docsolr/update/csv?stream.file=/home/rafa/Downloads/saidas/saida001.csv&commit=true&header=true&fieldnames=id,data,retranca,tipo_conteudo,secretaria,orgao,texto&stream.contentType=text/csv;charset=utf-8

  • Se o arquivo não possui o nome dos campos, então header=false.

  • id e não ID (isso ajudou na integração com a biblioteca Blacklight).

  • Pelos meus testes iniciais, consegui indexar um arquivo de dezenas de mb desta forma, então é recomendável criar vários arquivos de no máximo algumas dezenas de mb e indexá-los através da api do solr.

Licença

Este projeto está sob licença AGPL.

docsolr's People

Contributors

andresmrm avatar rafaeusantana avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

docsolr's Issues

tratamento para quebrar mix de textos em documentos normativos distintos

Não ainda recurso para se localizar leis, decretos, portarias, etc.

EXEMPLO: a Portaria 1145 de 2010 só pôde ser localizada depois de fornecer a data precisa (3/10/2010), mas ainda assim seu texto vem misturado a outras portarias (em conjunto ditas "despachos")

Num primeiro momento pode-se imaginar uso de regular expression, por exemplo,
/(PORTARIA|LEI|DECRETO) \d[\.\d]*,? DE \d+ DE [A-Z]+ DE \d\d\d\d/
que garantiria o reconhecimento do tipologia de norma (lei, decreto, etc.) .... Analisando a fonte XML, todavia, vemos que pode ser mais preciso e viável,

Cada norma está já marcada com "tags" (não-XML) que poderiam ser convertidas em tags HTML ou XML.. "((TITULO))PORTARIA 1145, DE 3 DE DEZEMBRO DE 2010 ((TEXTO))GILBERTO ...".

Documentação para desenvolvedores

Seguindo sugestões, seria bacana ter uma documentação para desenvolvedores, explicando melhor como baixar os dados e fazer buscas pela "API".

Integrar com LexML

Por @augusto-herrmann:

Sugestões:

  1. para o conteúdo dos textos em formato XML do conteúdo dos textos,
    utilizar o esquema padrão do LexML (parte 3 da documentação) [1];
  2. para o identificador de cada texto do diário oficial, usar o padrão URN
    do LexML (parte 2 da documentação) [1];
  3. enviar metadados para o LexML por OAI-PMH, de modo que os textos possam
    ser indexados pelo buscador do LexML [2]. As instruções de como fazer isso
    estão na parte 4 da documentação do LexML [1].

Tenho muito mais ideias, mas essas são as mais simples e que darão os
melhores resultados no curto prazo. Se quiser ideias de coisas mais
avançadas para o futuro, é só dizer. :)

[1] http://projeto.lexml.gov.br/
[2] http://www.lexml.gov.br

Filtro de data parece não estar funcionando

No menu "Data de Publicação", há opção de filtrar por publicações de "menos de 1 semana", "menos de 1 mês", etc.

No entanto, hoje (12/02), quando selecionada a opção "menos de 1 semana", o sistema retorna resultados de cerca de um mês atrás (15/01).

Atraso na disponibilização

Via lista okf-br:

Eu vi que eles estão publicando os dados, mas ainda tão com um atraso de 3 dias.

Faz idéia se eles vão manter isso desse jeito, fora isso não achei em nehum lugar um feed dessas noticias.

Será que tem?

Referenciar as páginas do DO original

Adicionando sugestão:

A descrição da página em que o texto se encontra na publicação original deveria ser mais explícita.

Seria bacana referenciar a página do DO publicado e colocar um link para a versão online no site da Imprensa Oficial...

Explicar sobre AND e OR na busca avançada

Como são feitas as buscas do tipo:
"palavras na mesma ordem"
uma OR outra OR palavra
uma AND outra AND palavra

Seria bom explicar como ter esses efeitos na página de busca avançada.

Tratamento do TXT, limites consensuais

O texto original, o tal "TXT com retrancas" é horrível para mostrar para o grande público e impalatável para qualquer sistema de análise computacional... Assim existem dois objetivos maiores na transcrição do TXT-retrancado em algo mais útil e bonito (podemos supor XML):

  1. Extrair metadados: do ponto de vista computacional o conteúdo em si de um lei, decreto, contrato, extrato, etc. não interessa, pode ser repassado ao usuário tal qual foi entregue; mas interessam trechos e códigos (identificadores) que servirão de atributos daquele conteúdo. Exemplos: reconhecer identificador do documento (ex. epígrafe de um decreto), identificador de tipo de documento (ex. distinguir tipo ou autoridade de uma lei), CNPJ da entidade associado ao documento, localização da entidade expressa por nome de logradouro, numeração predial e CEP.
  2. Reconhecer e converter marcas XHTML relevantes: parágrafos, negritos, itálicos, seções, subseções, etc. que for possível. Em seguida, idealmente, "dar um tapa" para ficar parecido com o layout do Diário Oficial, ou para dar destaque aos metadados.

A seguir um lembrete, para todos podermos falar a "mesma língua" neste projeto, assim como verificarmos consensos, sobre os limites da automação, e as soluções clássicas do problema... Se o lembrete faz sentido, fica a sugestão: documentar mais formalmente e usar como referência nas discussões e na justificativa das decisões de projeto.

Limites da automação

  • Limites na extração automática de metadados: o reconhecimento de padrões (ex. regular expressions ou parsers estatísticos) depende do texto original cumprir com esses padrões. Tanto o baixo controle do processo (o autor tem liberdade de errar) como a estatística (amostragens sobre as fontes do Diário Livre) demonstram a alta diversidade de padrões, e variabilidade não-padronização nos originais. A viabilidade do projeto é proporcional à satisfação do público com essa taxa de erros.
  • Limites da conversão automática para XHTML: apenas grandes blocos de conteúdo, e as marcas de retrancas, podem ser utilizados para a conversão XHTML. O reconhecimento por exemplo de artigos, itens, alienas, etc. de uma lei ou decreto, requer um tratamento mais sofisticado (vide "Investimento computacional" abaixo).

Ignorando-se as limitações quanto à "riqueza de informação", indicadas acima, resta ainda a "completeza", ou seja, o percentual de documentos que pode de fato ser convertido com sucesso sem intervenção humana. Numa análise otimista, pode-se supor que 80% dos textos do Diário Livre podem ter seu processamento primário automatizado. A limitação de completeza seria caracterizada pelos 20% restantes, que não foram processados ou que se supõe processados mas possuem falhas.

Soluções

As soluções clássicas de tratamento de TXT podem ser exemplificadas pela biblioteca de regular expressions da tese de Dorante 1997, e pelo software GutenMark. As limitações clássicas são bem conhecidas...

Além disso o input TXT é ruim e pobre, o ideal (e uma solução!) seria obter na origem o texto marcado, exportado por exemplo como HTML.

Lobby por melhor input

Na CGM de São Paulo tem tomado a frente dessa importante solução, que seria válida para documentos futuros, mas fica o problema para todo o acervo retrospectivo, de anos.

Investimento humano

Numa análise otimista, pode-se supor que 80% dos textos podem ter seu processamento primário automatizado. Temos dois problemas:

  • Como saber se um documento faz ou não parte dos 20% falhos?
  • O que fazer com esses 20%, descartar? E quando um documento de interesse da comunidade está justamente contido nesses 20%?

Já foram sugeridos mecanismos do tipo "Like" para que navegantes indiquem que o documento por onde navegou estava em ordem ou não, solucionando (informalmente) o primeiro problema.

Já quanto a não-descartar: uma comunidade de interesse (estilo Wikipedia) ou prestação de serviços paga (a custo avaliado em R$5 a R$50 por documento) assumiriam a revisão desses 20%, ou pelo menos dos documentos relevantes e contidos nesses 20%.

Investimento computacional

Existem ferramentas computacionais, mas elas exigem investimento muito maior por dois motivos:

  • requerem um uma amostragem de "original vs corrigido" para que as soluções sejam testadas e calibradas. Logo, demanda investimento humano lembrado acima, mesmo que reduzido não é desprezível.
  • requerem arquitetura mais complexa (vide ex. soluções NLP), muito mais memória e CPU por documento, e gente especializada para fazer os dividos ajustes e adaptações. Estatísticas, redes neurais, etc. todos demandam adaptação e experts bem treinados para fazer essas adaptações. Problema adicional: são soluções especializadas num corpus ou estilo de texto, se muda o estilo ou o comportamento do corpus, a solução não resolve. Em geral o primeiro passo é organizar os documentos em grupos e avaliar quais grupos são maiores e/ou de maior interesse.

Pensar na forma como o Google indexa o diário livre

Na minha visão, o Google deveria indexar somente os artigos. Não deveria indexar os resultados de busca (um resultado de busca que tem um link para outro resultado de busca), e nem deveria indexar os .xml e .json.

Possíveis melhorias para interface

Por Edson Antônio:

Caixa Alta nas secretarias,
Por que não ninguém organiza o Json. É processado exclusivamente por
máquina?
E se a própria máquina organizasse?
No seguinte sentido?

[{
id: 1244544,
nome: "Fulano",
setor: "Diretoria de Tecnologia";
}]

O filtro de secretaria deveria estar no mesmo nível do Sua busca por. Ao
selecionar uma determinada secretaria, os outros se carregariam somente com
dados da mesma.
Por exemplo. Habitação. Dai apareceriam outros com Assistência e
desenvolvimento social e outros assuntos relacionados.....Quando se
selecionasse assistência e desenvolvimento social apareceriam somente
assuntos relacionados a assistência e desenvolvimento social. E vai por ai.

Dai cara, quando a busca fosse feita, a melhor disposição que eu acho,
seria uma tabela com campos,

desta forma no lado esquerdo eu estou achando que confunde o usuário.
Texto é realmente necessário?

Os campos deveriam ser data da publicação, assunto, um para favoritar
seria legal no final.A ordenação e a navegação estão boas, só a disposição
que poderia ser melhor. Falando assim é difícil. O melhor seria fazer uma
interface ou desenhar para lhe mostrar.

O que eu estou sugerindo é mais ou menos que o layout fosse mais
horizontal. Está muito verticalizado.

Links para decretos citados

Adicionando sugestão:

Quando citado decretos e/ou outros documentos, poderíamos ter um link para ele; o mesmo valeria para processos (indexar pelo seu número, por exemplo), facilitando a visualização dos últimos andamentos.

Seguir esquema REST

Algo como:
/2013 - retorna todos os DOs de 2013
/2013/02 - retorna todos os DOs de fevereiro de 2013
...

Melhorar usabilidade?

"O LOCALIZADOR QUANDO A GENTE ENTRE EM UM ITEM ESPECÍFICO, PARECE QUE SUMIU, MAS ESTA ACIMA A ESQUERDA. A MAIORIA DOS SITES COLOCA A BUSCA PRÓXIMA DOS ITENS SOLICITADOS E QUASE SEMPRE ESTÃO A DIREITA DE QUEM OLHA. DEPOIS DE ALGUM TEMPO EU ACHEI LÁ EM CIMA. "

Melhorar usabilidade?

Usar locale pt-BR e não pt em produção

Não sei porque, rodando o código em modo produção, ele usa locale "pt" e não "pt-BR".
Isso me obrigou a criar um arquivo config/locales/blacklight.pt.yml análogo ao config/locales/blacklight.pt-BR.yml.

Mudar cores?

"A cor: marrom não é uma boa cor para se olhar todos os dias.. vermelho, azul, verde...tudo bem!"

Domínio para a ferramenta

Adicionando sugestão:

Não consegui achar o endereço de maneira tão fácil no Google, tentando de primeira acessá-lo pelo "www.colab.each.usp.br" Claro que ainda é um beta, mas seria bom já criar um domínio fácil de lembrar.

Artigos do futuro

Há artigos de dezembro de 2014...
Ou ver porque estão sendo indexados com a data errada, ou fazer com que o site não exiba artigos do futuro no começo das buscas, pega mal. =P

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.