fix not working cluster functions when it select japanese lang.

This commit is contained in:
Akihiko Tomokane 2016-11-15 16:34:19 +09:00
parent b14dd56b80
commit 89f0752e5f
2 changed files with 78 additions and 78 deletions

View File

@ -18,25 +18,25 @@
<td>
<div class="binning-controls"><span bind="or_dialog_keying"></span>
<select bind="keyingFunctionSelector">
<option selected="true" bind="or_dialog_fingerprint"></option>
<option bind="or_dialog_ngram"></option>
<option bind="or_dialog_metaphone"></option>
<option bind="or_dialog_phonetic"></option>
<option selected="true" bind="or_dialog_fingerprint" value="fingerprint"></option>
<option bind="or_dialog_ngram" value="ngram-fingerprint"></option>
<option bind="or_dialog_metaphone" value="metaphone3"></option>
<option bind="or_dialog_phonetic" value="cologne-phonetic"></option>
</select></div>
<div class="knn-controls hidden"><span bind="or_dialog_distance"></span>
<select bind="distanceFunctionSelector">
<option selected="true" bind="or_dialog_leven"></option>
<option bind="or_dialog_ppm"></option>
<option selected="true" bind="or_dialog_leven" value="levenshtein"></option>
<option bind="or_dialog_ppm" value="PPM"></option>
</select></div>
</td>
<td>
<div id="ngram-fingerprint-params" class="function-params hidden">
<span bind="or_dialog_ngramSize"></span><input type="text" value="2" bind="ngramSize" name="ngram-size" size="2" class="param" datatype="int">
</div>
</div>
<div class="knn-controls hidden">
<span style="margin-right: 1em"><span bind="or_dialog_radius"></span><input type="text" value="1.0" bind="radius" name="radius" size="2" class="param" datatype="float"></span>
<span><span bind="or_dialog_blockChars"></span><input type="text" value="6" bind="ngramBlock" name="blocking-ngram-size" size="2" class="param" datatype="int"></span>
</div>
</div>
</td>
<td bind="resultSummary" style="text-align:right;">
</td>
@ -54,7 +54,7 @@
<td class="left" style="text-align: left">
<button class="button" bind="selectAllButton"></button>
<button class="button" bind="deselectAllButton"></button>
</td>
</td>
<td class="right" style="text-align: right">
<button class="button button-primary" bind="applyReClusterButton"></button>
<button class="button" bind="applyCloseButton"></button>

View File

@ -23,8 +23,8 @@ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@ -37,9 +37,9 @@ function ClusteringDialog(columnName, expression) {
this._method = "binning";
this._function = "fingerprint";
this._params = {};
this._facets = [];
this._createDialog();
this._cluster();
}
@ -50,7 +50,7 @@ ClusteringDialog.prototype._createDialog = function() {
this._elmts = DOM.bind(dialog);
this._elmts.dialogHeader.text($.i18n._('core-dialogs')["cluster-edit"]+' "' + this._columnName + '"');
this._elmts.or_dialog_descr.html($.i18n._('core-dialogs')["cluster-descr"]);
this._elmts.or_dialog_findMore.html($.i18n._('core-dialogs')["find-more"]);
this._elmts.or_dialog_method.html($.i18n._('core-dialogs')["method"]);
@ -66,13 +66,13 @@ ClusteringDialog.prototype._createDialog = function() {
this._elmts.or_dialog_ppm.html($.i18n._('core-dialogs')["ppm"]);
this._elmts.or_dialog_ngramSize.html($.i18n._('core-dialogs')["ngram-size"]);
this._elmts.or_dialog_radius.html($.i18n._('core-dialogs')["ngram-radius"]);
this._elmts.or_dialog_blockChars.html($.i18n._('core-dialogs')["block-chars"]);
this._elmts.or_dialog_blockChars.html($.i18n._('core-dialogs')["block-chars"]);
this._elmts.selectAllButton.html($.i18n._('core-buttons')["select-all"]);
this._elmts.deselectAllButton.html($.i18n._('core-buttons')["unselect-all"]);
this._elmts.applyReClusterButton.html($.i18n._('core-buttons')["merge-cluster"]);
this._elmts.applyCloseButton.html($.i18n._('core-buttons')["merge-close"]);
this._elmts.closeButton.html($.i18n._('core-buttons')["close"]);
this._elmts.methodSelector.change(function() {
var selection = $(this).find("option:selected").text();
if (selection == $.i18n._('core-dialogs')["key-collision"]) {
@ -87,55 +87,55 @@ ClusteringDialog.prototype._createDialog = function() {
self._elmts.distanceFunctionSelector.change();
}
});
var changer = function() {
self._function = $(this).find("option:selected").text();
self._function = $(this).find("option:selected").val();
$(".function-params").hide();
$("#" + self._function + "-params").show();
params_changer();
};
this._elmts.keyingFunctionSelector.change(changer);
this._elmts.distanceFunctionSelector.change(changer);
var params_changer = function() {
self._params = {};
$(".dialog-body input.param:visible").each(function() {
var e = $(this);
var name = e.attr('name');
var datatype = e.attr('datatype') || 'string';
var value = e.val();
var value = e.val();
if (datatype == 'int') {
value = parseInt(value,10);
} else if (datatype == 'float') {
value = parseFloat(value);
}
}
self._params[name] = value;
});
self._cluster();
};
this._elmts.ngramSize.change(params_changer);
this._elmts.radius.change(params_changer);
this._elmts.ngramBlock.change(params_changer);
this._elmts.selectAllButton.click(function() { self._selectAll(); });
this._elmts.deselectAllButton.click(function() { self._deselectAll(); });
this._elmts.applyReClusterButton.click(function() { self._onApplyReCluster(); });
this._elmts.applyCloseButton.click(function() { self._onApplyClose(); });
this._elmts.closeButton.click(function() { self._dismiss(); });
this._level = DialogSystem.showDialog(dialog);
};
ClusteringDialog.prototype._renderTable = function(clusters) {
var self = this;
var container = this._elmts.tableContainer;
if (clusters.length > 0) {
var table = $('<table></table>').addClass("clustering-dialog-entry-table")[0];
var trHead = table.insertRow(table.rows.length);
trHead.className = "header";
$(trHead.insertCell(0)).text($.i18n._('core-dialogs')["cluster-size"]);
@ -147,9 +147,9 @@ ClusteringDialog.prototype._renderTable = function(clusters) {
var renderCluster = function(cluster) {
var tr = table.insertRow(table.rows.length);
tr.className = table.rows.length % 2 === 0 ? "odd" : "even";
$(tr.insertCell(0)).text(cluster.choices.length);
$(tr.insertCell(1)).text(cluster.rowCount);
var facet = {
@ -165,7 +165,7 @@ ClusteringDialog.prototype._renderTable = function(clusters) {
"s":[
]
};
var ul = $('<ul></ul>');
var choices = cluster.choices;
var rowCount = 0;
@ -173,7 +173,7 @@ ClusteringDialog.prototype._renderTable = function(clusters) {
var parent = $(this).closest("tr");
var value = $(this).text();
cluster.value = value;
parent.find("input[type='text']").val(value);
var checkbox = parent.find("input[type='checkbox']");
checkbox.prop('checked', true).change();
@ -193,7 +193,7 @@ ClusteringDialog.prototype._renderTable = function(clusters) {
};
li.appendTo(ul);
}
var params = [
"project=" + encodeURIComponent(theProject.id),
"ui=" + encodeURIComponent(JSON.stringify({
@ -203,7 +203,7 @@ ClusteringDialog.prototype._renderTable = function(clusters) {
var url = "project?" + params.join("&");
var div = $('<div></div>').addClass("clustering-dialog-value-focus");
var browseLink = $('<a target="_new" title="'+$.i18n._('core-dialogs')["browse-only-these"]+'">'+$.i18n._('core-dialogs')["browse-this-cluster"]+'</a>')
.addClass("clustering-dialog-browse-focus")
.attr("href",url)
@ -215,7 +215,7 @@ ClusteringDialog.prototype._renderTable = function(clusters) {
.mouseleave(function() { browseLink.css("visibility", "hidden"); })
.append(ul)
.append(div);
var editCheck = $('<input type="checkbox" />')
.change(function() {
cluster.edit = this.checked;
@ -224,26 +224,26 @@ ClusteringDialog.prototype._renderTable = function(clusters) {
if (cluster.edit) {
editCheck.attr("checked", "true");
}
var input = $('<input type="text" size="25" />')
.attr("value", cluster.value)
.bind("keyup change input",function() {
cluster.value = this.value;
}).appendTo(tr.insertCell(4));
};
for (var i = 0; i < clusters.length; i++) {
renderCluster(clusters[i]);
}
container.empty().append(table);
this._elmts.resultSummary.html(
(clusters.length === this._clusters.length) ?
("<b>" + this._clusters.length + "</b> cluster" + ((this._clusters.length != 1) ? "s" : "") + " "+$.i18n._('core-dialogs')["found"]) :
("<b>" + clusters.length + "</b> cluster" + ((clusters.length != 1) ? "s" : "") + " "+$.i18n._('core-dialogs')["filtered-from"]+ this._clusters.length +$.i18n._('core-dialogs')["from-total"] )
);
} else {
container.html(
'<div style="margin: 2em;"><div style="font-size: 130%; color: #333;">'+$.i18n._('core-dialogs')["no-cluster-found"]+'</div><div style="padding-top: 1em; font-size: 110%; color: #888;">'+$.i18n._('core-dialogs')["try-another-method"]+'</div></div>'
@ -253,23 +253,23 @@ ClusteringDialog.prototype._renderTable = function(clusters) {
ClusteringDialog.prototype._cluster = function() {
var self = this;
var container = this._elmts.tableContainer.html(
'<div style="margin: 1em; font-size: 130%; color: #888;">'+$.i18n._('core-dialogs')["clustering"]+'<img src="images/small-spinner.gif"></div>'
);
this._elmts.resultSummary.empty();
$.post(
"command/core/compute-clusters?" + $.param({ project: theProject.id }),
{
engine: JSON.stringify(ui.browsingEngine.getJSON()),
clusterer: JSON.stringify({
'type' : this._method,
{
engine: JSON.stringify(ui.browsingEngine.getJSON()),
clusterer: JSON.stringify({
'type' : this._method,
'function' : this._function,
'column' : this._columnName,
'params' : this._params
})
})
},
function(data) {
self._updateData(data);
@ -287,26 +287,26 @@ ClusteringDialog.prototype._updateData = function(data) {
value: this[0].v,
size: this.length
};
var sum = 0;
var sumSquared = 0;
var rowCount = 0;
$.each(cluster.choices, function() {
rowCount += this.c;
var l = this.v.length;
var l = this.v.length;
sum += l;
sumSquared += l * l;
});
cluster.rowCount = rowCount;
cluster.avg = sum / cluster.choices.length;
cluster.variance = Math.sqrt(sumSquared / cluster.choices.length - cluster.avg * cluster.avg);
clusters.push(cluster);
});
this._clusters = clusters;
this._resetFacets();
this._updateAll();
};
@ -320,14 +320,14 @@ ClusteringDialog.prototype._deselectAll = function() {
};
ClusteringDialog.prototype._onApplyClose = function() {
var self = this;
var self = this;
this._apply(function() {
self._dismiss();
});
};
ClusteringDialog.prototype._onApplyReCluster = function() {
var self = this;
var self = this;
this._apply(function() {
self._cluster();
});
@ -343,14 +343,14 @@ ClusteringDialog.prototype._apply = function(onDone) {
for (var j = 0; j < cluster.choices.length; j++) {
values.push(cluster.choices[j].v);
}
edits.push({
from: values,
to: cluster.value
});
}
}
if (edits.length > 0) {
Refine.postCoreProcess(
"mass-edit",
@ -408,7 +408,7 @@ ClusteringDialog.prototype._resetFacets = function() {
r.elmt.remove();
}
this._facets = [];
this._createFacet($.i18n._('core-dialogs')["choices-in-cluster"], "size");
this._createFacet($.i18n._('core-dialogs')["rows-in-cluster"], "rowCount");
this._createFacet($.i18n._('core-dialogs')["choice-avg-length"], "avg");
@ -426,9 +426,9 @@ ClusteringDialog.prototype._createFacet = function(title, property) {
ClusteringDialog.Facet = function(dialog, title, property, elmt, clusters) {
this._dialog = dialog;
this._property = property;
var self = this;
var max = Number.NEGATIVE_INFINITY;
var min = Number.POSITIVE_INFINITY;
for (var i = 0; i < clusters.length; i++) {
@ -437,7 +437,7 @@ ClusteringDialog.Facet = function(dialog, title, property, elmt, clusters) {
max = Math.max(max, val);
min = Math.min(min, val);
}
this._min = min;
this._max = max;
if (min >= max) {
@ -445,7 +445,7 @@ ClusteringDialog.Facet = function(dialog, title, property, elmt, clusters) {
this._baseBins = [];
} else {
var diff = max - min;
this._step = 1;
if (diff > 10) {
while (this._step * 100 < diff) {
@ -456,7 +456,7 @@ ClusteringDialog.Facet = function(dialog, title, property, elmt, clusters) {
this._step /= 10;
}
}
this._min = (Math.floor(this._min / this._step) * this._step);
this._max = (Math.ceil(this._max / this._step) * this._step);
this._binCount = 1 + Math.ceil((this._max - this._min) / this._step);
@ -469,10 +469,10 @@ ClusteringDialog.Facet = function(dialog, title, property, elmt, clusters) {
this._max = (Math.ceil(this._max / this._step) * this._step);
}
this._baseBins = this._computeDistribution(clusters);
this._from = this._min;
this._to = this._max;
elmt.addClass("clustering-dialog-facet");
var html = $(
'<div class="clustering-dialog-facet-header">' + title + '</div>' +
@ -481,12 +481,12 @@ ClusteringDialog.Facet = function(dialog, title, property, elmt, clusters) {
'</div>' +
'<div class="clustering-dialog-facet-selection" bind="selectionContainer"></div>'
).appendTo(elmt);
this._elmts = DOM.bind(html);
this._histogram = new HistogramWidget(this._elmts.histogramContainer, { binColors: [ "#ccccff", "#6666ff" ] });
this._sliderWidget = new SliderWidget(this._elmts.sliderWidgetDiv);
this._elmts.sliderWidgetDiv.bind("slide", function(evt, data) {
self._from = data.from;
self._to = data.to;
@ -509,7 +509,7 @@ ClusteringDialog.Facet.prototype.restrict = function(clusters) {
if (!this._baseBins.length || (this._from == this._min && this._to == this._max)) {
return clusters;
}
var clusters2 = [];
for (var i = 0; i < clusters.length; i++) {
var cluster = clusters[i];
@ -525,20 +525,20 @@ ClusteringDialog.Facet.prototype.update = function(clusters) {
if (!this._baseBins.length) {
return;
}
var bins = this._computeDistribution(clusters);
this._sliderWidget.update(
this._min,
this._max,
this._step,
this._min,
this._max,
this._step,
this._from,
this._to
);
this._histogram.update(
this._min,
this._max,
this._step,
this._min,
this._max,
this._step,
[ this._baseBins, bins ]
);
};
@ -552,13 +552,13 @@ ClusteringDialog.Facet.prototype._computeDistribution = function(clusters) {
for (var b = 0; b < this._binCount; b++) {
bins.push(0);
}
for (var i = 0; i < clusters.length; i++) {
var cluster = clusters[i];
var val = cluster[this._property];
var bin = Math.round((val - this._min) / this._step);
bins[bin]++;
}
return bins;
};