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
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.
https://www.sourcetrail.com/ Wechseln Sie zur Sourcetrail-Site und klicken Sie auf den Download-Button
Laden Sie ein Image Ihrer Betriebssystemumgebung herunter, um zur Sourcetrail-Github-Seite zu springen
Entpacken und zur Anwendung wechseln
[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.
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
Wählen Sie die verwendete Programmiersprache und klicken Sie auf Weiter
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.
Der Bildschirm, auf den die abgelegte Datei verweist, wird durch Anzeigen von Dateien auf dem obigen Bildschirm referenziert
Es wurde ordnungsgemäß importiert
Nachdem Sie den Eintrag teilweise abgeschlossen haben, wählen Sie Erstellen
Ein Bildschirm zur statischen Analyse des Quellcodes wird angezeigt. Wählen Sie daher Start.
Seach_engine.srctrlbm, seach_engine.srctrldb, seach_engine.srctrlprj werden wie im folgenden Ordner gezeigt generiert.
Wählen Sie Start-In-Depth-Indizierung, da dies die statische Analyse erneut zu vertiefen scheint.
Wählen Sie Start
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
Mal sehen, ob wir die Komponenten des Quellcodes anzeigen können
Im Repository vorhandene Dateien werden in alphabetischer Reihenfolge angezeigt
Im Repository vorhandene Module werden in alphabetischer Reihenfolge angezeigt
Im Repository vorhandene Klassen werden in alphabetischer Reihenfolge angezeigt
Im Repository vorhandene Funktionen werden in alphabetischer Reihenfolge angezeigt
Im Repository vorhandene globale Variablen werden in alphabetischer Reihenfolge angezeigt
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.
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.
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.
Ich werde uns ansehen
Sie können sehen, dass query_engine cosine_similarity verwendet
Sie können sehen, dass query_post_prosessor geschlossen ist, ohne andere Klassen oder Funktionen zu verwenden
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.
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.
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
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.
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.
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.
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
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