Ejemplo n.º 1
0
def create_corpus(corpus_name, content):
    corpus = Corpus(corpus_name=corpus_name)
    corpus.save()

    base_text = create_text(corpus, corpus_name, content)

    return corpus, base_text
Ejemplo n.º 2
0
def create_app():
    app = Flask(__name__)
    app.corpus = Corpus(SRC)
    app.route("/")(index)
    app.route("/<name>")(article)
    app.route("/opensearch")(open_search)
    app.route("/search")(search_view)
    return app
Ejemplo n.º 3
0
def get_or_create_index(path, schema, src):
    """Get or create an Index."""
    index = open_dir(path) if exists_in(path) else create_in(path, schema)
    indexed_titles = set(field['title'] for field in gen_indexed_fields(index))
    corpus = Corpus(src)
    documents = set(corpus.gen_documents())
    update_index(index.writer(), indexed_titles, documents)
    return index
def main():
    path_to_corpus = sys.argv[1]  # ignore any additional parameters

    if not path_to_corpus:
        print 'No arguments specified.\nusage: python prep_corpus.py {folder(s) containing Enron corpus}\n'
        sys.exit(1)

    c = Corpus()
    c.build_sqlite_corpus(path_to_corpus)
Ejemplo n.º 5
0
def corpuses():
    data = {k: v for k, v in request.data.items() if k != 'id'}

    if request.method == "POST":
        corpus = Corpus(**data)
        corpus.save()

        response = jsonify({'id': corpus.id, 'title': corpus.title})
        response.status_code = 201
        return response

    else:  # GET
        # TO DO: separate retrievals for corpuses initialized by poet
        # vs merely participated
        corpus = Corpus.query.get(request.data['id'])

        response = jsonify({'id': corpus.id, 'title': corpus.title})
        response.status_code = 200
        return response
Ejemplo n.º 6
0
    def launchResearch(self):
        if (self.inputTheme.text != ''):
            # Remise à zero du message d'erreur
            self.lblError.setText("")
            self.progressBar.setValue(10)
            # Instanciation du Corpus avec le thème tapé par l'utilisateur et la valeur booleenne de la case à cocher
            self.corpus = Corpus(self.inputTheme.text(),
                                 self.chkBoxExcludeStopWords.isChecked())
            self.progressBar.setValue(20)
            # On englobe les appels dans un try/except. Comme ca en cas d'erreur, on affiche les erreurs.
            try:
                # Récupération des documents sur reddit
                self.getDocsFromReddit(self.inputTheme.text(),
                                       self.spArticlesMax.value())
                self.progressBar.setValue(60)
                # Récupération des documents sur Arxiv
                self.getDocsFromArxiv(self.inputTheme.text(),
                                      self.spArticlesMax.value())

                # Concaténation de tous les documents et nettoyage + Chargement des propriétés wordsByDoc et wordsStrByDoc
                self.corpus.fill_dicos_words("reddit")
                self.progressBar.setValue(80)

                # Concaténation de tous les documents et nettoyage + Chargement des propriétés wordsByDoc et wordsStrByDoc
                self.corpus.fill_dicos_words("arxiv")
                self.progressBar.setValue(100)

                self.progressBar.setValue(0)
                # Si aucune erreur, on affiche l'écran des actions
                self.openActions()
            except Exception as e:
                # En cas d'erreur :
                print(e)  # J'affiche dans la console l'erreur
                self.progressBar.setValue(
                    0)  # Je remet la barre de progression à zero
                # Enfin j'affiche un message d'erreur à l'utilisateur
                self.lblError.setText(
                    "Erreur dans la récupération des données. Veuillez essayer avec un autre thème"
                )
Ejemplo n.º 7
0
def get_out_links():
    corpus = Corpus('src')
    links = {}
    for doc in corpus.gen_documents():
        text = doc.content
        try:
            refs = get_references(text)
        except:
            continue
        else:
            # print(doc.filename, refs)
            out_links = []
            for ref in set(refs):
                try:
                    canonical_name = get_canonical_name(ref)
                    while not canonical_name.endswith('html'):
                        canonical_name = get_canonical_name(canonical_name)
                except KeyError:
                    # print('KeyError:', doc.title, ref)
                    pass
                else:
                    out_links.append(canonical_name)
            links[doc.filename] = set(out_links)
    return links
Ejemplo n.º 8
0
    def setupUi(self, MainWindow):
        # Initilisation d'1 instance de corpus à vide
        self.corpus = Corpus("", True)

        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(619, 379)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        # On place une frame sur notre fenetre. C'est sur cette frame qu'on va poser les autres composants (bouton...)
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(0, 0, 611, 371))
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        # setStyleSheet = Personnalisation du look
        self.frame.setStyleSheet("background-color: white;")

        self.btnOK = QtWidgets.QPushButton(self.frame)
        self.btnOK.setGeometry(QtCore.QRect(250, 230, 111, 51))
        self.btnOK.setObjectName("btnOK")
        # Au click du bouton OK, on lancher la fonction launchResearch pour demarrer la recherche de docs
        self.btnOK.clicked.connect(self.launchResearch)
        # On personnalise la police du bouton
        btnFont = QtGui.QFont()
        btnFont.setFamily("Fantasy")
        btnFont.setPointSize(14)
        btnFont.setBold(True)
        btnFont.setWeight(75)
        self.btnOK.setFont(btnFont)
        self.btnOK.setStyleSheet("QPushButton{\n"
                                 "    background-color:#1976d2;\n"
                                 "    border-radius: 15px;\n"
                                 "    color:white;\n"
                                 "    opacity: 0.9;\n"
                                 "}")
        self.lblArticlesMax = QtWidgets.QLabel(self.frame)
        self.lblArticlesMax.setGeometry(QtCore.QRect(20, 150, 71, 20))
        self.lblArticlesMax.setObjectName("lblArticlesMax")

        # spArticlesMax = Permet de régler le nombre d'articles maximum à récupérer
        self.spArticlesMax = QtWidgets.QSpinBox(self.frame)
        self.spArticlesMax.setGeometry(QtCore.QRect(100, 150, 81, 22))
        self.spArticlesMax.setObjectName("spArticlesMax")
        self.spArticlesMax.setMinimum(10)
        self.spArticlesMax.setMaximum(100000)

        # inputTheme = C'est le champ où l'utilisateur va taper son thème
        self.inputTheme = QtWidgets.QLineEdit(self.frame)
        self.inputTheme.setGeometry(QtCore.QRect(100, 100, 421, 21))
        self.inputTheme.setObjectName("inputTheme")

        self.lblTitre = QtWidgets.QLabel(self.frame)
        self.lblTitre.setGeometry(QtCore.QRect(50, 20, 491, 51))
        self.lblTitre.setAlignment(QtCore.Qt.AlignCenter)
        self.lblTitre.setObjectName("lblTitre")
        # On personnalise la police du titre
        titleFont = QtGui.QFont()
        titleFont.setFamily("Fantasy")
        titleFont.setPointSize(10)
        titleFont.setBold(True)
        titleFont.setWeight(75)
        self.lblTitre.setFont(titleFont)

        # lblTheme : Label "Thème" accompagnant le champ d'édition
        self.lblTheme = QtWidgets.QLabel(self.frame)
        self.lblTheme.setGeometry(QtCore.QRect(20, 100, 71, 20))
        self.lblTheme.setObjectName("lblTheme")

        # progressBar : Barre de progression qui évolue apres le click sur le bouton OK
        self.progressBar = QtWidgets.QProgressBar(self.frame)
        self.progressBar.setGeometry(QtCore.QRect(35, 310, 541, 23))
        self.progressBar.setProperty("value", 0)
        # par défaut on la rend visible et à 0%
        self.progressBar.setValue(0)
        self.progressBar.setVisible(True)
        self.progressBar.setObjectName("progressBar")

        self.progressBar.setStyleSheet("QProgressBar{\n"
                                       "background-color: #1976d2;\n"
                                       "color: white;\n"
                                       "border-style: none;\n"
                                       "text-align: center;\n"
                                       "\n"
                                       "}\n"
                                       "    \n"
                                       "QProgressBar::chunk{\n"
                                       "background-color: #63a4ff;\n"
                                       "\n"
                                       "\n"
                                       "}\n"
                                       "")

        # On prévoit un label d'erreur qui s'affiche au dessus de la barre de progression en cas de retour d'erreur sur les appels API
        self.lblError = QtWidgets.QLabel(self.frame)
        self.lblError.setGeometry(QtCore.QRect(60, 290, 500, 20))
        self.lblError.setText("")
        self.lblError.setObjectName("lblError")

        # chkBoxExcludeStopWords : Case à cocher pour permettre à l'utilisateur d'enlever les "mots vides" des documents (stopwords)
        self.chkBoxExcludeStopWords = QtWidgets.QCheckBox(self.frame)
        self.chkBoxExcludeStopWords.setChecked(True)
        self.chkBoxExcludeStopWords.setGeometry(QtCore.QRect(
            100, 190, 281, 20))
        self.chkBoxExcludeStopWords.setObjectName("chkBoxExcludeStopWords")

        MainWindow.setCentralWidget(self.centralwidget)

        # Appel à la fonction pour donner du texte à nos composants ("OK" pour le bouton OK...)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)