示例#1
0
    def set_new_project(self):
        """Установка нового проекта"""
        self.mainTab.setCurrentIndex(0)
        self.mainTab.show()
        self.infoLabel.hide()

        if self.fragments_list is not None:
            self.fragmentsWidgetLayout.removeWidget(self.fragments_list)
            self.fragments_list.deleteLater()

        self.fragments_list = FragmentsList(self)
        self.fragmentsWidgetLayout.addWidget(self.fragments_list)
        self.fragments_list.update()

        self.processor = TextProcessor()
        self.initalize_algorithms()
        self.update_enabled()
        if len(self.processor.analyzer) == 0:
            self.edit_fragments()
        else:
            self._auto_update_results()
def _fill_db():
    processor = TextProcessor([DictionaryAlgorithm, DummyAlgorithm])
    processor.clear_db()
    processor.analyzer.set_separator(r'\n')
    processor.parse_file('../samples/short.txt', '\n{1}')
    processor.upload_db()
    processor.do_preprocess()
    processor.do_process(analyze=True)
    processor.upload_db()
    return processor
 def test_parse_file(self):
     processor = TextProcessor([DictionaryAlgorithm])
     processor.analyzer.set_separator(r'\n')
     processor.parse_file('../samples/short.txt', '\n{1}')
     processor.upload_db()
     self.assertGreater(len(processor.analyzer), 1)
     processor.do_preprocess()
     processor.upload_db()
     res, stats = processor.do_process(analyze=True)
     self.assertIsNotNone(res)
     self.assertIsNotNone(stats)
 def setUpClass(cls):
     DataBaseConnection(**TestConfig.NEO4J_DATA)
     TextProcessor().clear_db()
     cls.app = QApplication(sys.argv)
示例#5
0
 def on_clear_db_clicked(self):
     proc = TextProcessor()
     proc.clear_db()
     message = "Очистка завершена. Перезапустите приложение"
     self.box = QMessageBox.information(self, "Сообщение", message)
 def setUpClass(cls):
     DataBaseConnection(**TestConfig.NEO4J_DATA)
     cls.processor = TextProcessor()
     cls.processor.clear_db()
示例#7
0
 def clear_db(self):
     if self.processor is None:
         self.processor = TextProcessor()
     self.processor.clear_db()
     self._auto_update_results()
     self.fragments_list.update()
示例#8
0
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
        self.textBrowser = TextBrowser(self)
        self.textBrowserLayout.addWidget(self.textBrowser)

        self.settings = SupremeSettings()

        self.actionCloseProject.triggered.connect(self.remove_project)
        self.actionNew.triggered.connect(self.set_new_project)
        self.actionChangeFragments.triggered.connect(self.edit_fragments)
        self.actionClear.triggered.connect(self.clear_results)
        self.actionStartProcess.triggered.connect(self.start_algorithm)
        self.actionUpdateResults.triggered.connect(self.update_results)
        self.actionOpenParams.triggered.connect(self.open_settings)
        self.actionClearDB.triggered.connect(self.clear_db)
        self.actionOpen.triggered.connect(self.on_import)
        self.actionSave.triggered.connect(self.on_export)
        self.actionReport.triggered.connect(self.on_report)

        self.en_project = [  # Включить, когда есть проект
            self.actionCloseProject, self.actionSave,
            self.actionChangeFragments, self.actionClear, self.actionReport
        ]

        self.en_algorithm_results = [  # Включить, когда есть результаты
        ]

        self.en_process_fragments = [  # Включить, когда загружены фрагменты
            self.actionStartProcess, self.actionClear, self.startProcessButton,
            self.actionUpdateResults
        ]

        self.processor = None  # Обработчик текста
        self.fragments_list = None  # Виджет с фрагментами
        self.tabs = []  # Вкладки с результатами алгоритмов
        self.auto_update = SupremeSettings()['result_auto_update']

        self.remove_project()

    def initalize_algorithms(self):
        """ Инициализировать алгоритмы """
        while self.mainTab.count() > 1:
            self.mainTab.removeTab(self.mainTab.count() - 1)
        self.tabs.clear()
        for algorithm in self.processor.algorithms:
            tab = AlgorithmResults(algorithm, self.processor)
            self.tabs.append(tab)
            self.mainTab.addTab(tab, algorithm.name)

    def update_enabled(self):
        """Установить enabled для виджетов, action'ов и т.п. """
        if self.processor is None:
            [item.setEnabled(False) for item in self.en_algorithm_results]
            [item.setEnabled(False) for item in self.en_process_fragments]
            [item.setEnabled(False) for item in self.en_project]
        else:
            [item.setEnabled(True) for item in self.en_project]
            if len(self.processor.analyzer) > 0:
                [item.setEnabled(True) for item in self.en_process_fragments]

    def open_settings(self):
        """ Открыть настройки """
        self.settings_dialog = SettingsDialog()
        self.settings_dialog.accepted.connect(self.on_settings_accepted)
        self.settings_dialog.show()

    def on_settings_accepted(self):
        pass

    def remove_project(self):
        """Удаление проекта"""
        self.mainTab.hide()
        self.infoLabel.show()
        if self.processor:
            self.processor = None
        if self.fragments_list is not None:
            self.fragmentsWidgetLayout.removeWidget(self.fragments_list)
            self.fragments_list.deleteLater()
            self.fragments_list = None
        self.update_enabled()

    def set_new_project(self):
        """Установка нового проекта"""
        self.mainTab.setCurrentIndex(0)
        self.mainTab.show()
        self.infoLabel.hide()

        if self.fragments_list is not None:
            self.fragmentsWidgetLayout.removeWidget(self.fragments_list)
            self.fragments_list.deleteLater()

        self.fragments_list = FragmentsList(self)
        self.fragmentsWidgetLayout.addWidget(self.fragments_list)
        self.fragments_list.update()

        self.processor = TextProcessor()
        self.initalize_algorithms()
        self.update_enabled()
        if len(self.processor.analyzer) == 0:
            self.edit_fragments()
        else:
            self._auto_update_results()

    def edit_fragments(self):
        """Запустить редактирование фрагментов"""
        self.fragments = FragmentsWindow(self.processor, self)
        self.fragments.show()
        self.fragments.fragmentsChanged.connect(self.fragments_list.update)
        self.fragments.fragmentsChanged.connect(self._auto_update_results)
        self.fragments.fragmentsChanged.connect(self.update_enabled)

    def start_algorithm(self):
        """Запустить алгоритм
            Тут запускается препроцессинг
        """
        self.thread = self.processor.PreprocessThread(self.processor)
        self.loading = LoadingWrapper(self.thread)
        self.loading.loadingDone.connect(self._continue_algorithm)
        self.loading.start()

    def _continue_algorithm(self):
        """Продолжить выполнение алгоритма
           Здесь выполняется непосредственно сравнение результатов
        """
        # TODO Сюда впихнуть промежуточные настройки
        analyze = self.settings['processor_analyze']
        self.thread = self.processor.ProcessThread(self.processor, analyze)
        self.loading = LoadingWrapper(self.thread)
        self.loading.loadingDone.connect(self._finish_algorithm)
        self.loading.start()

    def _finish_algorithm(self):
        """Завершение алгоритма.
            Здесь выполняется загрузка в БД и отображение результатов
        """
        analyze = self.settings['processor_analyze']
        if analyze:
            self._update_global_description()
            self._make_global_description()
        self.upload_db()

    def _make_global_description(self):
        desc = Describer(None, self.processor)
        results_html = desc.describe_results(all_algs=True)
        self.textBrowser.setHtml(results_html)

    def _update_global_description(self):
        thread = self.processor.DescribeThread(self.processor)
        thread.run()
        thread.wait()
        self._make_global_description()

    def upload_db(self):
        self.thread = self.processor.analyzer.UploadDBThread(
            self.processor.analyzer)
        self.loading = LoadingWrapper(self.thread)
        self.loading.loadingDone.connect(self._auto_update_results)
        self.loading.loadingDone.connect(self.fragments_list.update)
        self.loading.start()

    def _auto_update_results(self):
        [item.setEnabled(True) for item in self.en_algorithm_results]
        self._make_global_description()
        if SupremeSettings()['result_auto_update']:
            [tab.update_results() for tab in self.tabs]

    def update_results(self):
        self._update_global_description()
        [item.setEnabled(True) for item in self.en_algorithm_results]
        [tab.update_results() for tab in self.tabs]

    def clear_results(self):
        self.thread = self.processor.ClearResultsThread(self.processor)
        self.loading = LoadingWrapper(self.thread)
        # В ClearResultsTread уже есть сохранение
        # self.loading.loadingDone.connect(self.upload_db)
        self.loading.loadingDone.connect(self._auto_update_results)
        self.loading.loadingDone.connect(self._update_global_description)
        self.loading.start()

    def clear_db(self):
        if self.processor is None:
            self.processor = TextProcessor()
        self.processor.clear_db()
        self._auto_update_results()
        self.fragments_list.update()

    def on_export(self):
        filename, filter_ = QFileDialog.getSaveFileName(self,
                                                        'Сохранить',
                                                        filter='*.graphml')
        if len(filename) > 0:
            if not filename.endswith('.graphml'):
                filename += '.graphml'
            Exporter.export_db(filename)

    def on_import(self):
        filename, filter_ = QFileDialog.getOpenFileName(self,
                                                        'Открыть',
                                                        filter='*.graphml')
        if len(filename) > 0:
            Exporter.import_db(filename)
            self.set_new_project()

    def on_report(self):
        self.report = ReportEditor(self.processor, self)
        self.report.show()
import setup_

from api import TextProcessor
from api.database import DataBaseConnection
from api.algorithm import DictionaryAlgorithm
from ui.widgets import AlgorithmResults
from PyQt5.QtWidgets import QApplication
from tests.config import Config
import sys

if __name__ == "__main__":
    db = DataBaseConnection(**Config.NEO4J_DATA)
    proc = TextProcessor()
    alg = DictionaryAlgorithm()
    app = QApplication(sys.argv)
    widget = AlgorithmResults(alg, proc)
    widget.show()

    sys.exit(app.exec_())
示例#10
0
import setup_

from api.database import DataBaseConnection
from api import TextProcessor
from ui import GraphWindow
from PyQt5.QtWidgets import QApplication
from tests.config import Config
import sys

if __name__ == "__main__":
    db = DataBaseConnection(**Config.NEO4J_DATA)
    app = QApplication(sys.argv)
    processor = TextProcessor()
    algorithm = processor.algorithms[0]
    window = GraphWindow(processor)
    window.show()
    sys.exit(app.exec_())