当前位置 : 主页 > 编程语言 > c语言 >

c# – Bag of Words表示问题

来源:互联网 收集:自由互联 发布时间:2021-06-25
基本上我有一个字典,其中包含我的词汇表中的所有单词作为键,并且所有单词都以0作为值. 为了将文档处理成一个单词表示,我习惯用适当的IEqualityComparer复制该字典,并简单地检查字典是
基本上我有一个字典,其中包含我的词汇表中的所有单词作为键,并且所有单词都以0作为值.

为了将文档处理成一个单词表示,我习惯用适当的IEqualityComparer复制该字典,并简单地检查字典是否包含文档中的每个单词并递增它的密钥.

为了获得单词表示的数组,我只使用了ToArray方法.

这似乎工作正常,但我只是被告知字典不保证相同的键顺序,因此结果数组可能代表不同顺序的单词,使其无用.

我目前解决此问题的想法是将单词字典的所有键复制到ArrayList中,创建适当大小的数组,然后使用数组列表的indexOf方法填充数组.

所以我的问题是,有没有更好的方法来解决这个问题,我看起来有点粗糙…而且由于IEqualityComparer,我不会有问题吗?

让我看看我是否理解这个问题.您有两个文档D1和D2,每个文档包含从已知词汇表{W1,W2 … Wn}中提取的单词序列.您希望获得两个映射,指示每个文档中每个单词的出现次数.所以对于D1,你可能会有

W1 --> 0
W2 --> 1
W3 --> 4

表明D1可能是“W3 W2 W3 W3 W3”.也许D2是“W2 W1 W2”,所以它的映射是

W1 --> 1
W2 --> 2
W3 --> 0

您希望同时采用两个映射并确定向量[0,1,4]和[1,2,0],然后计算这些向量之间的角度,作为确定两个文档有多相似或不同的方法.

您的问题是字典不保证按任何特定顺序枚举键/值对.

好的,所以订购它们.

vector1 = (from pair in map1 orderby pair.Key select pair.Value).ToArray();
vector2 = (from pair in map2 orderby pair.Key select pair.Value).ToArray();

你完成了

这会解决您的问题,还是我误解了这种情况?

网友评论