65.9K
CodeProject 正在变化。 阅读更多。
Home

使用管道和过滤器架构的框架实现

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.27/5 (9投票s)

2017年6月5日

CPOL

5分钟阅读

viewsIcon

27640

downloadIcon

428

管道和过滤器的基本概念;管道和过滤器架构风格是什么;何时需要使用它;管道和过滤器模式的框架;使用它实现的一个小型AI工具。

管道和过滤器架构模式

话题读者 - 开发人员,架构师

涵盖主题

  • 管道和过滤器的基本概念
  • 管道和过滤器架构风格
  • 基本管道和过滤器示例
  • 何时需要使用它
  • 管道和过滤器框架
  • 一个微型人工智能工具的实现

让我们深入了解基本概念

一家瓶装水制造厂有一个水源。但其中含有病毒、细菌、颜色、盐、沙子、石头和草。因此,他们需要对水进行处理以净化水。

解决方案:他们可以在管道中添加几个过滤器来清理脏水。因此,他们可以将矿泉水储存在水箱中。

Filter

一个过滤器有一个输入管道和一个输出管道。

管道和过滤器

一个过滤器通过管道连接,一个过滤器的输出是下一个过滤器的输入。

管道和过滤器架构风格

它有两个子系统,即管道和过滤器。

  • 过滤器:过滤器处理数据。
  • 管道:管道或流水线是两个过滤器之间的连接器。

何时需要使用它

如果你有连续的数据流,需要一系列处理。

使用管道和过滤器架构模式实现人工智能工具

问题

一家组织需要核实其员工的教育背景。例如,我是该组织的员工,我拥有计算机科学学士和硕士学位。该组织将考虑我的最高学位类别。我的意思是,我有两个学位,学士和硕士。与学士学位相比,硕士是最高学位。然后他们会核实硕士学位。在这种情况下,学士学位将被忽略。

因此,他们需要一个工具来找出最高的学历。它有两部分

  • 对学位进行分类
  • 只选出最高学历。

对学位类别进行分类

如果员工拥有科学学士和科学硕士等学位,那么

  • “科学学士”属于学士类别,而
  • “科学硕士”属于硕士类别

处理数据以过滤出最高的学历

  • 找出候选学位可能的类别
  • 从学位中过滤出最高类别和排名

微型人工智能的基本概念

初始数据和数据源

数据源 - 字典

以下是两个数据源字典

  1. 二级词典:单词本身没有意义,但有助于构成句子。所以,我猜这些词得 1 分。下表如下。
  2. 主要关键词词典:这个关键词有助于确定学位的类别。我的意思是,如果我们知道关键词是学士、硕士或文凭,那么我们就可以确定学位。所以,我猜这些词得 5 分。

管道和过滤器核心接口的类图

核心接口的实现

接口使用泛型。因此,定义自己的数据输入模型以及接收器模型。我们需要在过滤器类中使用它。

过滤器的实现

Candidate-filter 类将继承 FilterBase 类,我们只需要实现一个名为 process 的方法。现在我们可以根据需要实现任意数量的过滤器。

将数据传递到框架的通道

  • 初始化以下对象,例如,输入数据模型、SingleTemplateChannelMainChannelStaters 类。
  • 接下来,初始化 ModelForSetupFilters 模型类并注入所需的过滤器,然后将其发送到 singleChannelSingleChannel 将从 ModelForSetupFilters 注册所有过滤器。
  • 设置 mainChannelsStartup 对象,如下所示:channelstaters.SetupChanelList(singleChannel, educationDegreeList);
  • 最后,调用启动器并从 resultList 对象获取最终结果。IList resultList = Channelstaters.ChannelCaller();

通道的并行处理

我们可以包含任意数量的过滤器和通道。每个输入都将通过通道,每个通道将保存一个过滤器列表。例如,如果我们有五个教育经历,那就意味着我们需要 5 个通道,它们将同时运行以进行并行处理。

找出最高学历的示例

输入 - 输出

输入:给定一个糟糕的输入:Master of Bachelor Science bla bla

预期类别:学士

过滤器的**数据处理序列**

DegreeMatchFilter:*查找关键字*

一个糟糕的输入:Master of Bachelor Science bla bla :(

清理后的关键字:Master Bachelor Science

InsertPointToSentenceFilter

根据关键词词典,每个词的得分

步骤 1:从数据源匹配文本

结果取决于关键词:Master; Bachelor; Science

[0]:“理学硕士”

[1]:“硕士学位”

[2]:“工商管理硕士”

[3]:“硕士”

[4]:“文学硕士”

[5]:“硕士”

[6]:“理学学士”

[7]:“文学学士”

[8]:“学士学位”

[9]:“学士”

[10]:“学士”

[11]:“工商管理学士”

[12]:“学士学位(±16 年)”

[13]:“理学学士”

[14]:“护理学理学学士”

[15]:“理学学士”

[16]:“理学学士”

[17]:“理学硕士”

[18]:“理学副学士”

[19]:“应用科学副学士”

[20]:“理学硕士”

[21]:“理学学士”

[22]:“护理学理学学士”

[23]:“理学副学士”

步骤 2:计算每个句子的得分

步骤 3:匹配并删除与最高分进行比较的句子

根据步骤 3 的表格,最高分是6。因此,删除所有得分低于6的句子。

删除重复句子,这些步骤的输出是

DegreeCategoryFilter:*找出类别*

DegreeRankFilter:*查找排名分数*

DegreeCategoryProbabilityPartAFilter:应用概率

概率

DecisionMakingInputFilter:删除较低的类别和排名

找出类别和排名分数。根据上表,最高分是 13.5。因此,删除所有分数低于 13.5 的句子。

FinalDecisionMakingOutputFilter:*最终输出*

最高分是 13.5,类别是学士。

因此,输出:理学学士 :=> 分数 [13.5];学士 :=> 排名 4

因此,学士是需要核实的最高学历。

类别:学士;排名:4

演示时间!

我们永远不知道时间会带我们去哪里。不要只盯着代码。回顾一下你的设计。它不应该是最糟糕噩梦的牺牲品。

查找项目的演示和完整源代码(已附加)。

© . All rights reserved.