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

时间:2020-09-17 23:14:15

标签: ml.net

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

var textPipeline = mlContext.Transforms.Text.NormalizeText("Text", "Html", Microsoft.ML.Transforms.Text.TextNormalizingEstimator.CaseMode.Lower, false, 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 <>来接收字符串向量并返回一个新的字符串向量?

1 个答案:

答案 0 :(得分:0)

在玩了很多之后,

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"))

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