Analysez le code source de votre propre moteur de recherche simple écrit en Python avec l'outil de visualisation de code "SOURCE TRAIL"

image

image

Je suis ingénieur logiciel r2en de white, inc. Notre société mène un travail de conseil centré sur les nouvelles entreprises, et généralement l'équipe d'ingénieurs développe des outils gratuits de type cloud pour développer de nouvelles entreprises et de nouvelles entreprises. Je suis impliqué dans tout, du conseil au développement PoC

Quand je cherchais un outil capable de comprendre de manière interactive le code source en prenant en charge le développement de la phase de développement PoC à la phase d'exploitation, en exploitant des logiciels existants, etc., j'ai trouvé SOURCE TEAIL, donc je l'ai touché cette fois donc je l'ai partagé Laisse-moi essayer

image

Aperçu

SOURCETEAIL est un outil qui aide les développeurs à coder de manière productive en analysant et en visualisant le code source afin qu'ils ne passent pas beaucoup de temps à comprendre le code source écrit par d'autres.

TL;DR L'impression de l'utiliser est qu'il est facile à utiliser et qu'il y a peu de choses à retenir sur l'outil, mais il est relativement facile à voir et à utiliser.

Je ne pense pas que ce soit complètement compréhensible, mais je pense que cela vous aidera certainement à déchiffrer le code source, donc je pense qu'il vaut la peine de continuer à l'utiliser à l'avenir.

Méthode d'installation SOURCE TEAIL

https://www.sourcetrail.com/ Accédez au site sourcetrail et cliquez sur le bouton de téléchargement

image

Téléchargez une image de votre environnement OS pour accéder à la page github de sourcetrail

image

Décompressez et passez à l'application

image

Comment utiliser SOURCETEAIL

[Cliquez ici pour une description du code source utilisé](https://qiita.com/r2en/items/e4f8145f54d6c5b4e77e#%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F% E3% 82% BD% E3% 83% BC% E3% 82% B9% E3% 82% B3% E3% 83% BC% E3% 83% 89)

Une fois démarré, l'écran suivant s'affiche. Appuyez sur Nouveau projet.

image

Lorsque soucetail effectue une analyse statique, un fichier est automatiquement généré dans le référentiel analysé (répertoire). Sélectionnez le nom du projet et l'emplacement du projet pour cette période

Sélectionnez ajouter un groupe source

image

Sélectionnez le langage de programmation que vous utilisez et sélectionnez suivant

image

Entrez ici l'environnement linguistique, le module externe, le module correspondant, etc. Puisqu'il prend en charge le glisser-déposer, le référentiel pertinent est déposé dans Fichiers et répertoires à indexer tel quel.

image

L'écran où le fichier déposé est référencé par show files sur l'écran ci-dessus

Il a été importé correctement

image

Après avoir terminé l'entrée dans une certaine mesure, sélectionnez créer

image

Un écran d'analyse statique du code source s'affiche, sélectionnez donc démarrer.

image

Seach_engine.srctrlbm, seach_engine.srctrldb, seach_engine.srctrlprj sont générés comme indiqué dans le dossier ci-dessous.

image

Sélectionnez Démarrer l'indexation approfondie, car cela semble approfondir à nouveau l'analyse statique.

image

Sélectionnez début

image

Une erreur s'est produite, mais cette fois les modules externes (numpy, pandas, etc.) n'ont pas été référencés lors de la configuration initiale. Cette fois, c'est normal d'aller aussi loin, alors continuez comme ça

image

Vue d'ensemble du code source (modules, classes, fonctions, variables)

Voyons si nous pouvons afficher les composants du code source

Les fichiers existants dans le référentiel sont affichés par ordre alphabétique

image

Les modules existants dans le référentiel sont affichés par ordre alphabétique

image

Les classes existantes dans le référentiel sont affichées par ordre alphabétique

image

Les fonctions existantes dans le référentiel sont affichées par ordre alphabétique

image

Les variables globales existant dans le référentiel sont affichées par ordre alphabétique

image

Analyse du code source (module)

Voyons si une analyse plus détaillée du code source et des dépendances est affichée.

Premier regard sur le module

Dans le fichier app.py, puisque le serveur répondeur est en cours d'exécution, appelez api en tant que variable globale et appelez-la. À l'origine, il devrait être traité par lots au lieu d'API en temps réel,

Puisque nous créons un moteur de recherche simple cette fois, nous allons créer un index de données et le créer uniquement au premier démarrage, donc il existe dans la variable globale

Dans la fonction, il y a une fonction batch_process pour créer un index et un arc, et il y a une API de moteur de recherche, search_engine.

image

Cette fois, search_engine dans app.py est la base de tous les traitements, alors sélectionnons cette fonction.

On peut voir qu'il est composé des variables globales bow et index et des fonctions query_engine, query_post_processor et query_pre_processor.

image

Sélectionnez query_pre_processor pour examiner de plus près

Malheureusement, il existe des classes CountVector et TfidfVector qui héritent de la classe BaseVector, mais les dépendances sont difficiles à comprendre dans ce graphique.

MecabMorphologicalAnalysis hérite également à l'origine de la classe BaseMorphologicalAnalysis, mais il n'apparaît pas non plus à première vue.

image

Je vais me regarder

Vous pouvez voir que query_engine utilise cosine_similarity

image

Vous pouvez voir que query_post_prosessor est fermé sans utiliser d'autres classes ou fonctions

image

Dépendance du code source (classe)

En regardant CountVector, vous pouvez voir qu'il hérite de BaseVector En outre, vous pouvez voir qu'il est appelé à partir du module d'indexation, de la fonction d'indexation et de la fonction query_pre_processor.

image

Au contraire, si vous regardez BaseVector, il est appelé depuis le module count_vector et le module tfidf_vector. Vous pouvez voir qu'il s'agit du parent de la classe CountVector et de la classe TfidfVector.

image

Code source à utiliser

Cette partie n'est pas liée à SOURCE TEAIL, alors lisez-la si vous voulez une compréhension plus approfondie de ce que vous analysez.

La raison du choix de ce code source est de considérer un système avec plusieurs fichiers (modules) et une structure simple qui est facile à comprendre tout en vérifiant si le code a des dépendances et peut être utilisé dans des projets, etc. Parce que le code correspondant était un simple moteur de recherche à l'époque

Aperçu

Lorsque l'utilisateur envoie une requête à l'API, "Quel est l'animal qui crie?", La liste de questions suivante "Quel est l'animal au long nez?" Que l'API contient comme données, De "Qu'est-ce qu'un animal à long cou?", "Qui est le roi des bêtes?", "Qu'est-ce qu'un animal qui hurle?", "Qu'est-ce qu'un animal qui hurle?" C'est un système qui sélectionne la phrase de question la plus proche de la requête et renvoie la réponse "chien" en réponse à celle-ci.

Configuration logique

Les composants théoriques du moteur de recherche se réfèrent à ce qui suit

Les données que vous souhaitez rechercher sont prétraitées via la gestion des informations produit et générées sous forme d'index. C'est un moteur de recherche très simple et minimal qui met en forme les résultats avec un post-processeur de requête et renvoie les résultats de la recherche en tant que réponse.

iOS の画像 (1)

J'ai emprunté un graphique au livre Machine Learning for AI Algorithm Marketing Automation

Je ne pense pas qu'on en ait tellement parlé dans le quartier, mais pour ceux qui veulent chercher et recommander, c'est un livre avec beaucoup d'apprentissage, donc je veux vraiment que tout le monde le lise.

Puisqu'il est cité sans autorisation, il sera immédiatement supprimé si l'auteur ou des parties liées nous contactent.

Structure du répertoire

Si vous le déposez concrètement, ce sera sous la forme suivante

La partie de réglage de la pertinence est omise cette fois car elle varie en fonction des besoins de l'entreprise cette fois-ci.

Le code source décrit cette fois-ci est publié sur github, donc si vous voulez le voir en détail, veuillez accéder à ce qui suit

https://github.com/r2en/simple_search_engine

    ├── app.py    <-Serveur API du répondeur Reçoit les demandes de recherche et renvoie les résultats de la recherche
    │                         
    │
    ├── indexer.py    <-Données du catalogue(des documents)Prétraitement et indexation(前処理済みdes documentsのベクトル化)Générer
    │
    │
    ├── query_engine.py    <-Correspondance et notation des requêtes et des données de catalogue
    │
    │    
    ├── query_pre_processor.py    <-Requete(Demande de recherche d'utilisateur)Dos presque le même que le prétraitement effectué par l'indexeur qui traite au format d'index.
    │
    │  
    ├── query_post_processor.py    <-Générer des résultats de recherche à partir des résultats des requêtes correspondantes et des données de catalogue
    │
    │  
    ├── product_information_management.py    <-Manipuler le groupe de données à rechercher
    │ 
    │
    ├── catalog_data    <-Stocke les données à rechercher
    │  │
    │  │
    │  ├── answer.csv    <-Stocke les données de la réponse demandée par la requête
    │  │
    │  │
    │  └── question.csv    <-Stocke les données de question de la même qualité que la requête
    │  
    │  
    ├── morphological_analysis    <-Un groupe d'outils pour les analyseurs morphologiques des langages naturels
    │  │
    │  ├── base_morphological_analysis.py    <-Classe parente de l'analyseur morphologique de base
    │  │
    │  │
    │  ├── mecab_morphological_analysis.py    <-Stocke le mecab de l'analyseur morphologique
    │  │
    │  │
    │  └── __init__.py
    │  
    │      
    ├── search    <-Rechercher des similitudes entre les requêtes vectorisées et les données de catalogue
    │  │
    │  ├── cosine_similarity.py    <-Recherche de similitudes par similarité cosinus
    │  │
    │  │
    │  └── __init__.py
    │  
    │  
    └── word_embedding    <-Créez une structure de données, un index qui vous permet de rechercher des données de requête et de catalogue
       │
       │
       ├── base_vector.py    <-Classe parente du convertisseur de vecteur de base
       │
       │
       ├── count_vector.py    <-Convertisseur vectoriel basé sur le nombre de BoW
       │
       │
       │
       ├── tfidf_vector.py    <- BoW Tf-Convertisseur vectoriel basé sur IDF
       │
       │
       └── __init__.py

Impressions

L'impression de l'utiliser est qu'il est facile à utiliser et qu'il y a peu de choses à retenir sur l'outil, mais il est relativement facile à voir et à utiliser.

Je ne pense pas que ce soit complètement compréhensible, mais je pense que cela vous aidera certainement à déchiffrer le code source, donc je pense qu'il vaut la peine de continuer à l'utiliser à l'avenir.

Recommended Posts

Analysez le code source de votre propre moteur de recherche simple écrit en Python avec l'outil de visualisation de code "SOURCE TRAIL"
Exécutez l'intelligence de votre propre bibliothèque python avec VScode.
À la recherche du FizzBuzz le plus rapide en Python
[Python] Lire le code source de Bottle Part 2
[Python] Lire le code source de Bottle Part 1
Convertir le code de caractère du fichier avec Python3
Flux de création de votre propre package avec setup.py avec python
Calculer le coefficient de régression d'une analyse de régression simple avec python
Utilisez CASA Toolkit dans votre propre environnement Python
Vérifions et formons statiquement le code du test automatique E2E écrit en Python [VS Code]
Essayez de gratter les données COVID-19 Tokyo avec Python
Essayez de trier vos propres objets avec des files d'attente prioritaires en Python
Calculez des millions de chiffres dans la racine carrée de 2 avec python
Création d'un outil de vente simple avec Python GUI: recherche de numéro d'employé
Comparaison du code de moyenne mobile exponentielle (EMA) écrit en Python
[Homologie] Comptez le nombre de trous dans les données avec Python
Google recherche la chaîne sur la dernière ligne du fichier en Python
Récupérez la source de la page à charger indéfiniment avec python.
Les moteurs de recherche fonctionnent avec python
J'ai comparé le temps de calcul de la moyenne mobile écrite en Python
Exportez le contenu de ~ .xlsx dans le dossier en HTML avec Python
J'ai écrit le code pour écrire le code Brainf * ck en python
[Parlez de la structure de dessin de plotly] Visualisation dynamique avec plotly [python]
Visualisez la fréquence des occurrences de mots dans les phrases avec Word Cloud. [Python]
Résumons le degré de couplage entre les modules avec du code Python
À propos de la recherche peu complète qui apparaît souvent chez les professionnels de la concurrence Aux yeux des débutants avec python
[CleanArchitecture avec Python] Appliquez CleanArchitecture à une API simple étape par étape, et essayez de comprendre "quel type de changement est fort" dans la base de code.
[Python] journalisation dans votre propre module
[Python] Lire le code source de Flask
Logique gacha simple écrite en Python
[Python] Explorez les caractéristiques des titres des meilleurs sites dans les résultats de recherche Google
Obtenez une liste des packages installés dans l'environnement actuel avec python
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
À propos du code Python pour une moyenne mobile simple en supposant l'utilisation de Numba
Recevez une liste des résultats du traitement parallèle en Python avec starmap
[Python & SQLite] J'ai analysé la valeur attendue d'une course avec des chevaux dans la fourchette 1x win ①