Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中实现一包单词_Java_Sorting_Map - Fatal编程技术网

如何在java中实现一包单词

如何在java中实现一包单词,java,sorting,map,Java,Sorting,Map,基本上,我需要一个双连接的映射,它可以从键和逆键中检索值,我已经检查过了,但是也应该根据值进行排序,并且应该为单个键取多个值。我不能保证不同键没有精确的频率。 那么,是否存在符合该标准的结构 下面是造成这种需求的具体问题,也许我在实施时遗漏了一些东西,但如果您知道上述问题的答案,那么您可能可以跳过它: 我想为一些特性实现一个单词包方法。其想法是只保留发生频率最高的前k个垃圾箱 为了让它更具体,让我们假设我有一个代码本 双[10000][d]码本和一组功能双[]功能。对于表示一个特征的特征中的每一

基本上,我需要一个双连接的映射,它可以从键和逆键中检索值,我已经检查过了,但是也应该根据值进行排序,并且应该为单个键取多个值。我不能保证不同键没有精确的频率。 那么,是否存在符合该标准的结构

下面是造成这种需求的具体问题,也许我在实施时遗漏了一些东西,但如果您知道上述问题的答案,那么您可能可以跳过它:

我想为一些特性实现一个单词包方法。其想法是只保留发生频率最高的前k个垃圾箱

为了让它更具体,让我们假设我有一个代码本 双[10000][d]码本和一组功能双[]功能。对于表示一个特征的特征中的每一行,我检查代码本中每一行的距离,并将其分配给具有该行质心的箱子。 然后我将这个容器的索引增加1,直到所有的特性都被使用。 然后,我想只保留前k个箱子作为结果

我有点卡住的部分是只保留top-k垃圾箱的部分。我使用BoundedPriorityQueue集合来实现,但我不确定是否有更简单的方法

public static BoundedPriorityQueue<Feature> boWquantizerLargerK(double[][] codebook, double[][] features, int featureLength, int maxNumWords) {
    HashMap<Integer, Integer> boWMap = new HashMap<Integer, Integer>();
    BoundedPriorityQueue<Feature> nn = new BoundedPriorityQueue<Feature>(new Feature(), maxNumWords);
    for(int i = 0; i < features.length; i++) {
        double[] distCodebook = new double[codebook.length];
        for(int j = 0; j < codebook.length; j++) {
            double[] dist = new double[featureLength];
            for(int k = 0; k < featureLength; k++)
                dist[k] = (codebook[j][k] - features[i][k])*(codebook[j][k] - features[i][k]);
            distCodebook[j] = MathUtils.sum(dist);
        }
        Integer index = MathUtils.indexOfMin(distCodebook) + 1;
        Integer freq;
        if((freq = boWMap.get(index)) == null) {
            boWMap.put(index, 1);
            nn.offer(new Feature(1, index));
        }
        else {
            boWMap.put(index, ++freq);
            nn.offer(new Feature(freq, index));
        }
    }
    return nn;
}
为了总结这个问题,我有一个集合,它的成员有两个值对,第一个表示bin,第二个表示frequency。此集合将一直更新,直到所有功能都已处理完毕,此时我只想保留具有最大值的箱子。
我对集合使用HashMap结构,对前k个垃圾箱使用BoundedPriorityQueue。

仅谷歌java包,就有很多这样的实现,甚至还有其他的。@Polywhill先生,谢谢,我会检查它。
public class Feature implements Comparator<Feature> {
    private Integer freq;
    private Integer word;

    public Feature() {}

    public Feature(Integer freq, Integer word) {
        this.freq = freq;
        this.word = word;}

    public int compare(Feature o1, Feature o2) {
        if ((o1).getFrequency() > (o2).getFrequency())
            return -1;
        else if ((o1).getFrequency() < (o2).getFrequency())
            return 1;
        else
            return 0;}

    public double getFrequency() {
        return freq;}
}