mirror of
https://github.com/Ai-hack-MAGNUM-OPUS/backend.git
synced 2024-11-10 18:26:34 +03:00
added docx parser, api call, paragraph typing
This commit is contained in:
parent
dd4ae8ee4e
commit
0c1d881dff
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,3 +1,6 @@
|
|||
media/
|
||||
.idea/
|
||||
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
from checker.models import ParagraphType
|
||||
|
||||
admin.site.register(ParagraphType)
|
|
@ -1,4 +1,3 @@
|
|||
from django.core.files.uploadedfile import InMemoryUploadedFile
|
||||
from rest_framework import serializers
|
||||
|
||||
from checker.models import Docx
|
||||
|
@ -9,6 +8,3 @@ class DocxSerializer(serializers.ModelSerializer):
|
|||
model = Docx
|
||||
fields = ["uuid", "file"]
|
||||
extra_kwargs = {"uuid": {"read_only": True}}
|
||||
|
||||
def validate_file(self, file: InMemoryUploadedFile):
|
||||
return file
|
||||
|
|
|
@ -9,3 +9,21 @@ class Docx(models.Model):
|
|||
default=uuid.uuid4, editable=False, unique=True, primary_key=True
|
||||
)
|
||||
file = models.FileField(upload_to="")
|
||||
|
||||
def __str__(self):
|
||||
return self.uuid
|
||||
|
||||
|
||||
class ParagraphType(models.Model):
|
||||
name = models.CharField(max_length=200)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.id} - {self.name}"
|
||||
|
||||
|
||||
class Paragraph(models.Model):
|
||||
text = models.TextField()
|
||||
type = models.ForeignKey(
|
||||
ParagraphType, related_name="paragraphs", on_delete=models.CASCADE
|
||||
)
|
||||
docx = models.ForeignKey(Docx, related_name="paragraphs", on_delete=models.CASCADE)
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
def process_paragraphs(text):
|
||||
paragraphs = {}
|
||||
c = 0
|
||||
for line in text:
|
||||
ind = line[:2]
|
||||
if len(ind) == 2 and ind[1] == ".":
|
||||
try:
|
||||
ind = int(ind[0])
|
||||
c = ind
|
||||
paragraphs[c] = ""
|
||||
except ValueError:
|
||||
print()
|
||||
if c:
|
||||
paragraphs[c] += line
|
||||
return paragraphs
|
|
@ -1,12 +1,19 @@
|
|||
from pprint import pprint
|
||||
import requests
|
||||
|
||||
import docx2txt
|
||||
from django.conf import settings
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
|
||||
from checker.models import Docx
|
||||
from checker.tasks import process_file
|
||||
from checker.services.file import process_paragraphs
|
||||
|
||||
|
||||
@receiver(post_save, sender=Docx)
|
||||
def create_player(sender, instance, created, **kwargs):
|
||||
def create_docs(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
process_file.delay(file=instance)
|
||||
document = docx2txt.process(instance.file.path)
|
||||
paragraphs = process_paragraphs(document.split("\n"))
|
||||
x = requests.post(settings.AI_URL, json=paragraphs)
|
||||
return
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
from celery import shared_task
|
||||
from uuid import uuid4
|
||||
|
||||
from checker.models import Docx
|
||||
|
||||
|
||||
@shared_task
|
||||
def process_file(file: Docx):
|
||||
return
|
||||
@shared_task(name="process_file")
|
||||
def process_file(file: uuid4):
|
||||
print(file)
|
||||
return file
|
||||
|
|
|
@ -15,9 +15,3 @@ app.config_from_object("django.conf:settings", namespace="CELERY")
|
|||
|
||||
# Load task modules from all registered Django apps.
|
||||
app.autodiscover_tasks()
|
||||
|
||||
|
||||
# TODO REMOVE THIS
|
||||
@app.task(bind=True)
|
||||
def debug_task(self):
|
||||
print(f"Request: {self.request!r}")
|
||||
|
|
|
@ -4,6 +4,9 @@ from pathlib import Path
|
|||
|
||||
ROOT_DIR = Path(__file__).resolve(strict=True).parent.parent.parent
|
||||
|
||||
AI_URL = "http://185.244.175.164:5000/api"
|
||||
# AI_URL = "http://127.0.0.1:5000"
|
||||
|
||||
APPS_DIR = ROOT_DIR
|
||||
env = environ.Env()
|
||||
|
||||
|
|
275
fixtures/paragraphtypes.json
Normal file
275
fixtures/paragraphtypes.json
Normal file
|
@ -0,0 +1,275 @@
|
|||
[
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 1,
|
||||
"fields": {
|
||||
"name": "Понятия, используемые для целей правового акта (при необходимости)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 2,
|
||||
"fields": {
|
||||
"name": "Цель предоставления субсидии"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 3,
|
||||
"fields": {
|
||||
"name": "Наименование органа государственной власти (государственного органа)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 4,
|
||||
"fields": {
|
||||
"name": "Порядок предоставления средств из бюджета"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 5,
|
||||
"fields": {
|
||||
"name": "Получатель субсидии"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 6,
|
||||
"fields": {
|
||||
"name": "Категории отбора получателей субсидий"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 7,
|
||||
"fields": {
|
||||
"name": "Размещение информации на едином портале бюджетной системы Российской Федерации"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 8,
|
||||
"fields": {
|
||||
"name": "Наличие способа проведения отбора"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 9,
|
||||
"fields": {
|
||||
"name": "Дата размещения объявления о проведении отбора"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 10,
|
||||
"fields": {
|
||||
"name": "Содержание объявления о проведении отбора"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 11,
|
||||
"fields": {
|
||||
"name": "Требования к участникам отбора"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 12,
|
||||
"fields": {
|
||||
"name": "Иные требования к участникам отбора"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 13,
|
||||
"fields": {
|
||||
"name": "Требования, предъявляемыек форме и содержанию предложений (заявок), подаваемых участниками отбора"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 14,
|
||||
"fields": {
|
||||
"name": "Информация о количестве предложений (заявок), которое может подать участник"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 15,
|
||||
"fields": {
|
||||
"name": "Правила рассмотрения и оценки предложений (заявок) участников"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 16,
|
||||
"fields": {
|
||||
"name": "Порядок формирования комиссии для рассмотрения и оценки предложений (заявок) участников"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 17,
|
||||
"fields": {
|
||||
"name": "Основание для отклонения предложения (заявки) участника"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 18,
|
||||
"fields": {
|
||||
"name": "Дата, на которую получатель субсидии должен соответствовать требованиям"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 19,
|
||||
"fields": {
|
||||
"name": "Перечень документов, представляемых получателем субсидии для подтверждения соответствия требованиям"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 20,
|
||||
"fields": {
|
||||
"name": "Порядок и сроки рассмотрения документов"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 21,
|
||||
"fields": {
|
||||
"name": "Основания для отказа получателю субсидии в предоставлении субсидии"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 22,
|
||||
"fields": {
|
||||
"name": "Размер субсидии и (или) порядок расчета размера субсидии"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 23,
|
||||
"fields": {
|
||||
"name": "Предоставление субсидии в очередном финансовом году получателю субсидии"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 24,
|
||||
"fields": {
|
||||
"name": "Условия и порядок заключения соглашения"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 25,
|
||||
"fields": {
|
||||
"name": "Требования об условиях согласования новых условий"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 26,
|
||||
"fields": {
|
||||
"name": "Дополнительные условия к порядку заключения соглашения"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 27,
|
||||
"fields": {
|
||||
"name": "Результаты предоставления субсидии"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 28,
|
||||
"fields": {
|
||||
"name": "Сроки (периодичность) перечисления субсидии"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 29,
|
||||
"fields": {
|
||||
"name": "Счета, на которые перечисляется субсидия"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 30,
|
||||
"fields": {
|
||||
"name": "Направление расходов"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 31,
|
||||
"fields": {
|
||||
"name": "Запрет на приобретение иностранной валюты"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 32,
|
||||
"fields": {
|
||||
"name": "Согласие на проведение проверки"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 33,
|
||||
"fields": {
|
||||
"name": "Направление затрат (недополученных доходов)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 34,
|
||||
"fields": {
|
||||
"name": "Перечень документов, подтверждающих фактически произведенные затраты (недополученные доходы)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 35,
|
||||
"fields": {
|
||||
"name": "Иная информация"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 36,
|
||||
"fields": {
|
||||
"name": "Порядок и сроки представления получателем субсидии отчетности"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 37,
|
||||
"fields": {
|
||||
"name": "Требования об осуществлении контроля (мониторинга) за соблюдением условий, целей и порядка предоставления субсидий и ответственности за их нарушение"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 38,
|
||||
"fields": {
|
||||
"name": "Меры ответственности за нарушение условий, целей и порядка предоставления субсидий"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "checker.paragraphtype",
|
||||
"pk": 39,
|
||||
"fields": {
|
||||
"name": "Предоставление средств субсидии третьим лицам"
|
||||
}
|
||||
}
|
||||
]
|
|
@ -14,4 +14,4 @@ django_celery_results==2.4.0
|
|||
psutil
|
||||
dj-database-url
|
||||
uuid
|
||||
python-docx
|
||||
docx2txt
|
Loading…
Reference in New Issue
Block a user