public void addUnaryExtensionsToLexProds() { for (int i = 0; i < chart.size(); i++) { final HashSetChartCell cell = chart.getCell(i, i + 1); for (final int pos : cell.getPosNTs()) { for (final Production unaryProd : grammar.getUnaryProductionsWithChild(pos)) { // cell.addEdge(unaryProd, cell, null, cell.getBestEdge(pos).inside + unaryProd.prob); cell.updateInside(unaryProd, cell.getInside(pos) + unaryProd.prob); } } } }
protected void addLexicalProductions(final int sent[]) { // ChartEdge newEdge; HashSetChartCell cell; for (int i = 0; i < chart.size(); i++) { cell = chart.getCell(i, i + 1); for (final Production lexProd : grammar.getLexicalProductionsWithChild(sent[i])) { // newEdge = chart.new ChartEdge(lexProd, chart.getCell(i, i + 1)); // chart.getCell(i, i + 1).addEdge(newEdge); cell.updateInside(lexProd, lexProd.prob); } } }
protected void addBestEdgesToChart( final HashSetChartCell cell, final ChartEdge[] bestEdges, final int maxEdgesToAdd) { ChartEdge edge, unaryEdge; int numAdded = 0; final PriorityQueue<ChartEdge> agenda = new PriorityQueue<ChartEdge>(); for (int i = 0; i < bestEdges.length; i++) { if (bestEdges[i] != null) { addEdgeToAgenda(bestEdges[i], agenda); } } while (agenda.isEmpty() == false && numAdded <= maxEdgesToAdd) { edge = agenda.poll(); // addedEdge = cell.addEdge(edge); // if (addedEdge) { final int nt = edge.prod.parent; final float insideProb = edge.inside(); if (insideProb > cell.getInside(edge.prod.parent)) { cell.updateInside(nt, insideProb); // System.out.println(" addingEdge: " + edge); numAdded++; // Add unary productions to agenda so they can compete with binary productions for (final Production p : grammar.getUnaryProductionsWithChild(edge.prod.parent)) { unaryEdge = chart.new ChartEdge(p, cell); addEdgeToAgenda(unaryEdge, agenda); } } } // TODO: should I decrease the maxEdgeFOM here according to the best edge NOT in the chart? // won't this just be overrun when we expand the frontier? if (agenda.isEmpty()) { maxEdgeFOM[cell.start()][cell.end()] = Float.NEGATIVE_INFINITY; } else { maxEdgeFOM[cell.start()][cell.end()] = agenda.peek().fom; } }