如何在管道中间为数据创建CustomMapping转换?

问题描述

我有一个用于处理文本的管道,我想添加一个词干处理步骤。

var textPipeline = mlContext.Transforms.Text.normalizeText("Text","Html",microsoft.ml.Transforms.Text.TextnormalizingEstimator.CaseMode.Lower,false,false)
    .Append(mlContext.Transforms.DropColumns("Html"))
    .Append(mlContext.Transforms.Text.TokenizeIntoWords("Tokens","Text"))
    .Append(mlContext.Transforms.Text.RemoveDefaultStopWords("Tokens",language: StopWordsRemovingEstimator.Language.English));
-->stemming<--
    .Append(mlContext.Transforms.Conversion.MapValuetoKey("Tokens"))
    .Append(mlContext.Transforms.Text.ProduceNgrams("Tokens"))
    .Append(mlContext.Transforms.Text.LatentDirichletAllocation("Features","Tokens",numberOfTopics: 20));

RemoveDefaultStopWordsMapValuetoKey之间,我想调用一个CustomMapping操作,但是我看到的所有示例都是从加载到初始dataview中的数据工作的,而不是管道中各阶段创建的数据。

我如何创建一个Action 来接收字符串向量并返回一个新的字符串向量?

解决方法

在玩了很多之后,

def high_and_low(nums):
    nums = [int(i) for i in nums.split(' ')]
    return f"{max(nums)}" + " " + f"{min(nums)}"

print(high_and_low("1 810 9 3 4 33 -9 -5 -1"))

只需创建新类并将属性名称与管道中使用的列名称匹配即可。