0

我在当前程序中的对象结构是这样组织的,一个Doc对象包含一个对象列表Mention,每个Mention对象都包含一个对象列表Word。单词通过它们在文档文本中的位置来识别,并且还存储一些其他信息(它的文本,它的 wordnet 意义......)

在程序的处理中(通过用户交互等)Word对象里面有一个Mention可以被访问和修改的值(例如,更新它的意义)。与每个用户交互Mention是一项要求。

我在这里遇到的问题是Mention,属于同一个的几个 sDoc可能共享一些相同Word的 s(毕竟所有的词都在 Doc 中)。那么当这样一个 Word 更新时,我应该如何更新Wordother 中包含的对应Mention呢?换句话说,这些Words在文本中的确切位置相同,应该一起更新,但它们分别存储在Mentions中。那么一个更新应该如何改变其他更新呢?

我使用的一种方法是,当 aWord内部Mention被修改时,我检索所有提及(从存储的Doc引用中),然后在包含它Word的任何内容中更新相应的内容。Mention这需要对每个更新进行 Equals 检查的 for 循环,这是相当多的处理。

我想到的第二种方法是不在 s 中存储单独的Word列表Mention。只有一个Words 列表存储在 中Doc,并且在每个s 中属于 sMention的索引存储在一个列表中。所以在更新 a 时,我会从' 的引用中调用一个更新函数来更新' 的列表。但是,问题在于返回 a 的整个s列表的函数。我必须返回一个新的 s 列表,使用我必须在列表中选择实际s的索引。这是必需的,因为其中的所有s 都可能在不久前被其他一些(s)修改过。或者,我可以检查是否WordMentionWordDocDocWordMentionWordWordDocWordMentionMentionWord已更新并复制更新。但它仍然需要一个 for 循环遍历Words 中的所有 s Mention,所以它仍然看起来很奇怪(每次检索列表 = 长操作)

我想问的是,这个更新问题是否有更好的解决方案。非常感谢任何帮助:) 如果有必要,我将在此处添加部分代码。

4

1 回答 1

2

正如我在评论中已经说过的,不要Word为文档中的同一个单词创建多个实例。因此,关于您的评论:文档中永远不会有单个物理单词的w1and 。w2只会有w

例子:

var w = new Word(2, 3, "age", 1)

var mention1 = new Mention(w);
var mention2 = new Mention(w);

mention1.UpdateWord(); // sets the fourth property of w to 3

mention2.PrintWord(); // prints (2, 3, "age", 3)

这是可行的,因为两个Mention实例都在同一个 Word实例上工作。

于 2013-09-17T11:50:08.067 回答