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






4.27/5 (9投票s)
管道和过滤器的基本概念;管道和过滤器架构风格是什么;何时需要使用它;管道和过滤器模式的框架;使用它实现的一个小型AI工具。
管道和过滤器架构模式
话题读者 - 开发人员,架构师
涵盖主题
- 管道和过滤器的基本概念
- 管道和过滤器架构风格
- 基本管道和过滤器示例
- 何时需要使用它
- 管道和过滤器框架
- 一个微型人工智能工具的实现
让我们深入了解基本概念
一家瓶装水制造厂有一个水源。但其中含有病毒、细菌、颜色、盐、沙子、石头和草。因此,他们需要对水进行处理以净化水。
解决方案:他们可以在管道中添加几个过滤器来清理脏水。因此,他们可以将矿泉水储存在水箱中。
Filter
一个过滤器有一个输入管道和一个输出管道。
管道和过滤器
一个过滤器通过管道连接,一个过滤器的输出是下一个过滤器的输入。
管道和过滤器架构风格
它有两个子系统,即管道和过滤器。
- 过滤器:过滤器处理数据。
- 管道:管道或流水线是两个过滤器之间的连接器。
何时需要使用它
如果你有连续的数据流,需要一系列处理。
使用管道和过滤器架构模式实现人工智能工具
问题
一家组织需要核实其员工的教育背景。例如,我是该组织的员工,我拥有计算机科学学士和硕士学位。该组织将考虑我的最高学位类别。我的意思是,我有两个学位,学士和硕士。与学士学位相比,硕士是最高学位。然后他们会核实硕士学位。在这种情况下,学士学位将被忽略。
因此,他们需要一个工具来找出最高的学历。它有两部分
- 对学位进行
分类
- 只选出最高学历。
对学位类别进行分类
如果员工拥有科学学士和科学硕士等学位,那么
- “科学学士”属于学士类别,而
- “科学硕士”属于硕士类别
处理数据以过滤出最高的学历
- 找出候选学位可能的类别
- 从学位中过滤出最高类别和排名
微型人工智能的基本概念
初始数据和数据源
数据源 - 字典
以下是两个数据源字典
- 二级词典:单词本身没有意义,但有助于构成句子。所以,我猜这些词得 1 分。下表如下。
- 主要关键词词典:这个关键词有助于确定学位的类别。我的意思是,如果我们知道关键词是学士、硕士或文凭,那么我们就可以确定学位。所以,我猜这些词得 5 分。
管道和过滤器核心接口的类图
核心接口的实现
接口使用泛型。因此,定义自己的数据输入模型以及接收器模型。我们需要在过滤器类中使用它。
过滤器的实现
Candidate-filter 类将继承 FilterBase
类,我们只需要实现一个名为 process 的方法。现在我们可以根据需要实现任意数量的过滤器。
将数据传递到框架的通道
- 初始化以下对象,例如,输入数据模型、
SingleTemplateChannel
和MainChannelStaters
类。 - 接下来,初始化
ModelForSetupFilters
模型类并注入所需的过滤器,然后将其发送到singleChannel
。SingleChannel
将从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
演示时间!
查找项目的演示和完整源代码(已附加)。