add paraGenerator

This commit is contained in:
podiukov.iv
2026-04-23 15:35:34 +05:00
parent c84bb64551
commit 3e0a0ee403
5 changed files with 90 additions and 8 deletions

2
.gitignore vendored
View File

@@ -1,3 +1,5 @@
.venv/ .venv/
llama.cpp/ llama.cpp/
datasets/ datasets/
__pycache__/
models/

32
NER.py
View File

@@ -1,9 +1,27 @@
# 1 модуль - Распознавание именованных сущностей (NER)
import spacy import spacy
nlp = spacy.load("ru_core_news_lg") class NER:
text = "Добрый день, я, Сидоров Иван Иванович. Прошу перевести сто тысяч рублей Якову Петру Игнатьевичу." """
doc = nlp(text) Класс для выделения именованных сущностей из текста с помощью библиотеки spaCy.
"""
for ent in doc.ents: def __init__(self):
print(f"{ent.text} -> {ent.label_}") self.nlp = spacy.load("ru_core_news_lg")
def extract_entities(self, text):
"""
Выделение именованных сущностей из текста
Использование: text (<текст>)
Возвращает: List[Dict[text, type]] - список словарей, каждый из которых содержит информацию об одной сущности
"""
doc = self.nlp(text)
entities = []
for ent in doc.ents:
entities.append({
'text': ent.text, # Текст сущности
'type': ent.label_, # Тип сущности (PER, LOC, ORG, DATE и т.д.)
'start': ent.start_char, # Начальная позиция в тексте
'end': ent.end_char # Конечная позиция в тексте
})
return entities

View File

@@ -5,4 +5,7 @@
pip install spacy pip install spacy
python -m spacy download ru_core_news_lg python -m spacy download ru_core_news_lg
``` ```
#### для paraGenerator
```
CMAKE_ARGS="-DGGML_CUDA=on -DLLAMA_OPENSSL=ON" pip install llama-cpp-python
```

26
main.py Normal file
View File

@@ -0,0 +1,26 @@
# Точка входа программы
from NER import NER
from paraGenerator import ParaphraseGenerator
## Запуск рабочих инструментов
ner = NER()
pg = ParaphraseGenerator()
###
srcText = 'Добрый день, я, Сидоров Иван Иванович. Прошу перевести сто тысяч рублей Якову Петру Игнатьевичу в Москву.'
entities1 = ner.extract_entities(srcText)
print(entities1)
#paraphrase1 = pg.generate(srcText, entities1)
#print(paraphrase1)
#entities2 = ner.extract_entities(paraphrase1)
#print(entities2)
gg = ()
gg.append(1)
gg.append(2)
gg.append(1)
print(gg)

33
paraGenerator.py Normal file
View File

@@ -0,0 +1,33 @@
# 2 модуль - Генератор парафраза на основе llama.cpp
from openai import OpenAI
class ParaphraseGenerator:
"""
Класс для использования генеративной модели на базе llama.cpp
"""
def __init__(self):
self.client = OpenAI(base_url="http://127.0.0.1:8080", api_key="")
def generate(self, srcText, entities):
"""
Генерация парафраза по промпту.
Использование: generate(<исходный текст>, <сущности>)
"""
entityList = ', '.join(entity['text'] for entity in entities) # генерация списка выделенных сущностей
prompt = 'Перефразируй следующий текст, сохранив все именованные сущности "' + entityList + '" в точности такими же, как в оригинале. ' \
'Не изменяй эти фрагменты текста, не заменяй их синонимами, не переставляй слова внутри них. ' \
'Можешь изменять грамматическую структуру предложения, порядок слов, использовать синонимы для' \
'остальных частей текста, но именованные сущности должны остаться неизменными. Исходный текст: "' + srcText + '"'
try:
response = self.client.chat.completions.create(
model = "",
messages = [{"role": "user", "content": prompt}],
temperature = 0.8,
top_p = 0.95,
max_tokens = 200
)
return response.choices[0].message.content
except Exception as e:
print(f"Ошибка генерации: {e}")
return None