Рейтинг@Mail.ru
aave

aave

Машинное обучение с помощью технологии ML.NET на VB.NET

Опубликовано в Программирование

Print Friendly, PDF & Email
Все примеры по машинному обучению с помощью Microsoft ML.NET даются на языке C#. Мы же напишем наше первое приложение по машинному обучению с помощью технологии ML.NET на языке Visual Basic .NET.
Print Friendly, PDF & Email
Подробнее ...
Print Friendly, PDF & Email

Допустим, вы пишете приложение WPF. И при обработке строк часто бывает задача преобразования строки в число с плавающей запятой. В русском языке разделитель целой и дробной части – запятая, а в других языках (например, английском) – точка. И вы не хотите каждый раз задавать настройки культуры в этом и других случаях, которые требуют определения текущей культуры. В таком случае можно в файле Application.xaml определить функцию, которая выполняется при загрузке приложения:

<Application x:Class="Application"
    Startup="Application_Startup"
    ...>

Далее в застраничном коде Application.xaml.vb или Application.xaml.cs задаём для текущего потока новые языковые настройки таким способом:

Class Application

    Private Sub Application_Startup(sender As Object, e As StartupEventArgs)
        Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo("en-US")
    End Sub
	
End Class    

Теперь для всего приложения действует культура en-US, и все строки типа "3,14" и других будут корректно преобразовываться в числа. Это же проявится и во всех остальных случаях: форматирование даты и времени, валюты и прочих, где проявляются культурные особенности того или иного языка.

Print Friendly, PDF & Email
Подробнее ...
Print Friendly, PDF & Email

Как сделать привязку (binding) визуального элемента в WPF к нескольким свойствам? Для этого существует так назваемая множественная привязка. Вот пример разметки, который использует свойства FirstName и LastName некоторого объекта для вывода их посредством одного элемента TextBlock:

<TextBlock>
  <TextBlock.Text>
    <MultiBinding StringFormat="{}{0} {1}">
      <Binding Path="FirstName" />
      <Binding Path="LastName" />
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>

Формат вывода текста определяется атрибутом StringFormat. Обратите внимание на пустые фигурные скобки в начале определения формата строки. Они подсказывают парсеру XAML, что здесь используется привязка.

Добиться подобного же результата можно также с помощью конвертера MultiValueConverter, который принимает несколько значений. Вот тот же пример, но с использованием конвертера. Сначала необходимо написать класс самого конвертера:

Public Class PersonNameMultiConverter
    Implements IMultiValueConverter

        Public Function Convert(values() As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IMultiValueConverter.Convert
            If (values.Length > 0) Then
                Dim firstName As String = values(0).ToString()
                Dim lastName As String = values(1).ToString()
                Return firstName & " " & lastName
            End If
            Return String.Empty
        End Function

        Public Function ConvertBack(value As Object, targetTypes() As Type, parameter As Object, culture As CultureInfo) As Object() Implements IMultiValueConverter.ConvertBack
            Throw New NotImplementedException()
        End Function
End Class

Далее в начале XAML файла, в котором планируется использовать данный конвертер, в разделе ресурсов необходимо объявить соответствующий ресурс:

<conv:PersonNameMultiConverter x:Key="personNameMultiConverter" />

И далее создадим текстовое поле и добавим ему привязку:

<TextBlock>
  <TextBlock.Text>
    <MultiBinding Converter="{StaticResource personNameMultiConverter}">
      <Binding Path="FirstName" />
      <Binding Path="LastName" />
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>

Гораздо больше кода потребовалось, чем в первом варианте, верно? Однако преимуществом последнего метода является то, что конвертеру можно передавать сложные объекты и производить с ними какую-либо серьёзную обработку, что попросту невозможно при использовании первого варианта.

Print Friendly, PDF & Email
Подробнее ...
Подписаться на этот канал RSS