Analysieren Sie den Quellcode Ihrer eigenen einfachen Suchmaschine, die in Python geschrieben wurde, mit dem Code-Visualisierungstool "SOURCE TRAIL".

image

image

Ich bin ein Softwareentwickler r2en von white, inc. Unser Unternehmen führt Beratungsarbeiten durch, die sich auf neue Unternehmen konzentrieren. In der Regel entwickelt das Ingenieurteam kostenlose Cloud-Tools für die Entwicklung neuer Unternehmen und neue Unternehmen. Ich bin an allem beteiligt, von der Beratung bis zur PoC-Entwicklung

Als ich nach einem Tool suchte, das den Quellcode bei der Übertragung der Entwicklung von der PoC-Entwicklungsphase auf die Betriebsphase und den Betrieb vorhandener Software interaktiv verstehen konnte, fand ich SOURCE TEAIL, berührte es diesmal und teilte es. Lass es mich versuchen

image

Überblick

SOURCETEAIL ist ein Tool, mit dem Entwickler produktiv codieren können, indem sie den Quellcode analysieren und visualisieren, damit sie nicht viel Zeit damit verbringen, den von anderen geschriebenen Quellcode zu verstehen.

TL;DR Der Eindruck, es tatsächlich zu verwenden, ist, dass es einfach zu bedienen ist und es wenig zu merken gibt, aber es ist relativ einfach zu sehen und zu verwenden.

Ich denke nicht, dass es vollständig verständlich ist, aber ich denke, es wird Ihnen definitiv dabei helfen, den Quellcode zu entschlüsseln. Ich denke, es lohnt sich, ihn auch in Zukunft weiter zu verwenden.

SOURCE TEAIL Installationsmethode

https://www.sourcetrail.com/ Wechseln Sie zur Sourcetrail-Site und klicken Sie auf den Download-Button

image

Laden Sie ein Image Ihrer Betriebssystemumgebung herunter, um zur Sourcetrail-Github-Seite zu springen

image

Entpacken und zur Anwendung wechseln

image

Verwendung von SOURCETEAIL

[Klicken Sie hier, um eine Beschreibung des verwendeten Quellcodes zu erhalten](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)

Beim Start wird der folgende Bildschirm angezeigt. Klicken Sie auf Neues Projekt.

image

Wenn soucetail eine statische Analyse durchführt, wird automatisch eine Datei im analysierten Repository (Verzeichnis) generiert. Wählen Sie den Projektnamen und den Projektstandort für diese Zeit

Wählen Sie Quellgruppe hinzufügen

image

Wählen Sie die verwendete Programmiersprache und klicken Sie auf Weiter

image

Geben Sie hier die Sprachumgebung, das externe Modul, das relevante Modul usw. ein Da Drag & Drop unterstützt wird, wird das entsprechende Repository unverändert in Files & Directories to Index abgelegt.

image

Der Bildschirm, auf den die abgelegte Datei verweist, wird durch Anzeigen von Dateien auf dem obigen Bildschirm referenziert

Es wurde ordnungsgemäß importiert

image

Nachdem Sie den Eintrag teilweise abgeschlossen haben, wählen Sie Erstellen

image

Ein Bildschirm zur statischen Analyse des Quellcodes wird angezeigt. Wählen Sie daher Start.

image

Seach_engine.srctrlbm, seach_engine.srctrldb, seach_engine.srctrlprj werden wie im folgenden Ordner gezeigt generiert.

image

Wählen Sie Start-In-Depth-Indizierung, da dies die statische Analyse erneut zu vertiefen scheint.

image

Wählen Sie Start

image

Ein Fehler ist aufgetreten, aber dieses Mal wurden die externen Module (Numpy, Pandas usw.) bei der Ersteinrichtung nicht referenziert. Diesmal ist es in Ordnung, so weit zu gehen, also mach so weiter, wie es ist

image

Quellcodeübersicht (Module, Klassen, Funktionen, Variablen)

Mal sehen, ob wir die Komponenten des Quellcodes anzeigen können

Im Repository vorhandene Dateien werden in alphabetischer Reihenfolge angezeigt

image

Im Repository vorhandene Module werden in alphabetischer Reihenfolge angezeigt

image

Im Repository vorhandene Klassen werden in alphabetischer Reihenfolge angezeigt

image

Im Repository vorhandene Funktionen werden in alphabetischer Reihenfolge angezeigt

image

Im Repository vorhandene globale Variablen werden in alphabetischer Reihenfolge angezeigt

image

Quellcode-Analyse (Modul)

Mal sehen, ob eine detailliertere Analyse des Quellcodes und der Abhängigkeiten angezeigt wird.

Schauen Sie sich zuerst das Modul an

Rufen Sie in der Datei app.py, da der Responder-Server ausgeführt wird, die API als globale Variable auf und rufen Sie sie auf. Ursprünglich sollte es stapelweise anstelle von Echtzeit-APi verarbeitet werden.

Da wir dieses Mal eine einfache Suchmaschine erstellen, erstellen wir einen Datenindex und erstellen ihn erst beim ersten Start, sodass er in der globalen Variablen vorhanden ist

In der Funktion gibt es eine batch_process-Funktion zum Erstellen von Index und Bogen und eine Suchmaschinen-API, search_engine.

image

Dieses Mal ist search_engine in app.py die Basis aller Verarbeitungen. Wählen wir also diese Funktion aus.

Es ist ersichtlich, dass es sich aus den globalen Variablen bow und index und den Funktionen query_engine, query_post_processor und query_pre_processor zusammensetzt.

image

Wählen Sie query_pre_processor aus, um einen genaueren Blick darauf zu werfen

Leider gibt es CountVector- und TfidfVector-Klassen, die von der BaseVector-Klasse erben, aber die Abhängigkeiten sind in diesem Diagramm schwer zu verstehen.

MecabMorphologicalAnalysis erbt ursprünglich auch von der BaseMorphologicalAnalysis-Klasse, wird aber auch nicht auf den ersten Blick angezeigt.

image

Ich werde uns ansehen

Sie können sehen, dass query_engine cosine_similarity verwendet

image

Sie können sehen, dass query_post_prosessor geschlossen ist, ohne andere Klassen oder Funktionen zu verwenden

image

Quellcode-Abhängigkeit (Klasse)

Wenn Sie sich CountVector ansehen, sehen Sie, dass es von BaseVector erbt Sie können auch sehen, dass es vom Indexermodul, der Indexerfunktion und der Funktion query_pre_processor aufgerufen wird.

image

Wenn Sie sich BaseVector ansehen, wird es im Gegenteil vom count_vector-Modul und vom tfidf_vector-Modul aufgerufen. Sie können sehen, dass es das übergeordnete Element der CountVector-Klasse und der TfidfVector-Klasse ist.

image

Zu verwendender Quellcode

Dieser Teil bezieht sich nicht auf SOURCE TEAIL. Lesen Sie ihn daher, wenn Sie besser verstehen möchten, was Sie analysieren.

Der Grund für die Auswahl dieses Quellcodes besteht darin, ein System mit mehreren Dateien (Modulen) und einer einfachen Struktur in Betracht zu ziehen, die leicht zu verstehen ist, während überprüft wird, ob der Code einige Abhängigkeiten aufweist und in Projekten usw. verwendet werden kann. Weil der entsprechende Code zu dieser Zeit eine einfache Suchmaschine war

Überblick

Wenn der Benutzer eine Abfrage an die API sendet: "Was ist das Tier, das schreit?", Die folgende Fragenliste "Was ist das Tier mit der langen Nase?" Aus "Was ist ein langhalsiges Tier?", "Wer ist der König der Tiere?", "Was ist ein schreiendes Tier?", "Was ist ein schreiendes Tier?" Es ist ein System, das den Fragensatz auswählt, der der Abfrage am nächsten liegt, und die Antwort "Hund" als Antwort darauf zurückgibt.

Logische Konfiguration

Die theoretischen Komponenten der Suchmaschine beziehen sich auf Folgendes

Die Daten, die Sie durchsuchen möchten, werden über das Produktinformationsmanagement vorverarbeitet und als Index generiert. Wenn eine Suchabfrage auf Anforderung des Benutzers gesendet wird, führt die Abfragevorverarbeitung dieselbe Vorverarbeitung durch und sucht mit der Abfrage-Engine nach ähnlichen Elementen. Es ist eine sehr einfache und minimale Suchmaschine, die die Ergebnisse mit einem Abfrage-Postprozessor formatiert und die Suchergebnisse als Antwort zurückgibt.

iOS の画像 (1)

Ich habe mir ein Diagramm aus dem Buch Maschinelles Lernen für Marketing-Automatisierung mit KI-Algorithmus ausgeliehen.

Ich glaube nicht, dass in der Nachbarschaft so viel darüber gesprochen wurde, aber für diejenigen, die suchen und empfehlen möchten, ist es ein Buch mit viel Lernen, also möchte ich auf jeden Fall, dass jeder es liest.

Da es ohne Erlaubnis zitiert wird, wird es sofort gelöscht, wenn der Autor oder verwandte Parteien uns kontaktieren.

Verzeichnisaufbau

Wenn Sie es konkret fallen lassen, wird es in der folgenden Form sein

Der Teil zur Relevanzoptimierung wird dieses Mal weggelassen, da er je nach Geschäftsanforderungen variiert.

Der diesmal beschriebene Quellcode wird auf github veröffentlicht. Wenn Sie ihn also im Detail sehen möchten, greifen Sie bitte auf Folgendes zu

https://github.com/r2en/simple_search_engine

    ├── app.py    <-Responder-API-Server Empfängt Suchanfragen und gibt Suchergebnisse zurück
    │                         
    │
    ├── indexer.py    <-Katalogdaten(Unterlagen)Vorverarbeitung und Index(前処理済みUnterlagenのベクトル化)Generieren
    │
    │
    ├── query_engine.py    <-Abgleich und Bewertung von Abfragen und Katalogdaten
    │
    │    
    ├── query_pre_processor.py    <-Abfrage(Benutzer-Suchanfrage)Dies entspricht fast der Vorverarbeitung durch den Indexer, der im Indexformat verarbeitet.
    │
    │  
    ├── query_post_processor.py    <-Generieren Sie Suchergebnisse aus den Ergebnissen übereinstimmender Abfragen und Katalogdaten
    │
    │  
    ├── product_information_management.py    <-Bearbeiten Sie die zu durchsuchende Datengruppe
    │ 
    │
    ├── catalog_data    <-Speichert die zu durchsuchenden Daten
    │  │
    │  │
    │  ├── answer.csv    <-Speichert die Daten der von der Abfrage angeforderten Antwort
    │  │
    │  │
    │  └── question.csv    <-Speichert Fragendaten mit der gleichen Qualität wie die Abfrage
    │  
    │  
    ├── morphological_analysis    <-Eine Gruppe von Werkzeugen für morphologische Analysatoren natürlicher Sprachen
    │  │
    │  ├── base_morphological_analysis.py    <-Elternklasse des morphologischen Basisanalysators
    │  │
    │  │
    │  ├── mecab_morphological_analysis.py    <-Speichert Mecab des morphologischen Analysators
    │  │
    │  │
    │  └── __init__.py
    │  
    │      
    ├── search    <-Suchen Sie nach Ähnlichkeiten zwischen vektorisierten Abfragen und Katalogdaten
    │  │
    │  ├── cosine_similarity.py    <-Suche nach Ähnlichkeiten nach Kosinusähnlichkeit
    │  │
    │  │
    │  └── __init__.py
    │  
    │  
    └── word_embedding    <-Erstellen Sie eine Datenstruktur und einen Index, mit dem Sie Abfrage- und Katalogdaten durchsuchen können
       │
       │
       ├── base_vector.py    <-Übergeordnete Klasse des Basisvektorkonverters
       │
       │
       ├── count_vector.py    <-BoW-Zählungsbasierter Vektorkonverter
       │
       │
       │
       ├── tfidf_vector.py    <- BoW Tf-Idf-basierter Vektorkonverter
       │
       │
       └── __init__.py

Impressionen

Der Eindruck, es tatsächlich zu verwenden, ist, dass es einfach zu bedienen ist und es wenig zu merken gibt, aber es ist relativ einfach zu sehen und zu verwenden.

Ich denke nicht, dass es vollständig verständlich ist, aber ich denke, es wird Ihnen definitiv dabei helfen, den Quellcode zu entschlüsseln. Ich denke, es lohnt sich, ihn auch in Zukunft weiter zu verwenden.

Recommended Posts

Analysieren Sie den Quellcode Ihrer eigenen einfachen Suchmaschine, die in Python geschrieben wurde, mit dem Code-Visualisierungstool "SOURCE TRAIL".
Führen Sie die Intelligenz Ihrer eigenen Python-Bibliothek mit VScode aus.
Auf der Suche nach dem schnellsten FizzBuzz in Python
[Python] Lesen Sie den Quellcode von Flasche Teil 2
[Python] Lesen Sie den Quellcode von Flasche Teil 1
Konvertieren Sie den Zeichencode der Datei mit Python3
Ablauf beim Erstellen eines eigenen Pakets mit setup.py mit Python
Berechnen Sie den Regressionskoeffizienten der einfachen Regressionsanalyse mit Python
Verwenden Sie CASA Toolkit in Ihrer eigenen Python-Umgebung
Lassen Sie uns den Code des in Python [VS Code] geschriebenen automatischen E2E-Tests statisch überprüfen und formatieren.
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Versuchen Sie, Ihre eigenen Objekte mit Prioritätswarteschlangen in Python zu sortieren
Berechnen Sie mit Python Millionen von Stellen in der Quadratwurzel von 2
Einfache Erstellung von Verkaufstools mit Python-GUI: Suche nach Mitarbeiternummern
Vergleich des in Python geschriebenen EMA-Codes (Exponential Moving Average)
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Google sucht mit Python nach der Zeichenfolge in der letzten Zeile der Datei
Holen Sie sich die Quelle der Seite unbegrenzt mit Python zu laden.
Suchmaschinen arbeiten mit Python
Ich habe die Berechnungszeit des in Python geschriebenen gleitenden Durchschnitts verglichen
Geben Sie den Inhalt von ~ .xlsx im Ordner mit Python in HTML aus
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben
[Sprechen Sie über die Zeichnungsstruktur von plotly] Dynamische Visualisierung mit plotly [Python]
Visualisieren Sie die Häufigkeit von Wortvorkommen in Sätzen mit Word Cloud. [Python]
Fassen wir den Grad der Kopplung zwischen Modulen mit Python-Code zusammen
Über etwas vollständige Suche, die häufig bei Wettkampfprofis auftritt Aus den Augen von Anfängern mit Python
[CleanArchitecture mit Python] Wenden Sie CleanArchitecture Schritt für Schritt auf eine einfache API an und versuchen Sie zu verstehen, welche Art von Änderung in der Codebasis stark ist.
[Python] Anmelden Ihres eigenen Moduls
[Python] Lesen Sie den Flask-Quellcode
Einfache Gacha-Logik in Python geschrieben
[Python] Untersuchen Sie die Eigenschaften der Titel der Top-Websites in den Google-Suchergebnissen
Rufen Sie mit Python eine Liste der in der aktuellen Umgebung installierten Pakete ab
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Informationen zu Python-Code für einfachen gleitenden Durchschnitt unter Verwendung von Numba
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
[Python & SQLite] Ich habe den erwarteten Wert eines Rennens mit Pferden im 1x-Gewinnbereich ① analysiert