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. 52
      sapl/base/search_indexes.py

52
sapl/base/search_indexes.py

@ -1,17 +1,20 @@
import logging
import os.path
import re
import string
import textract
from django.template import Context, loader
from django.template import loader
from haystack import indexes
from textract.exceptions import ExtensionNotSupported
from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa
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)
class DocumentoAcessorioIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
@ -40,19 +43,38 @@ class DocumentoAcessorioIndex(indexes.SearchIndex, indexes.Indexable):
if not os.path.splitext(arquivo.path)[1][:1]:
return self.prepared_data
try:
extracted_data = textract.process(
arquivo.path,
language='pt-br').decode('utf-8').replace('\n', ' ')
except ExtensionNotSupported:
return self.prepared_data
except Exception:
msg = 'Erro inesperado processando arquivo: %s' % arquivo.path
print(msg)
logger.error(msg)
return self.prepared_data
extracted_data = extracted_data.replace('\t', ' ')
# 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:
extracted_data = textract.process(
arquivo.path,
language='pt-br').decode('utf-8').replace('\n', ' ')
except ExtensionNotSupported:
return self.prepared_data
except Exception:
msg = 'Erro inesperado processando arquivo: %s' % (
arquivo.path)
print(msg)
logger.error(msg)
return self.prepared_data
extracted_data = extracted_data.replace('\t', ' ')
# Now we'll finally perform the template processing to render the
# text field with *all* of our metadata visible for templating:

Loading…
Cancel
Save