dzenzzz commited on
Commit
d4d4459
Β·
1 Parent(s): 9e9178e

additional changes

Browse files
Files changed (5) hide show
  1. .gitignore +110 -0
  2. config.py +18 -0
  3. ner.py +1 -1
  4. neural_searcher.py +1 -0
  5. senatus_client.py +135 -0
.gitignore ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ /data
10
+
11
+ # Distribution / packaging
12
+ .Python
13
+ build/
14
+ develop-eggs/
15
+ dist/
16
+ downloads/
17
+ eggs/
18
+ .eggs/
19
+ lib/
20
+ lib64/
21
+ parts/
22
+ sdist/
23
+ var/
24
+ wheels/
25
+ *.egg-info/
26
+ .installed.cfg
27
+ *.egg
28
+ MANIFEST
29
+
30
+ # PyInstaller
31
+ # Usually these files are written by a python script from a template
32
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
33
+ *.manifest
34
+ *.spec
35
+
36
+ # Installer logs
37
+ pip-log.txt
38
+ pip-delete-this-directory.txt
39
+
40
+ # Unit test / coverage reports
41
+ htmlcov/
42
+ .tox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ .hypothesis/
50
+ .pytest_cache/
51
+
52
+ # Translations
53
+ *.mo
54
+ *.pot
55
+
56
+ # Django stuff:
57
+ *.log
58
+ local_settings.py
59
+ db.sqlite3
60
+
61
+ # Flask stuff:
62
+ instance/
63
+ .webassets-cache
64
+
65
+ # Scrapy stuff:
66
+ .scrapy
67
+
68
+ # Sphinx documentation
69
+ docs/_build/
70
+
71
+ # PyBuilder
72
+ target/
73
+
74
+ # Jupyter Notebook
75
+ .ipynb_checkpoints
76
+
77
+ # pyenv
78
+ .python-version
79
+ pyvenv.cfg
80
+
81
+ # celery beat schedule file
82
+ celerybeat-schedule
83
+
84
+ # SageMath parsed files
85
+ *.sage.py
86
+
87
+ # Environments
88
+ .env
89
+ .venv
90
+ env/
91
+ venv/
92
+ ENV/
93
+ env.bak/
94
+ venv.bak/
95
+
96
+ # Spyder project settings
97
+ .spyderproject
98
+ .spyproject
99
+
100
+ # Rope project settings
101
+ .ropeproject
102
+
103
+ # mkdocs documentation
104
+ /site
105
+
106
+ # mypy
107
+ .mypy_cache/
108
+
109
+ # Mac OS
110
+ .DS_Store
config.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+
3
+ from dotenv import find_dotenv, load_dotenv
4
+
5
+ dotenv_path = find_dotenv()
6
+ load_dotenv(dotenv_path)
7
+
8
+ API_KEY = os.getenv("API_KEY")
9
+ HOST = os.getenv("HOST")
10
+
11
+ COLLECTION_NAME = os.getenv("COLLECTION_NAME")
12
+ TEXT_FIELD_NAME = os.getenv("TEXT_FIELD_NAME")
13
+
14
+ DENSE_MODEL = os.getenv("DENSE_MODEL")
15
+ SPARSE_MODEL = os.getenv("SPARSE_MODEL")
16
+
17
+ DENSE_MODEL_SHORT = os.getenv("DENSE_MODEL_SHORT")
18
+ SPARSE_MODEL_SHORT = os.getenv("SPARSE_MODEL_SHORT")
ner.py CHANGED
@@ -52,7 +52,7 @@ def perform_ner(text):
52
  return results
53
 
54
  text = """1
55
- osnovni sud u bijelom polju je vrsio veliku nuzdu
56
  """
57
 
58
  def merge_entities(token_label_pairs):
 
52
  return results
53
 
54
  text = """1
55
+ IP 229/16 PRIVREDNI SUD CRNE GORE, u VijeΔ‡u sastavljenom od sudija Dijane RaičkoviΔ‡ kao predsjednika VijeΔ‡a, Ivana KovačeviΔ‡a i NataΕ‘e SekuliΔ‡, kao članova VijeΔ‡a, u pravnoj stvari izvrΕ‘nog povjerioca ''M.” AD P., protiv izvrΕ‘nog duΕΎnika ''F.” DOO P., koga zastupa punomoΔ‡nik N. M. advokat iz P. odlučujuΔ‡i po prigovoru izvrΕ‘nog duΕΎnika na rjeΕ‘enje Javnog izvrΕ‘itelja A. T. V. I.br.4282/2015 od 29.12.2015.godine, radi naplate novčanog potraΕΎivanja u iznosu od 24.750,00€, u sjednici VijeΔ‡a odrΕΎanoj danaβ€š19.01.2016.godine, donio je RJEΕ ENJE Usvaja se prigovor izvrΕ‘nog duΕΎnika pa se rjeΕ‘enje o izvrΕ‘enju Javnog izvrΕ‘itelja A. T. V. I.br.4282/2015 od 29.12.2015.godine, stavlja van snage i ukidaju sprovedene izvrΕ‘ne radnje. Predlog za izvrΕ‘enje ima se smatrati tuΕΎbom. Spise predmeta zavesti u upisnik P . OBRAZLOΕ½ENJE Javni izvrΕ‘itelj A. T. V. iz P. je na predlog izvrΕ‘nog povjerioca, na osnovu vjerodostojne isprave-računa br.2015/03/S02/277,dana 29.12.2015.godine, donio rjeΕ‘enje o izvrΕ‘enju I br.4282/2015, kojim je obavezao izvrΕ‘nog duΕΎnika da izvrΕ‘nom povjeriocu isplati iznos od 24.750,00€ sa kamatom i troΕ‘kovima postupka, kako je to bliΕΎe precizirano navedenim rjeΕ‘enjem o izvrΕ‘enju. IzvrΕ‘ni duΕΎnik je blagovremeno izjavio prigovor kojim je osporio navedeno rjeΕ‘enje o izvrΕ‘enju ističuΔ‡i da je odmah nakon prijema predmetne fakture istu vratio u originalu izvrΕ‘nom povjeriocu dana 09.12.2015.godine,osporavajuΔ‡i u cjelosti sadrΕΎaj iste i postojanje bilo kakve obaveze prema izvrΕ‘nom povjeriocu.Navodi da pomenutu fakturu,izvrΕ‘ni duΕΎnik uopΕ‘te nije knjiΕΎio u svom knjigovodstvu,o čemu je obavijestio izvrΕ‘nog povjerioca prilikom vraΔ‡anja iste,obavjeΕ‘tavajuΔ‡i ga istovremeno da po predmetnoj fakturi neΔ‡e vrΕ‘iti plaΔ‡anje,kako po osnovu tako i visini,o čemu u prilogu dostavlja dopise br.10596 od 09.12.2015.godine i od 17.12.2015.godine, u kojem je, izjaΕ‘njavajuΔ‡i se na opomenu od 14.12.2015.godine,ponovo osporio predmetnu fakturu.Ističe da je povjerilac pauΕ‘alno odmjerio iznos iz fakture,te iz tih razloga predlaΕΎe finansijsko vjeΕ‘tačenje.PojaΕ‘njava da se potraΕΎivanje odnosi na otkazane letove od 04,11 i 18.01.2014.godine,na relaciji P.-H.-P.,a po ugovoru br.10638,koji nije dostavljen uz predlog,dok označeni letovi nijesu otkazani krivicom izvrΕ‘nog duΕΎnika.Dalje ističe da je povjerilac dozvolu za saobraΔ‡aj u dobio tek 24.12.2013.godine,a koju dozvolu je dostavio izvrΕ‘nom duΕΎniku putem e-maila,pa stoga dana 21.12.2013.godine,let nije bio relizovan isključivom krivicom izvrΕ‘nog povjerioca,jer nije obezbijedio neophodne dozvole za letenje.Navedeno je uzrokovalo i potpuno zaustavljanje prodaje karata od strane izvrΕ‘nog duΕΎnika za naredni period jer neizvjesnost oko dobijanja dozvole za let na pomenutoj relaciji,za duΕΎnika kao zakupca čartera,proizvodila veliki rizik naknadni refundacija i negativnog publiciteta,kod turista i stalnih klijenata.Ukazuje da bilateralni sporazum zaključen izmeΔ‘u Crne Gore i U. Privredni Sud Crne Gore Ip 229/2016 19. Januar 2016 ne tretira čarter saobraΔ‡aj,Ε‘to je predmet ugovora meΔ‘u strankama,veΔ‡ samo redovni vazduΕ‘ni saobraΔ‡aj izmeΔ‘u ove dvije zemlje,koji se prema definiciji odvija po utvrΔ‘enom redu letenja i sa unaprijed utvrΔ‘enim linijama.Posebno ističe da je Sporazumom o vazduΕ‘nom saobraΔ‡aju izmeΔ‘u Vlade Crne Gore i kabineta ministara U. od09.12.2011.godine- član 3 i 12 odreΔ‘eno da se radi o preciziranim rutama do maksimalnih frekvencija,Ε‘to znači da izvrΕ‘ni pojerilac moΕΎe da obavlja samo redovni a ne i čarter prevoz.Dodaje da izvrΕ‘ni duΕΎnik nije bio u moguΔ‡nosti da postupi shodno član 5 osnovnog ugovora,u kome su precizirane otkazne klauzule u slučaju kad zakupac čartera otkazuje let,te blagovremeno otkaΕΎe letove,buduΔ‡i da isti nijesu potvrΔ‘eni od strane prevoznika-izvrΕ‘nog povjerioca.,te predlaΕΎe sasluΕ‘anje ovlaΕ‘Δ‡enih zastupnika parničnih stranaka.PredlaΕΎe da VijeΔ‡e usvoji prigovor ukine rjeΕ‘enje o izvrΕ‘enju i obustavi sprovedeneizvrΕ‘ne radnje.TraΕΎio je troΕ‘kove posstupka po AT-u. IzvrΕ‘ni povjerilac je u odgovoru na prigovor istakao da Ugovorom o čarter prevozu član 5 st1 t.1 i 2,definiΕ‘e da zakupac čartera(izvrΕ‘ni duΕΎnik),zadrΕΎava pravo da otkaΕΎe bilo koji let iz Anexa 1 Ugovora,navodeΔ‡i uslove koji su za to neophodni.Ističe da je član 1 Anexa 2 Ugovora o čarter prevozu br.2909/13 ugovorena cijena čarter prevoza na predmetnoj relaciji u iznosu od 22.500,00€,tako da nije proizvoljno izvrΕ‘en obračun taksi za otkaz, kako je to navedeno u prigovoru.Navodi da je dana 23.12.2013.godine dobijena dozvola za obavljanje serije čarter letova na pomenutoj ruti za dane 28.12.2013.godine,04./11./18./25.01.2014.godine,01.08/15/22.02.2014.godine i 01/08/15/ 03.2014.godine.Ističe da je za potrebe izvrΕ‘nog duΕΎnika obavio let dana 28.12.2013.godine,te da je izvrΕ‘ni duΕΎnika nakon toga putem maila otkazao sve letove ,u potpunosti svestan svoje obaveze u slučaju otkazivanja leta za 04./11./18.01.2014.godine,saglasno odredbama član 5 st1 t.1 i 2 Ugovora o čarter prevozu,o čemu prilogu dostavlja mail izvrΕ‘nog direktora izvrΕ‘nog duΕΎnika od 25.12.2013.godine.PredlaΕΎe da se prigovor odbije. Odredbom člana 60 stav 3 Zakona o izvrΕ‘enju i obezbjeΔ‘enju ( Sl.list CG , br.36/2011-u daljem tekstu ZIO), propisano je da ako izvrΕ‘ni duΕΎnik učini vjerovatnim navode iz prigovora kojim rjeΕ‘enje pobija u cjelini ili u dijelu kojim je obavezan da namiri potraΕΎivanje, vijeΔ‡e suda Δ‡e staviti van snage rjeΕ‘enje o izvrΕ‘enju u dijelu kojim je odreΔ‘eno izvrΕ‘enje i odrediti da se postupak nastavi kao povodom prigovora protiv platnog naloga. Protiv rjeΕ‘enja o stavljanju van snage rjeΕ‘enja o izvrΕ‘enju nije dozvoljen prigovor. Kako je izvrΕ‘ni duΕΎnik blagovremenim i obrazloΕΎenim prigovorom osporio navedeno rjeΕ‘enje o izvrΕ‘enju I.br.4282/2015.godine,uz navoΔ‘enje konkretnih radnji na kojima se zasniva prigovor u dijelu nepostojanja obaveze u odnosu na vjerodostojnu ispravu,a takoΔ‘e osporavajuΔ‡i osnov i visinu potraΕΎivanja,a sve vezano za meΔ‘usobne obaveze izvrΕ‘nog povjerioca i izvrΕ‘nog duΕΎnika,odnosno neipunjavanje obaveze izvrΕ‘nog povjerioca,učinio vjerovatnim svoje navode iz prigovora i u cjelosti osporio rjeΕ‘enje kojim je obavezan da namiri potraΕΎivanje,to je VijeΔ‡e na osnovu člana 60 stav 3 Zakona o izvrΕ‘enju i obezbjeΔ‘enju, odlučilo kao u izreci. PRIVREDNI SUD CRNE GORE Dana, 19.01.2016.godine Predsjednik VijeΔ‡a - Sudija, Dijana RaičkoviΔ‡,s.r. PRAVNA POUKA:Protiv ovog rjeΕ‘enja, nije dozvoljen prigovor.
56
  """
57
 
58
  def merge_entities(token_label_pairs):
neural_searcher.py CHANGED
@@ -2,6 +2,7 @@ from qdrant_client import QdrantClient
2
  from fastembed import SparseTextEmbedding, LateInteractionTextEmbedding
3
  from qdrant_client import QdrantClient, models
4
  from sentence_transformers import SentenceTransformer
 
5
  import os
6
 
7
  class NeuralSearcher:
 
2
  from fastembed import SparseTextEmbedding, LateInteractionTextEmbedding
3
  from qdrant_client import QdrantClient, models
4
  from sentence_transformers import SentenceTransformer
5
+ from collections import Counter
6
  import os
7
 
8
  class NeuralSearcher:
senatus_client.py ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import uuid
3
+ from huggingface_hub import login
4
+ from fastembed import SparseTextEmbedding,LateInteractionTextEmbedding
5
+ from qdrant_client import QdrantClient, models
6
+ from sentence_transformers import SentenceTransformer
7
+ from tqdm import tqdm
8
+ import numpy as np
9
+ from huggingface_hub import login
10
+ import os
11
+
12
+ login(os.getenv('HUGGING_FACE_API_KEY'))
13
+
14
+ folder_path = 'data'
15
+
16
+ dense_model = SentenceTransformer(os.getenv('DENSE_MODEL'))
17
+ sparse_model = SparseTextEmbedding(os.getenv('SPARSE_MODEL'))
18
+ # late_interaction_embedding_model = LateInteractionTextEmbedding("answerdotai/answerai-colbert-small-v1")
19
+
20
+ data = []
21
+ for filename in os.listdir(folder_path):
22
+ if filename.endswith('.json'):
23
+ file_path = os.path.join(folder_path, filename)
24
+ with open(file_path,encoding='utf-8') as f:
25
+ data = json.load(f)
26
+
27
+
28
+ client = QdrantClient(os.getenv('QDRANT_URL'),api_key=os.getenv('QDRANT_API_KEY'))
29
+
30
+
31
+ data_array = np.array(data)
32
+
33
+ split_data = np.array_split(data_array, 1000)
34
+
35
+ collection_name = "mne-law"
36
+
37
+ for local_data in split_data:
38
+
39
+ payload = []
40
+ documents = []
41
+ for obj in local_data:
42
+ documents.append(obj["tekst"])
43
+ payload.append(obj)
44
+
45
+ sparse_embeddings = list(
46
+ tqdm(
47
+ sparse_model.passage_embed(doc for doc in documents),
48
+ total=len(documents),
49
+ desc="πŸ”¨ Encoding Sparse Embeddings"
50
+ )
51
+ )
52
+
53
+ # late_interaction_embeddings = list(
54
+ # tqdm(
55
+ # late_interaction_embedding_model.passage_embed(doc for doc in documents),
56
+ # total=len(documents),
57
+ # desc="πŸ”¨ Encoding Late Interaction Embeddings"
58
+ # )
59
+ # )
60
+
61
+ dense_embeddings = dense_model.encode(documents, show_progress_bar=True, device="cuda")
62
+
63
+ existing_collections = client.get_collections().collections
64
+ collection_names = [col.name for col in existing_collections]
65
+
66
+ if collection_name not in collection_names:
67
+ client.create_collection(
68
+ collection_name=collection_name,
69
+ vectors_config={
70
+ os.getenv('DENSE_MODEL'): models.VectorParams(
71
+ size=len(dense_embeddings[0]),
72
+ distance=models.Distance.COSINE,
73
+ on_disk=True
74
+ ),
75
+ # "answerdotai/answerai-colbert-small-v1": models.VectorParams(
76
+ # size=len(late_interaction_embeddings[0][0]),
77
+ # distance=models.Distance.COSINE,
78
+ # multivector_config=models.MultiVectorConfig(
79
+ # comparator=models.MultiVectorComparator.MAX_SIM,
80
+ # ),
81
+ # hnsw_config=models.HnswConfigDiff(
82
+ # m=0, # Disable HNSW graph creation
83
+ # ),
84
+ # on_disk=True
85
+ # ),
86
+ },
87
+ sparse_vectors_config={
88
+ "Qdrant/bm25": models.SparseVectorParams(
89
+ modifier=models.Modifier.IDF,
90
+ ),
91
+ },
92
+ quantization_config=models.ScalarQuantization(
93
+ scalar=models.ScalarQuantizationConfig(
94
+ type=models.ScalarType.INT8,
95
+ always_ram=True
96
+ )
97
+ ),
98
+ optimizers_config=models.OptimizersConfigDiff(
99
+ indexing_threshold=10000,
100
+ ),
101
+ shard_number = 4,
102
+ hnsw_config=models.HnswConfigDiff(on_disk=True),
103
+ )
104
+
105
+ print("πŸš€ Uploading to qdrant collection: " + collection_name)
106
+ client.upload_points(
107
+ collection_name=collection_name,
108
+ batch_size = 32,
109
+ parallel = 16,
110
+ points=[
111
+ models.PointStruct(
112
+ id=uuid.uuid4().hex,
113
+ vector={
114
+ os.getenv('DENSE_MODEL'): dense_embedding,
115
+ os.getenv('SPARSE_MODEL'): sparse_embedding.as_object(),
116
+ # "answerdotai/answerai-colbert-small-v1":late_interaction_embedding
117
+ },
118
+ payload=doc,
119
+ )
120
+ for doc, dense_embedding, sparse_embedding in zip(
121
+ payload, dense_embeddings, sparse_embeddings
122
+ )
123
+ ],
124
+ )
125
+
126
+ client.create_payload_index(
127
+ collection_name=collection_name,
128
+ field_name="dbid",
129
+ field_schema=models.PayloadSchemaType.INTEGER
130
+ )
131
+
132
+ client.update_collection(
133
+ collection_name=collection_name,
134
+ optimizer_config=models.OptimizersConfigDiff(indexing_threshold=20000),
135
+ )