我有一个程序可以定期接收包含多行的文件,这些文件逐行处理。为了处理这些行,我开发了一些文本规范化器,它们可以处理该行以对其进行转换。例如,一种规范化操作可能是删除停用词,语法更正,删除网址等。
用于给定文件的规范化器必须动态确定,以便我可以更改它们的数量并更改其顺序。对于某些文件,例如,我仅需删除停用词,但其他文件则需要更多的规范化器,在某些情况下,我必须应用两次。
我组织代码的第一个想法是应用责任链模式。在这种情况下,我会有这样的事情:
从图中可以看到,依次使用了三个规范化器,然后再次使用了第一个规范化器。这仅仅是一个例子。在其他情况下,我可以有7个标准化器而无需重复,而在其他情况下,第二个标准化器将在第三个标准化器之前执行。因此,主要思想是拥有多个规范化器并以动态方式定义一个链,在该链中可以进行重复。
这种方法的问题在于,链中的所有成员始终执行(没有拒绝条件),并且我有成千上万的行要处理,因此我不想花很多时间在链上进行迭代。
因此,我的问题是,实现我所需的最佳方法是什么,这使我有机会添加新的规范化器而不必重写代码并保持高速的链迭代速度?
如果您需要更多信息,请提出要求,我将编辑问题。
最佳答案
“这种方法的问题在于,链中的所有成员始终执行(没有拒绝条件),并且我有成千上万的行要处理,因此我不想花很多时间在链上进行迭代。”
大卫,
这有点矛盾。您说要执行所有规范化程序,
例如从文件的每一行开始依次按1,2,3,1。但是你说你的
问题是您执行所有这些操作可能会使您减速。这是
归一化器的顺序取决于您正在处理的当前行?
如果它不是依赖项,并且您需要在所有行上运行1,2,3,1,则您
只是需要这样做。我真的不明白如何避免打电话给
归一化器,但仍在每一行上调用所有归一化器。