我有一个程序可以定期接收包含多行的文件,我逐行处理这些文件。为了处理这些行,我开发了一些文本规范化器,可以对行进行转换。例如,一种规范化可以是删除停用词、语法更正、删除 url 等。
用于给定文件的规范化器必须动态决定,这样我才能更改它们的数量并改变其顺序。对于某些文件,我只需删除停用词等文件,但其他文件需要更多规范化器,在某些情况下,我必须应用一个规范化器两次。
我组织代码的第一个想法是应用责任链模式。在这种情况下,我会有这样的事情:
如图所示,依次使用了三个归一化器,然后再次使用第一个归一化器。这只是一个例子。在其他场景中,我可以有 7 个规范化器而不会重复,而在其他情况下,第二个规范化器将在第三个之前执行。因此,主要思想是拥有多个规范化器并动态地定义一个链,我可以在其中进行重复。
我使用这种方法的问题是链中的所有成员总是被执行(没有拒绝条件)并且我有成千上万行要处理所以我不想花很多时间遍历链.
所以,我的问题是,什么是实现我需要的最佳方式,让我有机会添加新的规范化器,而无需重写代码并保持链迭代的高速?
如果您需要更多信息,请提出要求,我会编辑问题。
最佳答案
“我对这种方法的问题是链中的所有成员总是被执行(没有拒绝条件)并且我有成千上万行要处理所以我不想花很多时间在链上迭代。”
大卫,
这有点矛盾。你说你想执行所有规范化程序,
例如1,2,3,1 按此顺序在文件的每一行上。但是你说你的
问题是你执行所有这些可能会减慢你的速度。这是
规范化程序的顺序取决于您正在处理的当前行?
如果它不依赖,并且你需要在所有行上运行 1,2,3,1,那么你
只需要去做。我真的不知道如何避免调用一些
标准化器,但仍然在每一行调用所有这些。
关于java - 应用于文本规范化链的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21501354/