mirror of
https://github.com/Ai-hack-MAGNUM-OPUS/backend.git
synced 2024-11-24 17:23:44 +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
|
# Byte-compiled / optimized / DLL files
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.py[cod]
|
*.py[cod]
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
# Register your models here.
|
# 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 rest_framework import serializers
|
||||||
|
|
||||||
from checker.models import Docx
|
from checker.models import Docx
|
||||||
|
@ -9,6 +8,3 @@ class DocxSerializer(serializers.ModelSerializer):
|
||||||
model = Docx
|
model = Docx
|
||||||
fields = ["uuid", "file"]
|
fields = ["uuid", "file"]
|
||||||
extra_kwargs = {"uuid": {"read_only": True}}
|
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
|
default=uuid.uuid4, editable=False, unique=True, primary_key=True
|
||||||
)
|
)
|
||||||
file = models.FileField(upload_to="")
|
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.db.models.signals import post_save
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
|
|
||||||
from checker.models import Docx
|
from checker.models import Docx
|
||||||
from checker.tasks import process_file
|
from checker.services.file import process_paragraphs
|
||||||
|
|
||||||
|
|
||||||
@receiver(post_save, sender=Docx)
|
@receiver(post_save, sender=Docx)
|
||||||
def create_player(sender, instance, created, **kwargs):
|
def create_docs(sender, instance, created, **kwargs):
|
||||||
if created:
|
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
|
return
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
|
from uuid import uuid4
|
||||||
|
|
||||||
from checker.models import Docx
|
from checker.models import Docx
|
||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task(name="process_file")
|
||||||
def process_file(file: Docx):
|
def process_file(file: uuid4):
|
||||||
return
|
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.
|
# Load task modules from all registered Django apps.
|
||||||
app.autodiscover_tasks()
|
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
|
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
|
APPS_DIR = ROOT_DIR
|
||||||
env = environ.Env()
|
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
|
psutil
|
||||||
dj-database-url
|
dj-database-url
|
||||||
uuid
|
uuid
|
||||||
python-docx
|
docx2txt
|
Loading…
Reference in New Issue
Block a user