diff --git a/.gitignore b/.gitignore index 154e127..06cba32 100644 --- a/.gitignore +++ b/.gitignore @@ -475,3 +475,5 @@ $RECYCLE.BIN/ # Windows shortcuts *.lnk + +Models/ \ No newline at end of file diff --git a/RhSolutions.ML.Builder/.vscode/launch.json b/.vscode/launch.json similarity index 84% rename from RhSolutions.ML.Builder/.vscode/launch.json rename to .vscode/launch.json index 35b44e4..77973cc 100644 --- a/RhSolutions.ML.Builder/.vscode/launch.json +++ b/.vscode/launch.json @@ -10,9 +10,9 @@ "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. - "program": "${workspaceFolder}/bin/Debug/net7.0/RhSolutions.Classifications.dll", + "program": "${workspaceFolder}/RhSolutions.ML.Builder/bin/Debug/net7.0/RhSolutions.ML.Builder.dll", "args": [], - "cwd": "${workspaceFolder}", + "cwd": "${workspaceFolder}/RhSolutions.ML.Builder", // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console "console": "internalConsole", "stopAtEntry": false diff --git a/RhSolutions.ML.Builder/.vscode/tasks.json b/.vscode/tasks.json similarity index 81% rename from RhSolutions.ML.Builder/.vscode/tasks.json rename to .vscode/tasks.json index a6f0b13..e1d45f0 100644 --- a/RhSolutions.ML.Builder/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -7,7 +7,7 @@ "type": "process", "args": [ "build", - "${workspaceFolder}/RhSolutions.Classifications.csproj", + "${workspaceFolder}/RhSolutions.ML.sln", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], @@ -19,7 +19,7 @@ "type": "process", "args": [ "publish", - "${workspaceFolder}/RhSolutions.Classifications.csproj", + "${workspaceFolder}/RhSolutions.ML.sln", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], @@ -33,7 +33,7 @@ "watch", "run", "--project", - "${workspaceFolder}/RhSolutions.Classifications.csproj" + "${workspaceFolder}/RhSolutions.ML.sln" ], "problemMatcher": "$msCompile" } diff --git a/Data/misc_sleeves.txt b/Data/misc_sleeves.txt new file mode 100644 index 0000000..f879a84 --- /dev/null +++ b/Data/misc_sleeves.txt @@ -0,0 +1,7 @@ +Пресс-втулка 16 Монтажная гильза +Пресс-втулка 20 Монтажная гильза +Пресс-втулка 25 Монтажная гильза +Пресс-втулка 32 Монтажная гильза +Пресс-втулка 40 Монтажная гильза +Пресс-втулка 50 Монтажная гильза +Пресс-втулка 63 Монтажная гильза diff --git a/Data/rehau_sleeves.txt b/Data/rehau_sleeves.txt new file mode 100644 index 0000000..d07e813 --- /dev/null +++ b/Data/rehau_sleeves.txt @@ -0,0 +1,7 @@ +Монтажная гильза 16 PX Монтажная гильза +Монтажная гильза 20 PX Монтажная гильза +Монтажная гильза 25 PX Монтажная гильза +Монтажная гильза 32 PX Монтажная гильза +Монтажная гильза 40 PX Монтажная гильза +Монтажная гильза 50 MX Монтажная гильза +Монтажная гильза 63 MX Монтажная гильза diff --git a/Data/rehau_tpiece.txt b/Data/rehau_tpiece.txt new file mode 100644 index 0000000..a5c52a0 --- /dev/null +++ b/Data/rehau_tpiece.txt @@ -0,0 +1,46 @@ +Тройник равнопроходный 16-16-16 PX Тройник RAUTITAN +Тройник равнопроходный 20-20-20 PX Тройник RAUTITAN +Тройник равнопроходный 25-25-25 PX Тройник RAUTITAN +Тройник равнопроходный 32-32-32 PX Тройник RAUTITAN +Тройник равнопроходный 40-40-40 PX Тройник RAUTITAN +Тройник равнопроходный 50-50-50 RX+ Тройник RAUTITAN +Тройник равнопроходный 63-63-63 RX+ Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 20-16-20 PX Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 25-16-25 PX Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 25-20-25 PX Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 32-16-32 PX Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 32-20-32 PX Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 32-25-32 PX Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 40-20-40 PX Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 40-25-40 PX Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 40-32-40 PX Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 50-20-50 RX Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 50-20-50 RX+ Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 50-25-50 RX+ Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 50-32-50 RX+ Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 50-40-50 RX+ Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 63-25-63 RX+ Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 63-32-63 RX+ Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 63-40-63 RX+ Тройник RAUTITAN +Тройник с уменьшенным боковым проходом 63-50-63 RX+ Тройник RAUTITAN +Тройник с уменьшенным торцевым проходом 20-20-16 PX Тройник RAUTITAN +Тройник с уменьшенным торцевым проходом 25-25-16 PX Тройник RAUTITAN +Тройник с уменьшенным торцевым проходом 25-25-20 PX Тройник RAUTITAN +Тройник с уменьшенным торцевым проходом 32-32-20 PX Тройник RAUTITAN +Тройник с уменьшенным торцевым проходом 32-32-25 PX Тройник RAUTITAN +Тройник с уменьшенным боковым и торцевым проходами 20-16-16 PX Тройник RAUTITAN +Тройник с уменьшенным боковым и торцевым проходами 25-16-16 PX Тройник RAUTITAN +Тройник с уменьшенным боковым и торцевым проходами 25-16-20 PX Тройник RAUTITAN +Тройник с уменьшенным боковым и торцевым проходами 25-20-16 PX Тройник RAUTITAN +Тройник с уменьшенным боковым и торцевым проходами 25-20-20 PX Тройник RAUTITAN +Тройник с уменьшенным боковым и торцевым проходами 32-20-20 PX Тройник RAUTITAN +Тройник с уменьшенным боковым и торцевым проходами 32-20-25 PX Тройник RAUTITAN +Тройник с уменьшенным боковым и торцевым проходами 32-25-20 PX Тройник RAUTITAN +Тройник с уменьшенным боковым и торцевым проходами 32-25-25 PX Тройник RAUTITAN +Тройник с уменьшенным боковым и торцевым проходами 40-32-32 PX Тройник RAUTITAN +Тройник с уменьшенным боковым и торцевым проходами 50-32-40 RX+ Тройник RAUTITAN +Тройник с увеличенным боковым проходом 16-20-16 PX Тройник RAUTITAN +Тройник с увеличенным боковым проходом 16-25-16 PX Тройник RAUTITAN +Тройник с увеличенным боковым проходом 20-25-16 PX Тройник RAUTITAN +Тройник с увеличенным боковым проходом 20-25-20 PX Тройник RAUTITAN +Тройник с увеличенным боковым проходом 25-32-25 PX Тройник RAUTITAN diff --git a/RhSolutions.ML.Builder/.gitignore b/RhSolutions.ML.Builder/.gitignore deleted file mode 100644 index 154e127..0000000 --- a/RhSolutions.ML.Builder/.gitignore +++ /dev/null @@ -1,477 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET -project.lock.json -project.fragment.lock.json -artifacts/ - -# Tye -.tye/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.tlog -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio 6 auto-generated project file (contains which files were open etc.) -*.vbp - -# Visual Studio 6 workspace and project file (working project files containing files to include in project) -*.dsw -*.dsp - -# Visual Studio 6 technical files -*.ncb -*.aps - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# Visual Studio History (VSHistory) files -.vshistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd - -# VS Code files for those working on multiple tools -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ - -# Windows Installer files from build outputs -*.cab -*.msi -*.msix -*.msm -*.msp - -# JetBrains Rider -*.sln.iml - -## -## Visual studio for Mac -## - - -# globs -Makefile.in -*.userprefs -*.usertasks -config.make -config.status -aclocal.m4 -install-sh -autom4te.cache/ -*.tar.gz -tarballs/ -test-results/ - -# Mac bundle stuff -*.dmg -*.app - -# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk diff --git a/RhSolutions.ML.Builder/Data/train.tsv b/RhSolutions.ML.Builder/Data/train.tsv deleted file mode 100644 index 5d6f4ff..0000000 --- a/RhSolutions.ML.Builder/Data/train.tsv +++ /dev/null @@ -1,351 +0,0 @@ -Name Type -Универсальн.труба RAUTITAN stabil 16,2х2,6 мм, бухта 100 м Труба stabil -Универсальн.труба RAUTITAN stabil 20х2,9 мм, бухта 100 м Труба stabil -Универсальн.труба RAUTITAN stabil 25х3,7 мм, бухта 50 м Труба stabil -Универсальн.труба RAUTITAN stabil 32х4,7 мм, бухта 25 м Труба stabil -Универсальн.труба RAUTITAN stabil 16,2х2,6 мм, прям.отрезки 5м Труба stabil -Универсальн.труба RAUTITAN stabil 20х2,9 мм, прям.отрезки 5м Труба stabil -Универсальн.труба RAUTITAN stabil 25х3,7 мм, прям.отрезки 5м Труба stabil -Универсальн.труба RAUTITAN stabil 32х4,7 мм, прям.отрезки 5м Труба stabil -Универсальн.труба RAUTITAN stabil 40х6,0 мм, прям.отрезки 5м Труба stabil -Унив.труба RAUTITAN flex 16x2,2, бухта 100м Труба flex -Унив.труба RAUTITAN flex 20x2,8, бухта 100м Труба flex -Унив.труба RAUTITAN flex 25x3,5, бухта 50м Труба flex -Унив.труба RAUTITAN flex 32x4,4, бухта 50м Труба flex -Унив.труба RAUTITAN flex 16x2,2, прям.отрезки 6м Труба flex -Унив.труба RAUTITAN flex 20x2,8, прям.отрезки 6м Труба flex -Унив.труба RAUTITAN flex 25x3,5, прям.отрезки 6м Труба flex -Унив.труба RAUTITAN flex 32x4,4, прям.отрезки 6м Труба flex -Унив.труба RAUTITAN flex 40x5,5, прям.отрезки 6м Труба flex -Унив.труба RAUTITAN flex 50x6,9, прям.отрезки 6м Труба flex -Унив.труба RAUTITAN flex 63x8,6, прям.отрезки 6м Труба flex -Унив.труба РЕХАУ FLEX 16x2,2, бухта 100м Труба flex -Унив.труба РЕХАУ FLEX 20x2,8, бухта 100м Труба flex -Унив.труба РЕХАУ FLEX 25x3,5, бухта 50м Труба flex -Унив.труба РЕХАУ FLEX 32x4,4, бухта 50м Труба flex -Унив. труба RAUTITAN pink+ 16х2,2 мм, бухта 120 м Труба pink -Унив. труба RAUTITAN pink+ 16х2,2 мм, прямые отрезки 6 м Труба pink -Унив. труба RAUTITAN pink+ 20х2,8 мм, бухта 120 м Труба pink -Унив. труба RAUTITAN pink+ 20х2,8 мм, прямые отрезки 6 м Труба pink -Унив. труба RAUTITAN pink+ 25х3,5 мм, бухта 50 м Труба pink -Унив. труба RAUTITAN pink+ 25х3,5 мм, прямые отрезки 6 м Труба pink -Унив. труба RAUTITAN pink+ 32х4,4 мм, бухта 50 м Труба pink -Унив. труба RAUTITAN pink+ 32х4,4 мм, прямые отрезки 6 м Труба pink -Унив. труба RAUTITAN pink+ 40х5,5 мм, прямые отрезки 6 м Труба pink -Унив. труба RAUTITAN pink+ 50х6,9 мм, прямые отрезки 6 м Труба pink -Унив. труба RAUTITAN pink+ 63х8,7 мм, прямые отрезки 6 м Труба pink -Отоп. труба RAUTITAN black 16х2,2 мм, бухта 200 м Труба black -Отоп. труба RAUTITAN black 20х2,8 мм, бухта 180 м Труба black -Отоп. труба RAUTITAN black 25х3,5 мм, бухта 100 м Труба black -Отоп.труба РЕХАУ BLACK 16х2,2 мм, бухта 200 м Труба black -Отоп.труба РЕХАУ BLACK 20х2,8 мм, бухта 180 м Труба black -Отоп.труба РЕХАУ BLACK 25х3,5 мм, бухта 100 м Труба black -Фиксирующий желоб для ПЭ-трубы 16/17 Фиксирующий желоб -Фиксирующий желоб для ПЭ-трубы 20 Фиксирующий желоб -Фиксирующий желоб для ПЭ-трубы 25 Фиксирующий желоб -Фиксирующий желоб для ПЭ-трубы 32 Фиксирующий желоб -Фиксирующий желоб для ПЭ-трубы 40 Фиксирующий желоб -Фиксирующий желоб для ПЭ-трубы 50 Фиксирующий желоб -Фиксирующий желоб для ПЭ-трубы 63 Фиксирующий желоб -Монтажная гильза 16 PX Монтажная гильза -Монтажная гильза 20 PX Монтажная гильза -Монтажная гильза 25 PX Монтажная гильза -Монтажная гильза 32 PX Монтажная гильза -Монтажная гильза 40 PX Монтажная гильза -Монтажная гильза 50 MX Монтажная гильза -Монтажная гильза 63 MX Монтажная гильза -Тройник равнопроходный 16-16-16 PX Тройник RAUTITAN -Тройник 16 Тройник RAUTITAN -Тройник 16-16-16 Тройник RAUTITAN -Тройник равнопроходный 20-20-20 PX Тройник RAUTITAN -Тройник 20 Тройник RAUTITAN -Тройник 20-20-20 Тройник RAUTITAN -Тройник равнопроходный 25-25-25 PX Тройник RAUTITAN -Тройник 25 Тройник RAUTITAN -Тройник 25-25-25 Тройник RAUTITAN -Тройник равнопроходный 32-32-32 PX Тройник RAUTITAN -Тройник 32 Тройник RAUTITAN -Тройник 32-32-32 Тройник RAUTITAN -Тройник равнопроходный 40-40-40 PX Тройник RAUTITAN -Тройник 40 Тройник RAUTITAN -Тройник 40-40-40 Тройник RAUTITAN -Тройник равнопроходный 50-50-50 RX+ Тройник RAUTITAN -Тройник 50 Тройник RAUTITAN -Тройник 50-50-50 Тройник RAUTITAN -Тройник равнопроходный 63-63-63 RX+ Тройник RAUTITAN -Тройник 63 Тройник RAUTITAN -Тройник 63-63-63 Тройник RAUTITAN -Проточный настенный угольник 16/16-Rp 1/2 длинный RX+ Проточный угольник -Проточный настенный угольник 20/20-Rp 1/2 длинный RX+ Проточный угольник -Проточный настенный угольник 25/25-Rp 1/2 длинный RX+ Проточный угольник -Проточный настенный угольник 16/16-Rp 1/2 короткий RX+ Проточный угольник -Проточный настенный угольник 20/20-Rp 1/2 короткий RX+ Проточный угольник -Проточный настенный угольник 16/20-Rp 1/2 короткий RX+ Проточный угольник -Проточный настенный угольник 20/16-Rp 1/2 короткий RX+ Проточный угольник -Проточный настенный угольник 25/25-Rp 1/2 короткий RX+ Проточный угольник -Тройник RAUTITAN RX+ с наружной резьбой 16-16-R 1/2 Тройник RAUTITAN резьбовой -Тройник RAUTITAN RX+ с наружной резьбой 20-20-R 1/2 Тройник RAUTITAN резьбовой -Тройник RAUTITAN RX+ с наружной резьбой 20-20-R 3/4 Тройник RAUTITAN резьбовой -Тройник с уменьшенным боковым проходом 20-16-20 PX Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 25-16-25 PX Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 25-20-25 PX Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 32-16-32 PX Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 32-20-32 PX Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 32-25-32 PX Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 40-20-40 PX Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 40-25-40 PX Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 40-32-40 PX Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 50-20-50 RX+ Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 50-25-50 RX+ Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 50-32-50 RX+ Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 50-40-50 RX+ Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 63-25-63 RX+ Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 63-32-63 RX+ Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 63-40-63 RX+ Тройник RAUTITAN -Тройник с уменьшенным боковым проходом 63-50-63 RX+ Тройник RAUTITAN -Тройник с уменьшенным торцевым проходом 20-20-16 PX Тройник RAUTITAN -Тройник с уменьшенным торцевым проходом 25-25-16 PX Тройник RAUTITAN -Тройник с уменьшенным торцевым проходом 25-25-20 PX Тройник RAUTITAN -Тройник с уменьшенным торцевым проходом 32-32-20 PX Тройник RAUTITAN -Тройник с уменьшенным торцевым проходом 32-32-25 PX Тройник RAUTITAN -Тройник с уменьшенным боковым и торцевым проходами 20-16-16 PX Тройник RAUTITAN -Тройник с уменьшенным боковым и торцевым проходами 25-16-16 PX Тройник RAUTITAN -Тройник с уменьшенным боковым и торцевым проходами 25-16-20 PX Тройник RAUTITAN -Тройник с уменьшенным боковым и торцевым проходами 25-20-16 PX Тройник RAUTITAN -Тройник с уменьшенным боковым и торцевым проходами 25-20-20 PX Тройник RAUTITAN -Тройник с уменьшенным боковым и торцевым проходами 32-20-20 PX Тройник RAUTITAN -Тройник с уменьшенным боковым и торцевым проходами 32-20-25 PX Тройник RAUTITAN -Тройник с уменьшенным боковым и торцевым проходами 32-25-20 PX Тройник RAUTITAN -Тройник с уменьшенным боковым и торцевым проходами 32-25-25 PX Тройник RAUTITAN -Тройник с уменьшенным боковым и торцевым проходами 40-32-32 PX Тройник RAUTITAN -Тройник с уменьшенным боковым и торцевым проходами 50-32-40 RX+ Тройник RAUTITAN -Тройник с увеличенным боковым проходом 16-20-16 PX Тройник RAUTITAN -Тройник с увеличенным боковым проходом 16-25-16 PX Тройник RAUTITAN -Тройник с увеличенным боковым проходом 20-25-16 PX Тройник RAUTITAN -Тройник с увеличенным боковым проходом 20-25-20 PX Тройник RAUTITAN -Тройник с увеличенным боковым проходом 25-32-25 PX Тройник RAUTITAN -Тройник настенный с внутренней резьбой 16-Rp1/2-16 RX+ Тройник RAUTITAN резьбовой -Тройник настенный с внутренней резьбой 20-Rp1/2-16 RX+ Тройник RAUTITAN резьбовой -Тройник настенный с внутренней резьбой 20-Rp1/2-20 RX+ Тройник RAUTITAN резьбовой -Тройник с внутр. резьбой на боков. проходе 25-Rp 1/2-25 RX+ Тройник RAUTITAN резьбовой -Тройник с внутр. резьбой на боков. проходе 25-Rp 3/4-25 RX+ Тройник RAUTITAN резьбовой -Тройник с внутр. резьбой на боков. проходе 32-Rp 3/4-25 RX+ Тройник RAUTITAN резьбовой -Тройник с внутр. резьбой на боков. проходе 32-Rp 3/4-32 RX+ Тройник RAUTITAN резьбовой -Тройник с внутр. резьбой на боков. проходе 32-Rp 1-32 RX+ Тройник RAUTITAN резьбовой -Тройник с внутр. резьбой на боков. проходе 40-Rp 1-40 RX+ Тройник RAUTITAN резьбовой -Тройник с внутр. резьбой на боков. проходе 50-Rp 1-50 RX+ Тройник RAUTITAN резьбовой -Муфта соединительная равнопроходная 16 PX Муфта соединительная -Муфта соединительная равнопроходная 20 PX Муфта соединительная -Муфта соединительная равнопроходная 25 PX Муфта соединительная -Муфта соединительная равнопроходная 32 PX Муфта соединительная -Муфта соединительная равнопроходная 40 PX Муфта соединительная -Муфта соединительная равнопроходная 50 RХ+ Муфта соединительная -Муфта соединительная равнопроходная 63 RХ + Муфта соединительная -Муфта соединительная переходная 20-16 PX Муфта соединительная -Муфта соединительная переходная 25-16 PX Муфта соединительная -Муфта соединительная переходная 25-20 PX Муфта соединительная -Муфта соединительная переходная 32-25 PX Муфта соединительная -Муфта соединительная переходная 40-32 PX Муфта соединительная -Муфта соединительная переходная 40-25 RX+ Муфта соединительная -Муфта соединительная переходная 50-32 RX+ Муфта соединительная -Муфта соединительная переходная 50-40 RX+ Муфта соединительная -Муфта соединительная переходная 63-50 RX+ Муфта соединительная -Переходник с наружной резьбой 16-R 1/2 RX+ Переходник на наружную резьбу -Переходник с наружной резьбой 16-R 3/4 RX+ Переходник на наружную резьбу -Переходник с наружной резьбой 16-R 1 RX+ Переходник на наружную резьбу -Переходник с наружной резьбой 20-R 1/2 RX+ Переходник на наружную резьбу -Переходник с наружной резьбой 20-R 3/4 RX+ Переходник на наружную резьбу -Переходник с наружной резьбой 20-R 1 RX+ Переходник на наружную резьбу -Переходник с наружной резьбой 25-R 1/2 RX+ Переходник на наружную резьбу -Переходник с наружной резьбой 25-R 3/4 RX+ Переходник на наружную резьбу -Переходник с наружной резьбой 25-R 1 RX+ Переходник на наружную резьбу -Переходник с наружной резьбой 32-R 3/4 RX+ Переходник на наружную резьбу -Переходник с наружной резьбой 32-R 1 RX+ Переходник на наружную резьбу -Переходник с наружной резьбой 32-R 1 1/4 RX+ Переходник на наружную резьбу -Переходник с наружной резьбой 40-R 1 1/4 RX+ Переходник на наружную резьбу -Переходник с наружной резьбой 50-R 1 1/4 RX+ Переходник на наружную резьбу -Переходник с наружной резьбой 50-R 1 1/2 RX+ Переходник на наружную резьбу -Переходник с наружной резьбой 63-R 2 RX+ Переходник на наружную резьбу -Переходник с внутренней резьбой 16-Rp 1/2 RX+ Переходник на внутреннюю резьбу -Переходник с внутренней резьбой 20-Rp 1/2 RX+ Переходник на внутреннюю резьбу -Переходник с внутренней резьбой 20-Rp 3/4 RX+ Переходник на внутреннюю резьбу -Переходник с внутренней резьбой 25-Rp 1/2 RX+ Переходник на внутреннюю резьбу -Переходник с внутренней резьбой 25-Rp 3/4 RX+ Переходник на внутреннюю резьбу -Переходник с внутренней резьбой 25-Rp 1 RX+ Переходник на внутреннюю резьбу -Переходник с внутренней резьбой 32-Rp 3/4 RX+ Переходник на внутреннюю резьбу -Переходник с внутренней резьбой 32-Rр 1 RX+ Переходник на внутреннюю резьбу -Переходник с внутренней резьбой 40-Rр 1 1/4 RX+ Переходник на внутреннюю резьбу -Переходник с накидной гайкой 16-G 1/2 RX+ Переходник на накидную гайку -Переходник с накидной гайкой 16-G 3/4 RX+ Переходник на накидную гайку -Переходник с накидной гайкой 20-G 1/2 RX+ Переходник на накидную гайку -Переходник с накидной гайкой 20-G 3/4 RX+ Переходник на накидную гайку -Переходник с накидной гайкой 25-G 3/4 RX+ Переходник на накидную гайку -Переходник с накидной гайкой 25-G 1 RX+ Переходник на накидную гайку -Переходник с накидной гайкой 32-G 1 RX+ Переходник на накидную гайку -Переходник с накидной гайкой 32-G 1 1/4 RX+ Переходник на накидную гайку -Переходник с накидной гайкой 32-G 1 1/2 RX+ Переходник на накидную гайку -Переходник с накидной гайкой 40-G 1 1/2 RX+ Переходник на накидную гайку -Переходник с накидной гайкой 50-G 1 3/4 RX+ Переходник на накидную гайку -Переходник с накидной гайкой 63-G 2 3/8 RX+ Переходник на накидную гайку -Переходник на евроконус 16-G 3/4 Переходник на евроконус -Переходник на евроконус 20-G 3/4 Переходник на евроконус -Угольник 90°, 50 RX+ Угольник -Угольник 90°, 63 RX+ Угольник -Угольник 90°, 16 PX Угольник -Угольник 90°, 20 PX Угольник -Угольник 90°, 25 PX Угольник -Угольник 90°, 32 PX Угольник -Угольник 90°, 40 PX Угольник -Угольник 45°, 50 RX+ Угольник -Угольник 45°, 63 RX+ Угольник -Угольник 45°, 20 PX Угольник -Угольник 45°, 25 PX Угольник -Угольник 45°, 32 PX Угольник -Угольник 45°, 40 PX Угольник -Фиксатор поворота с кольцами 90°, 16 Фиксатор поворота -Фиксатор поворота с кольцами 90°, 20 Фиксатор поворота -Фиксатор поворота с кольцами 90°, 25 Фиксатор поворота -Фиксатор поворота с кольцами 90°, 32 Фиксатор поворота -Фиксатор поворота с кольцами 45°, 16 Фиксатор поворота -Фиксатор поворота с кольцами 45°, 20 Фиксатор поворота -Фиксатор поворота с кольцами 45°, 25 Фиксатор поворота -Фиксатор поворота с кольцами 45°, 32 Фиксатор поворота -Угольник-переходник с наружной резьбой 16-R 1/2 RX+ Угольник с наружной резьбой -Угольник-переходник с наружной резьбой 20-R 1/2 RX+ Угольник с наружной резьбой -Угольник-переходник с наружной резьбой 20-R 3/4 RX+ Угольник с наружной резьбой -Угольник-переходник с наружной резьбой 25-R 3/4 RX+ Угольник с наружной резьбой -Угольник-переходник с наружной резьбой 32-R 3/4 RX+ Угольник с наружной резьбой -Угольник-переходник с наружной резьбой 32-R 1 RX+ Угольник с наружной резьбой -Угольник-переходник с внутренней резьбой 16-Rp 1/2 RX+ Угольник с внутренней резьбой -Угольник-переходник с внутренней резьбой 16-Rp 3/4 RX+ Угольник с внутренней резьбой -Угольник-переходник с внутренней резьбой 20-Rp 1/2 RX+ Угольник с внутренней резьбой -Угольник-переходник с внутренней резьбой 20-Rp 3/4 RX+ Угольник с внутренней резьбой -Угольник-переходник с внутренней резьбой 25-Rp 1 RX+ Угольник с внутренней резьбой -Угольник настенный с внутр. резьбой 16-Rp 1/2 RX+ Угольник с внутренней резьбой -Угольник настенный с внутр. резьбой 20-Rp 1/2 RX+ Угольник с внутренней резьбой -Угольник настенный с внутр. резьбой 20-Rp 3/4 RX+ Угольник с внутренней резьбой -Угольник настенный с внутр. резьбой 25-Rp 3/4 RX+ Угольник с внутренней резьбой -Угольник настенный с длинным патрубком, внутр. резьба 16-Rp 1/2 RX+ Угольник с внутренней резьбой -Угольник настенный с длинным патрубком, внутр. резьба 20-Rp 1/2 RX+ Угольник с внутренней резьбой -Угольник настенный с наружной резьбой 16-R 1/2 RX+ Угольник с наружной резьбой -Угольник настенный с наружной резьбой 20-R 1/2 RX+ Угольник с наружной резьбой -Угольник настенный с наружной резьбой 20-R 3/4 RX+ Угольник с наружной резьбой -Угольник настенный с внутр. резьбой 16-Rp 1/2 длинный, 59 мм RX+ Угольник с внутренней резьбой -Угольник настенный с внутр. резьбой 20-Rp 1/2 длинный, 59 мм RX+ Угольник с внутренней резьбой -Угольник настенный с внутр. резьбой 16-Rp 1/2 длинный, 70 мм RX+ Угольник с внутренней резьбой -Угольник настенный с внутренней резьбой 20-Rp1/2 70мм RX+ Угольник с внутренней резьбой -Кронштейн, тип O 100 Кронштейн -Кронштейн, тип O 75 / 150 Кронштейн -Кронштейн, тип D в сборе Кронштейн -Кронштейн, тип Z 30 Кронштейн -Кронштейн, тип Z 42 Кронштейн -Кронштейн, тип Е Кронштейн -Кронштейн 75 / 150 Кронштейн -Распределительный коллектор G1 2 отвода G 3/4 Сборный коллектор -Распределительный коллектор G1 3 отвода G 3/4 Сборный коллектор -Распределительный коллектор G1 4 отвода G 3/4 Сборный коллектор -Трубка из. нерж. стали для подкл. радиатора, Г-образная 16/250 Трубка для радиатора -Трубка из. нерж. стали для подкл. радиатора, Г-образная 16/500 Трубка для радиатора -Трубка из. нерж. стали для подкл. радиатора, Г-образная 16/1000 Трубка для радиатора -Трубка из. нерж. стали для подкл. радиатора, Г-образная 20/250 Трубка для радиатора -Трубка из. нерж. стали для подкл. радиатора, Г-образная 20/500 Трубка для радиатора -Трубка из. нерж. стали для подкл. радиатора, Г-образная 20/1000 Трубка для радиатора -Комплект трубок из. нерж. стали для подкл. радиатора, Г-образ 16/250 Трубка для радиатора -Комплект трубок из. нерж. стали для подкл. радиатора, Г-образ 20/250 Трубка для радиатора -Трубка из. нерж. стали для подкл. радиатора, Т-образная 16/250 Трубка для радиатора -Трубка из. нерж. стали для подкл. радиатора, Т-образная 16/500 Трубка для радиатора -Трубка из. нерж. стали для подкл. радиатора, Т-образная 16/1000 Трубка для радиатора -Трубка из. нерж. стали для подкл. радиатора, Т-образная 20/250 Трубка для радиатора -Трубка из. нерж. стали для подкл. радиатора, Т-образная 20/500 Трубка для радиатора -Трубка из. нерж. стали для подкл. радиатора, Т-образная 20/1000 Трубка для радиатора -К-т двух резьбозажим. нипелей с нар.резьбой 1/2х3/4 (латунь) Ниппель -Резьбозажимное соединение для металлической трубки G 3/4 -15 Резьбозажимное для трубки -Пара шаровых кранов с соед. нип. G 1/2xG 3/4, прямой (никелирован.) Краны -Пара шаровых кранов с соед. нип. G 1/2xG 3/4, угловой (никелирован.) Краны -Распределительный коллектор HLV на 2 группы нерж. сталь Коллектор -Распределительный коллектор HLV на 3 групп нерж. сталь Коллектор -Распределительный коллектор HLV на 4 группы нерж. сталь Коллектор -Распределительный коллектор HLV на 5 групп нерж. сталь Коллектор -Распределительный коллектор HLV на 6 групп нерж. сталь Коллектор -Распределительный коллектор HLV на 7 групп нерж. сталь Коллектор -Распределительный коллектор HLV на 8 групп нерж. сталь Коллектор -Распределительный коллектор HLV на 9 групп нерж. сталь Коллектор -Распределительный коллектор HLV на 10 групп нерж. сталь Коллектор -Распределительный коллектор HLV на 11 групп нерж. сталь Коллектор -Распределительный коллектор HLV на 12 групп нерж. сталь Коллектор -Резьбозажимное соединение flex/pink 16х2,2xG3/4 Резьбозажимное для трубы -Резьбозажимное соединение stabil 16,2x2,6xG3/4 Резьбозажимное для трубы -Резьбозажимное соединение stabil 20x2,9xG3/4 Резьбозажимное для трубы -"Комплект двух прямых никелирован. шаровых кранов G1"" для коллекторов " Краны -"Комплект двух угловых никелирован. шаровых кранов G1"" для коллекторов " Краны -Шкаф коллекторный, встраиваемый, тип UP 110/450 белый Шкаф -Шкаф коллекторный, встраиваемый, тип UP 110/550, белый Шкаф -Шкаф коллекторный, встраиваемый, тип UP 110/750, белый Шкаф -Шкаф коллекторный, встраиваемый, тип UP 110/950, белый Шкаф -Шкаф коллекторный, встраиваемый, тип UP 110/1150, белый Шкаф -Шкаф коллекторный, встраиваемый, тип UP 110/1300, белый Шкаф -Шкаф коллекторный, приставной, тип AP 130/500 белый Шкаф -Шкаф коллекторный, приставной, тип AP 130/605, белый Шкаф -Шкаф коллекторный, приставной, тип AP 130/805, белый Шкаф -Шкаф коллекторный, приставной, тип AP 130/1005, белый Шкаф -Шкаф коллекторный, приставной, тип AP 130/1205, белый Шкаф -Шкаф коллекторный, приставной, тип AP 130/1353, белый Шкаф -Шкаф коллекторный, встраиваемый, тип UP 75/550 , белый Шкаф -Шкаф коллекторный, встраиваемый, тип UP 75/750, белый Шкаф -Шкаф коллекторный, встраиваемый, тип UP 75/950, белый Шкаф -Шкаф коллекторный, встраиваемый, тип UP 75/1150, белый Шкаф -Крюк с дюбелем для 1 трубы Крюк -Двойной крюк с дюбелем для 2-х труб Крюк -Двойной крюк с дюбелем для 2-х труб в изоляции Крюк -Фиксатор поворота трубы 16/17/90°, без колец (оцинк. сталь) Фиксатор поворота -Фиксатор поворота трубы 20/90°, без колец (оцинк. сталь) Фиксатор поворота -Фиксатор поворота трубы 25/90°, без колец (оцинк. сталь) Фиксатор поворота -Фиксатор поворота трубы 32/90°, с кольцами (оцинк. сталь) Фиксатор поворота -Фиксатор поворота трубы 16/17/45°, без колец (оцинк. сталь) Фиксатор поворота -Фиксатор поворота трубы 20/45°, без колец (оцинк. сталь) Фиксатор поворота -Фиксатор поворота трубы 25/45°, без колец (оцинк. сталь) Фиксатор поворота -Фиксатор поворота трубы 32/45°, с кольцами (оцинк. сталь) Фиксатор поворота -Пресс-втулка 16 Монтажная гильза -Пресс-втулка 20 Монтажная гильза -Пресс-втулка 25 Монтажная гильза -Пресс-втулка 32 Монтажная гильза -Пресс-втулка 40 Монтажная гильза -Пресс-втулка 50 Монтажная гильза -Пресс-втулка 63 Монтажная гильза -Тройник 40/40/45° Тройник RAUPIANO -Тройник 40/40/87° Тройник RAUPIANO -Тройник 50/40/45° Тройник RAUPIANO -Тройник 50/40/87° Тройник RAUPIANO -Тройник 50/50/45° Тройник RAUPIANO -Тройник 50/50/87° Тройник RAUPIANO -Тройник 75/50/45° Тройник RAUPIANO -Тройник 75/50/87° Тройник RAUPIANO -Тройник 75/75/45° Тройник RAUPIANO -Тройник 75/75/87° Тройник RAUPIANO -Тройник 90/50/45° Тройник RAUPIANO -Тройник 90/50/87° Тройник RAUPIANO -Тройник 90/75/45° Тройник RAUPIANO -Тройник 90/75/87° Тройник RAUPIANO -Тройник 90/90/45° Тройник RAUPIANO -Тройник 90/90/87° max flow (гидравл. оптимизированный радиус изгиба) Тройник RAUPIANO -Тройник 110/50/45° Тройник RAUPIANO -Тройник 110/50/87° Тройник RAUPIANO -Тройник 110/75/45° Тройник RAUPIANO -Тройник 110/75/87° Тройник RAUPIANO -Тройник 110/90/45° Тройник RAUPIANO -Тройник 110/90/87° Тройник RAUPIANO -Тройник 110/110/45° Тройник RAUPIANO -Тройник 110/110/87° max flow (гидравл. оптимизированный радиус изгиба) Тройник RAUPIANO -Тройник 125/110/45° Тройник RAUPIANO -Тройник 125/110/87° Тройник RAUPIANO -Тройник 125/125/45° Тройник RAUPIANO -Тройник 125/125/87° Тройник RAUPIANO -Тройник 160/110/45° Тройник RAUPIANO -Тройник 160/110/87° Тройник RAUPIANO -Тройник 160/125/45° Тройник RAUPIANO -Тройник 160/125/87° Тройник RAUPIANO -Тройник 160/160/45° Тройник RAUPIANO -Тройник 160/160/87° Тройник RAUPIANO -Тройник 200/160/45° Тройник RAUPIANO -Тройник 200/160/87° Тройник RAUPIANO -Тройник 200/200/45° Тройник RAUPIANO diff --git a/RhSolutions.ML.Builder/Models/model.zip b/RhSolutions.ML.Builder/Models/model.zip deleted file mode 100644 index 7b7bb69..0000000 Binary files a/RhSolutions.ML.Builder/Models/model.zip and /dev/null differ diff --git a/RhSolutions.ML.Builder/Program.cs b/RhSolutions.ML.Builder/Program.cs index 898e872..ffb62e3 100644 --- a/RhSolutions.ML.Builder/Program.cs +++ b/RhSolutions.ML.Builder/Program.cs @@ -1,42 +1,11 @@ -using Microsoft.ML; +using RhSolutions.ML.Lib; -namespace RhSolutions.ML.Builder +try { - public class Program - { - private static string _appPath = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) ?? "."; - private static MLContext _mlContext = new MLContext(seed: 0); - public static void Main() - { - var _trainDataView = _mlContext.Data.LoadFromTextFile( - Path.Combine(_appPath, "..", "..", "..", "Data", "train.tsv"), hasHeader: true); - var pipeline = ProcessData(); - BuildAndTrainModel(_trainDataView, pipeline, out ITransformer trainedModel); - SaveModelAsFile(_mlContext, _trainDataView.Schema, trainedModel); - } - - private static IEstimator ProcessData() - { - var pipeline = _mlContext.Transforms.Conversion.MapValueToKey(inputColumnName: "Type", outputColumnName: "Label") - .Append(_mlContext.Transforms.Text.FeaturizeText(inputColumnName: "Name", outputColumnName: "NameFeaturized")) - .Append(_mlContext.Transforms.Concatenate("Features", "NameFeaturized")) - .AppendCacheCheckpoint(_mlContext); - return pipeline; - } - - private static IEstimator BuildAndTrainModel(IDataView trainingDataView, IEstimator pipeline, out ITransformer trainedModel) - { - var trainingPipeline = pipeline.Append(_mlContext.MulticlassClassification.Trainers.SdcaMaximumEntropy("Label", "Features")) - .Append(_mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel")); - - trainedModel = trainingPipeline.Fit(trainingDataView); - return trainingPipeline; - } - - private static void SaveModelAsFile(MLContext mlContext, DataViewSchema trainingDataViewSchema, ITransformer model) - { - mlContext.Model.Save(model, trainingDataViewSchema, - Path.Combine(_appPath, "..", "..", "..", "Models", "model.zip")); - } - } + RhSolutionsMLBuilder.RebuildModel(); + Console.WriteLine("Model built"); +} +catch (Exception ex) +{ + Console.WriteLine(ex.Message); } \ No newline at end of file diff --git a/RhSolutions.ML.Builder/RhSolutions.ML.Builder.csproj b/RhSolutions.ML.Builder/RhSolutions.ML.Builder.csproj index 75b0dcc..e034a8f 100644 --- a/RhSolutions.ML.Builder/RhSolutions.ML.Builder.csproj +++ b/RhSolutions.ML.Builder/RhSolutions.ML.Builder.csproj @@ -1,5 +1,9 @@ + + + + Exe net7.0 @@ -7,12 +11,4 @@ enable - - - - - - PreserveNewest - - diff --git a/RhSolutions.ML.Builder/Product.cs b/RhSolutions.ML.Lib/Product.cs similarity index 100% rename from RhSolutions.ML.Builder/Product.cs rename to RhSolutions.ML.Lib/Product.cs diff --git a/RhSolutions.ML.Lib/RhSolutions.ML.Lib.csproj b/RhSolutions.ML.Lib/RhSolutions.ML.Lib.csproj new file mode 100644 index 0000000..928fc99 --- /dev/null +++ b/RhSolutions.ML.Lib/RhSolutions.ML.Lib.csproj @@ -0,0 +1,13 @@ + + + + net7.0 + enable + enable + + + + + + + diff --git a/RhSolutions.ML.Lib/RhSolutionsMLBuilder.cs b/RhSolutions.ML.Lib/RhSolutionsMLBuilder.cs new file mode 100644 index 0000000..be2e2a6 --- /dev/null +++ b/RhSolutions.ML.Lib/RhSolutionsMLBuilder.cs @@ -0,0 +1,42 @@ +using Microsoft.ML; + +namespace RhSolutions.ML.Lib; + +public class RhSolutionsMLBuilder +{ + private static string _appPath = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) ?? "."; + + private static MLContext _mlContext = new MLContext(seed: 0); + + public static void RebuildModel() + { + var _trainDataView = _mlContext.Data.LoadFromTextFile( + Path.Combine(_appPath, "..", "..", "..", "..", "Data", "*"), hasHeader: false); + var pipeline = ProcessData(); + BuildAndTrainModel(_trainDataView, pipeline, out ITransformer trainedModel); + SaveModelAsFile(_mlContext, _trainDataView.Schema, trainedModel); + } + private static IEstimator ProcessData() + { + var pipeline = _mlContext.Transforms.Conversion.MapValueToKey(inputColumnName: "Type", outputColumnName: "Label") + .Append(_mlContext.Transforms.Text.FeaturizeText(inputColumnName: "Name", outputColumnName: "NameFeaturized")) + .Append(_mlContext.Transforms.Concatenate("Features", "NameFeaturized")) + .AppendCacheCheckpoint(_mlContext); + return pipeline; + } + + private static IEstimator BuildAndTrainModel(IDataView trainingDataView, IEstimator pipeline, out ITransformer trainedModel) + { + var trainingPipeline = pipeline.Append(_mlContext.MulticlassClassification.Trainers.SdcaMaximumEntropy("Label", "Features")) + .Append(_mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel")); + + trainedModel = trainingPipeline.Fit(trainingDataView); + return trainingPipeline; + } + + private static void SaveModelAsFile(MLContext mlContext, DataViewSchema trainingDataViewSchema, ITransformer model) + { + mlContext.Model.Save(model, trainingDataViewSchema, + Path.Combine(_appPath, "..", "..", "..", "..", "Models", "model.zip")); + } +} diff --git a/RhSolutions.ML.Tests/RhSolutions.ML.Tests.csproj b/RhSolutions.ML.Tests/RhSolutions.ML.Tests.csproj index 697d9a0..c37ac53 100644 --- a/RhSolutions.ML.Tests/RhSolutions.ML.Tests.csproj +++ b/RhSolutions.ML.Tests/RhSolutions.ML.Tests.csproj @@ -19,7 +19,7 @@ - + diff --git a/RhSolutions.ML.Tests/Tests.cs b/RhSolutions.ML.Tests/Tests.cs index e8203a0..0349ddb 100644 --- a/RhSolutions.ML.Tests/Tests.cs +++ b/RhSolutions.ML.Tests/Tests.cs @@ -3,8 +3,7 @@ namespace RhSolutions.ML.Tests; public class Tests { private static string _appPath = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) ?? "."; - private static string _dataPath = Path.Combine(_appPath, "..", "..", "..", ".." - ,"RhSolutions.ML.Builder" , "Models", "model.zip"); + private static string _dataPath = Path.Combine(_appPath, "..", "..", "..", "..", "Models", "model.zip"); private MLContext _mlContext; private PredictionEngine _predEngine; @@ -56,4 +55,33 @@ public class Tests var prediction = _predEngine.Predict(p); Assert.That(prediction.Type, Is.EqualTo("Тройник RAUPIANO")); } + + [TestCase("Муфта соединительная равнопроходная 16 PX")] + [TestCase("Муфта 16")] + [TestCase("Переход 20-16")] + [TestCase("Переходник 20-16")] + public void CouplingTest(string name) + { + Product p = new() + { + Name = name + }; + var prediction = _predEngine.Predict(p); + Assert.That(prediction.Type, Is.EqualTo("Муфта соединительная")); + } + + [TestCase("Переходник с наружной резьбой 20-R 3/4 RX+")] + [TestCase("Переходник 16 1/2 НР")] + [TestCase("ПНР 16")] + [TestCase("Переход НР 16 1/2")] + [TestCase("Муфта НР 16 1/2")] + public void AdapterExternalTest(string name) + { + Product p = new() + { + Name = name + }; + var prediction = _predEngine.Predict(p); + Assert.That(prediction.Type, Is.EqualTo("Переходник на наружную резьбу")); + } } \ No newline at end of file diff --git a/RhSolutions.ML.sln b/RhSolutions.ML.sln index ec0bbab..95b927c 100644 --- a/RhSolutions.ML.sln +++ b/RhSolutions.ML.sln @@ -3,24 +3,30 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.6.33815.320 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RhSolutions.ML.Builder", "RhSolutions.ML.Builder\RhSolutions.ML.Builder.csproj", "{0ADAA6BD-87CB-4F92-83B2-6C3788634F31}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RhSolutions.ML.Tests", "RhSolutions.ML.Tests\RhSolutions.ML.Tests.csproj", "{E21FC75D-A7E6-4BC2-AFC5-9E36715240FA}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RhSolutions.ML.Lib", "RhSolutions.ML.Lib\RhSolutions.ML.Lib.csproj", "{36239F13-0F62-4AD7-B0AF-FA24E8101FA7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RhSolutions.ML.Builder", "RhSolutions.ML.Builder\RhSolutions.ML.Builder.csproj", "{13C69C4E-6A1A-4646-8F2B-9C058E1B0FAD}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0ADAA6BD-87CB-4F92-83B2-6C3788634F31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0ADAA6BD-87CB-4F92-83B2-6C3788634F31}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0ADAA6BD-87CB-4F92-83B2-6C3788634F31}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0ADAA6BD-87CB-4F92-83B2-6C3788634F31}.Release|Any CPU.Build.0 = Release|Any CPU {E21FC75D-A7E6-4BC2-AFC5-9E36715240FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E21FC75D-A7E6-4BC2-AFC5-9E36715240FA}.Debug|Any CPU.Build.0 = Debug|Any CPU {E21FC75D-A7E6-4BC2-AFC5-9E36715240FA}.Release|Any CPU.ActiveCfg = Release|Any CPU {E21FC75D-A7E6-4BC2-AFC5-9E36715240FA}.Release|Any CPU.Build.0 = Release|Any CPU + {36239F13-0F62-4AD7-B0AF-FA24E8101FA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36239F13-0F62-4AD7-B0AF-FA24E8101FA7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36239F13-0F62-4AD7-B0AF-FA24E8101FA7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36239F13-0F62-4AD7-B0AF-FA24E8101FA7}.Release|Any CPU.Build.0 = Release|Any CPU + {13C69C4E-6A1A-4646-8F2B-9C058E1B0FAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {13C69C4E-6A1A-4646-8F2B-9C058E1B0FAD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {13C69C4E-6A1A-4646-8F2B-9C058E1B0FAD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {13C69C4E-6A1A-4646-8F2B-9C058E1B0FAD}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE