Browse Source

Melhora o código de indexação

pull/1249/head
Eduardo Calil 8 years ago
parent
commit
8cdbed8474
  1. 60
      sapl/base/search_indexes.py

60
sapl/base/search_indexes.py

@ -28,6 +28,34 @@ class DocumentoAcessorioIndex(indexes.SearchIndex, indexes.Indexable):
def index_queryset(self, using=None):
return self.get_model().objects.all()
def solr_extraction(self, arquivo):
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())
return extracted_data
def whoosh_extraction(self, arquivo):
return textract.process(
arquivo.path,
language='pt-br').decode('utf-8').replace('\n', ' ').replace(
'\t', ' ')
def print_error(self, arquivo):
msg = 'Erro inesperado processando arquivo: %s' % (
arquivo.path)
print(msg)
logger.error(msg)
def prepare(self, obj):
if not self.filename or not self.model or not self.template_name:
raise Exception
@ -45,37 +73,25 @@ class DocumentoAcessorioIndex(indexes.SearchIndex, indexes.Indexable):
# 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())
try:
extracted_data = self.solr_extraction(arquivo)
except Exception:
self.print_error(arquivo)
return self.prepared_data
# 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:
extracted_data = self.whoosh_extraction(arquivo)
except ExtensionNotSupported as e:
print(str(e))
logger.error(str(e))
return self.prepared_data
except Exception:
msg = 'Erro inesperado processando arquivo: %s' % (
arquivo.path)
print(msg)
logger.error(msg)
self.print_error(arquivo)
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:
t = loader.select_template((

Loading…
Cancel
Save