【发布时间】:2013-09-17 11:08:09
【问题描述】:
我在当前程序中的对象结构被组织成Doc 对象包含Mention 对象列表,每个Mention 对象包含Word 对象列表。单词通过它们在文档文本中的位置来识别,并且还存储一些其他信息(它的文本、它的 wordnet 意义......)
在程序的处理中(通过用户交互等)。Word对象里面有一个Mention可以访问和修改值(例如更新它的意义)。与每个Mention 的用户交互是一项要求。
我在这里遇到的问题是,属于同一个Doc 的几个Mentions 可能共享一些相同的Words(毕竟所有单词都在Doc 中)。那么当这样一个Word更新时,我应该如何更新其他Mentions中包含的对应的Word呢?换句话说,这些Words在文本中的确切位置相同,应该一起更新,但它们分别存储在Mentions中。那么一个更新应该如何改变其他的呢?
我使用的一种方法是,当 Mention 中的 Word 被修改时,我检索所有提及(从存储的 Doc 引用中),然后在包含它的任何 Mention 中更新相应的 Word .这需要对每个更新进行 Equals 检查的 for 循环,这是相当多的处理。
我想到的第二种方法是不在Mentions 中存储单独的Word 列表。只有一个Words 列表存储在Doc 中,并且在每个Mention 中,Words 属于Mention 的索引存储在一个列表中。所以在更新Word 时,我会从Doc 的引用中调用一个更新函数来更新Doc 的列表。但是,问题在于返回Words 的整个列表以获取Mention 的函数。我必须返回一个新的Words 列表,使用我必须在Doc 列表中选择实际Words 的索引。这是必需的,因为Mention 中的所有Words 可能已被其他一些Mention(s) 不久前修改。或者,我可以检查 Word 是否已更新并复制更新。但是它仍然需要一个for循环遍历Mention中的所有Words,所以看起来仍然很奇怪(每次检索列表=长操作)
我想问的是这个更新问题有没有更好的解决方案。任何帮助深表感谢 :) 如果有必要,我会在这里添加我的部分代码。
【问题讨论】:
-
为什么文本中有多个
Word对象实例用于相同的物理单词?您应该只有一个在所有需要使用它的Mention实例之间共享。 -
是的,您所指的是在我的第二种方法中实现的。当我想检索“可能”更新版本的单词列表以供提及时,它仍然存在问题。
-
不,不一样。我的观点是每个
Mention都有一个Words 列表——而不是它们的索引——并且可以简单地更新那个Word实例。由于其他包含相同单词的Mentions 具有完全相同的Word实例,因此它们将始终自动在最新版本上运行。无需手动更新。 -
这怎么可能?看来你在这里误解了一些东西。例如:首先 Word w1 = (2,3,"age",1), w2 = (2,3,"age",1) 在 Doc 中应该是同一个单词。那么当你更新 w1 时: w1 = (2,3,"age",3) 那么如何更新 w2 呢?它属于另一个列表,在另一个 Mention 对象中,它的第四个成员仍然是 1。这里的问题是每个 Mention 单独存储一个单词列表。最初它们是相同的,但如果它们改变了呢?
-
你想让
w2的第四个成员保持1,即使在更新之后?还是应该更新到 3?
标签: c# list design-patterns class-design