Browse Source

Utiliza Solr para extração de texto (#1219)

pull/1242/head
Eduardo Calil 8 years ago
committed by Edward
parent
commit
9a8ce5abff
  1. 28
      sapl/base/search_indexes.py

28
sapl/base/search_indexes.py

@ -1,17 +1,20 @@
import logging import logging
import os.path import os.path
import re
import string
import textract import textract
from django.template import Context, loader from django.template import loader
from haystack import indexes from haystack import indexes
from textract.exceptions import ExtensionNotSupported from textract.exceptions import ExtensionNotSupported
from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa
from sapl.norma.models import NormaJuridica from sapl.norma.models import NormaJuridica
from sapl.settings import BASE_DIR from sapl.settings import BASE_DIR, SOLR_URL
logger = logging.getLogger(BASE_DIR.name) logger = logging.getLogger(BASE_DIR.name)
class DocumentoAcessorioIndex(indexes.SearchIndex, indexes.Indexable): class DocumentoAcessorioIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True) text = indexes.CharField(document=True, use_template=True)
@ -40,6 +43,24 @@ class DocumentoAcessorioIndex(indexes.SearchIndex, indexes.Indexable):
if not os.path.splitext(arquivo.path)[1][:1]: if not os.path.splitext(arquivo.path)[1][:1]:
return self.prepared_data return self.prepared_data
# Em ambiente de produção utiliza-se o SOLR
if SOLR_URL:
extracted_data = self._get_backend(None).extract_file_contents(
arquivo)['contents']
# Remove as tags xml
extracted_data = re.sub('<[^>]*>', '', extracted_data)
# Remove tags \t e \n
extracted_data = extracted_data.replace(
'\n', ' ').replace('\t', ' ')
# Remove sinais de pontuação
extracted_data = re.sub('[' + string.punctuation + ']',
' ', extracted_data)
# Remove espaços múltiplos
extracted_data = " ".join(extracted_data.split())
# Em ambiente de DEV utiliza-se o Whoosh
# Como ele não possui extração, faz-se uso do textract
else:
try: try:
extracted_data = textract.process( extracted_data = textract.process(
arquivo.path, arquivo.path,
@ -47,7 +68,8 @@ class DocumentoAcessorioIndex(indexes.SearchIndex, indexes.Indexable):
except ExtensionNotSupported: except ExtensionNotSupported:
return self.prepared_data return self.prepared_data
except Exception: except Exception:
msg = 'Erro inesperado processando arquivo: %s' % arquivo.path msg = 'Erro inesperado processando arquivo: %s' % (
arquivo.path)
print(msg) print(msg)
logger.error(msg) logger.error(msg)
return self.prepared_data return self.prepared_data

Loading…
Cancel
Save