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
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.
https://www.sourcetrail.com/ Accédez au site sourcetrail et cliquez sur le bouton de téléchargement
Téléchargez une image de votre environnement OS pour accéder à la page github de sourcetrail
Décompressez et passez à l'application
[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.
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
Sélectionnez le langage de programmation que vous utilisez et sélectionnez suivant
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.
L'écran où le fichier déposé est référencé par show files sur l'écran ci-dessus
Il a été importé correctement
Après avoir terminé l'entrée dans une certaine mesure, sélectionnez créer
Un écran d'analyse statique du code source s'affiche, sélectionnez donc démarrer.
Seach_engine.srctrlbm, seach_engine.srctrldb, seach_engine.srctrlprj sont générés comme indiqué dans le dossier ci-dessous.
Sélectionnez Démarrer l'indexation approfondie, car cela semble approfondir à nouveau l'analyse statique.
Sélectionnez début
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
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
Les modules existants dans le référentiel sont affichés par ordre alphabétique
Les classes existantes dans le référentiel sont affichées par ordre alphabétique
Les fonctions existantes dans le référentiel sont affichées par ordre alphabétique
Les variables globales existant dans le référentiel sont affichées par ordre alphabétique
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.
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.
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.
Je vais me regarder
Vous pouvez voir que query_engine utilise cosine_similarity
Vous pouvez voir que query_post_prosessor est fermé sans utiliser d'autres classes ou fonctions
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.
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.
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
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.
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.
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.
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
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