Merge pull request #1906 from OpenRefine/issue1893

Make clustering extensible
This commit is contained in:
Antonin Delpeuch 2018-12-31 14:13:46 +01:00 committed by GitHub
commit ddd9bf9aa8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 562 additions and 145 deletions

View File

@ -81,7 +81,7 @@ public class BinningClusterer extends Clusterer {
@JsonProperty("function")
public void setKeyer(String keyerName) {
_keyerName = keyerName;
_keyer = _keyers.get(_keyerName.toLowerCase());
_keyer = KeyerFactory.get(_keyerName.toLowerCase());
}
@JsonProperty("function")
@ -123,21 +123,9 @@ public class BinningClusterer extends Clusterer {
protected Keyer _keyer;
protected BinningParameters _parameters;
static final protected Map<String, Keyer> _keyers = new HashMap<String, Keyer>();
final static Logger logger = LoggerFactory.getLogger("binning_clusterer");
List<Map<String,Integer>> _clusters;
static {
_keyers.put("fingerprint", new FingerprintKeyer());
_keyers.put("ngram-fingerprint", new NGramFingerprintKeyer());
_keyers.put("metaphone", new MetaphoneKeyer());
_keyers.put("double-metaphone", new DoubleMetaphoneKeyer());
_keyers.put("metaphone3", new Metaphone3Keyer());
_keyers.put("soundex", new SoundexKeyer());
_keyers.put("cologne-phonetic", new ColognePhoneticKeyer());
}
class BinningRowVisitor implements RowVisitor {

View File

@ -0,0 +1,83 @@
/*******************************************************************************
* Copyright (C) 2018, Antonin Delpeuch
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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 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.
******************************************************************************/
package com.google.refine.clustering.binning;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* Registry of keyers for clustering.
*
* @author Antonin Delpeuch
*
*/
public class KeyerFactory {
static final private Map<String, Keyer> _keyers = new HashMap<String, Keyer>();
// We cannot derive this from the hashmap as the order matters
static final private List<String> _keyerNames = new LinkedList<>();
static {
// Some keyers are disabled as they are super-seeded by others
// See https://github.com/OpenRefine/OpenRefine/pull/1906
put("fingerprint", new FingerprintKeyer());
put("ngram-fingerprint", new NGramFingerprintKeyer());
// put("metaphone", new MetaphoneKeyer());
// put("double-metaphone", new DoubleMetaphoneKeyer());
put("metaphone3", new Metaphone3Keyer());
// put("soundex", new SoundexKeyer());
put("cologne-phonetic", new ColognePhoneticKeyer());
}
/**
* Returns the keyer registered under a given name, or null if it does not exist.
*/
public static Keyer get(String name) {
return _keyers.get(name);
}
/**
* Registers a keyer under a code name.
*/
public static void put(String name, Keyer keyer) {
_keyers.put(name, keyer);
_keyerNames.add(name);
}
/**
* Set of available keyer, by names.
* The first keyer is considered the default one.
*/
public static List<String> getKeyerNames() {
return Collections.unmodifiableList(_keyerNames);
}
}

View File

@ -0,0 +1,93 @@
/*******************************************************************************
* Copyright (C) 2018, Antonin Delpeuch
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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 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.
******************************************************************************/
package com.google.refine.clustering.knn;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import edu.mit.simile.vicino.distances.BZip2Distance;
import edu.mit.simile.vicino.distances.GZipDistance;
import edu.mit.simile.vicino.distances.JaccardDistance;
import edu.mit.simile.vicino.distances.JaroDistance;
import edu.mit.simile.vicino.distances.JaroWinklerDistance;
import edu.mit.simile.vicino.distances.JaroWinklerTFIDFDistance;
import edu.mit.simile.vicino.distances.LevenshteinDistance;
import edu.mit.simile.vicino.distances.PPMDistance;
/**
* Registry of distances for kNN clustering.
*
* @author Antonin Delpeuch
*/
public class DistanceFactory {
static final protected Map<String, SimilarityDistance> _distances = new HashMap<>();
// We cannot derive this from the hashmap as the order matters
private static List<String> _distanceNames = new LinkedList<>();
static {
put("levenshtein", new VicinoDistance(new LevenshteinDistance()));
put("ppm", new VicinoDistance(new PPMDistance()));
// Distances not activated as they are not very useful:
// See https://github.com/OpenRefine/OpenRefine/pull/1906
/*
put("jaccard", new VicinoDistance(new JaccardDistance()));
put("jaro", new VicinoDistance(new JaroDistance()));
put("jaro-winkler", new VicinoDistance(new JaroWinklerDistance()));
put("jaro-winkler-tfidf", new VicinoDistance(new JaroWinklerTFIDFDistance()));
put("gzip", new VicinoDistance(new GZipDistance()));
put("bzip2", new VicinoDistance(new BZip2Distance()));
*/
}
/**
* Returns the distance registered under this name, or null if it does not exist.
*/
public static SimilarityDistance get(String name) {
return _distances.get(name);
}
/**
* Registers a new distance under a name.
*/
public static void put(String name, SimilarityDistance distance) {
_distances.put(name, distance);
_distanceNames.add(name);
}
/**
* Lists the available distances, by name.
*/
public static List<String> getDistanceNames() {
return Collections.unmodifiableList(_distanceNames);
}
}

View File

@ -0,0 +1,44 @@
/*******************************************************************************
* Copyright (C) 2018, Antonin Delpeuch
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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 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.
******************************************************************************/
package com.google.refine.clustering.knn;
/**
* A function that computes a similarity distance between
* two strings.
*
* This is introduced to provide a clean interface for extensions, independent
* of the library currently used (Simile Vicino, unmaintained since 2010 as of
* December 2018).
*/
public interface SimilarityDistance {
/**
* Compute the distance between two strings. This should return 0 when the
* two arguments are equal, and rise as their differences increase.
*/
public double compute(String a, String b);
}

View File

@ -0,0 +1,50 @@
/*******************************************************************************
* Copyright (C) 2018, Antonin Delpeuch
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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 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.
******************************************************************************/
package com.google.refine.clustering.knn;
import edu.mit.simile.vicino.distances.Distance;
/**
* Wrapper to expose a similarity function from the Vicino
* library.
*
* @author Antonin Delpeuch
*
*/
public class VicinoDistance implements SimilarityDistance {
private final Distance _d;
public VicinoDistance(Distance d) {
_d = d;
}
@Override
public double compute(String a, String b) {
return _d.d(a, b);
}
}

View File

@ -61,15 +61,7 @@ import com.google.refine.model.Row;
import edu.mit.simile.vicino.clustering.NGramClusterer;
import edu.mit.simile.vicino.clustering.VPTreeClusterer;
import edu.mit.simile.vicino.distances.BZip2Distance;
import edu.mit.simile.vicino.distances.Distance;
import edu.mit.simile.vicino.distances.GZipDistance;
import edu.mit.simile.vicino.distances.JaccardDistance;
import edu.mit.simile.vicino.distances.JaroDistance;
import edu.mit.simile.vicino.distances.JaroWinklerDistance;
import edu.mit.simile.vicino.distances.JaroWinklerTFIDFDistance;
import edu.mit.simile.vicino.distances.LevenshteinDistance;
import edu.mit.simile.vicino.distances.PPMDistance;
public class kNNClusterer extends Clusterer {
@ -77,19 +69,19 @@ public class kNNClusterer extends Clusterer {
@JsonIgnore
private String _distanceStr;
@JsonIgnore
private Distance _distance;
private SimilarityDistance _distance;
@JsonIgnore
private kNNClustererConfigParameters _parameters = null;
@JsonIgnore
public Distance getDistance() {
public SimilarityDistance getDistance() {
return _distance;
}
@JsonProperty("function")
public void setDistance(String distanceStr) {
_distanceStr = distanceStr;
_distance = _distances.get(_distanceStr.toLowerCase());
_distance = DistanceFactory.get(_distanceStr.toLowerCase());
}
@JsonProperty("function")
@ -130,27 +122,14 @@ public class kNNClusterer extends Clusterer {
public int blockingNgramSize = defaultBlockingNgramSize;
}
private Distance _distance;
private SimilarityDistance _distance;
private kNNClustererConfigParameters _params;
static final protected Map<String, Distance> _distances = new HashMap<String, Distance>();
List<Set<Serializable>> _clusters;
Map<Serializable, Integer> _counts = new HashMap<Serializable, Integer>();
final static Logger logger = LoggerFactory.getLogger("kNN_clusterer");
static {
_distances.put("levenshtein", new LevenshteinDistance());
_distances.put("jaccard", new JaccardDistance());
_distances.put("jaro", new JaroDistance());
_distances.put("jaro-winkler", new JaroWinklerDistance());
_distances.put("jaro-winkler-tfidf", new JaroWinklerTFIDFDistance());
_distances.put("gzip", new GZipDistance());
_distances.put("bzip2", new BZip2Distance());
_distances.put("ppm", new PPMDistance());
}
class VPTreeClusteringRowVisitor implements RowVisitor {
@ -193,18 +172,31 @@ public class kNNClusterer extends Clusterer {
class BlockingClusteringRowVisitor implements RowVisitor {
Distance _distance;
SimilarityDistance _distance;
double _radius = 1.0d;
int _blockingNgramSize = 6;
HashSet<String> _data;
NGramClusterer _clusterer;
public BlockingClusteringRowVisitor(Distance d, kNNClustererConfigParameters params) {
_distance = d;
private class DistanceWrapper extends Distance {
private final SimilarityDistance _d;
protected DistanceWrapper(SimilarityDistance d) {
_d = d;
}
@Override
public double d(String arg0, String arg1) {
return _d.compute(arg0, arg1);
}
}
public BlockingClusteringRowVisitor(SimilarityDistance _distance2, kNNClustererConfigParameters params) {
_distance = _distance2;
_data = new HashSet<String>();
_blockingNgramSize = params.blockingNgramSize;
_radius = params.radius;
_clusterer = new NGramClusterer(_distance, _blockingNgramSize);
_clusterer = new NGramClusterer(new DistanceWrapper(_distance), _blockingNgramSize);
}
@Override

View File

@ -0,0 +1,62 @@
/*******************************************************************************
* Copyright (C) 2018, Antonin Delpeuch
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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 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.
******************************************************************************/
package com.google.refine.commands.browsing;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.refine.clustering.binning.KeyerFactory;
import com.google.refine.clustering.knn.DistanceFactory;
import com.google.refine.commands.Command;
public class GetClusteringFunctionsAndDistancesCommand extends Command {
final static Logger logger = LoggerFactory.getLogger("get-clustering-functions-and-distances_command");
private static class FunctionsAndDistancesResponse {
@JsonProperty("distances")
public List<String> distances = DistanceFactory.getDistanceNames();
@JsonProperty("keyers")
public List<String> keyers = KeyerFactory.getKeyerNames();
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
respondJSON(response, new FunctionsAndDistancesResponse());
}
}

View File

@ -0,0 +1,80 @@
/*******************************************************************************
* Copyright (C) 2018, Antonin Delpeuch
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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 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.
******************************************************************************/
package com.google.refine.tests.commands.browsing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertTrue;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.refine.commands.Command;
import com.google.refine.commands.browsing.GetClusteringFunctionsAndDistancesCommand;
import com.google.refine.util.JSONUtilities;
import com.google.refine.util.ParsingUtilities;
public class GetClusteringFunctionsAndDistancesCommandTest {
protected HttpServletRequest request = null;
protected HttpServletResponse response = null;
protected StringWriter writer = null;
protected Command command = null;
@BeforeMethod
public void setUp() {
request = mock(HttpServletRequest.class);
response = mock(HttpServletResponse.class);
command = new GetClusteringFunctionsAndDistancesCommand();
writer = new StringWriter();
try {
when(response.getWriter()).thenReturn(new PrintWriter(writer));
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testGetFunctionsAndKeyers() throws ServletException, IOException {
command.doGet(request, response);
ObjectNode result = ParsingUtilities.mapper.readValue(writer.toString(), ObjectNode.class);
assertTrue(Arrays.asList(JSONUtilities.getStringArray(result, "keyers")).contains("metaphone3"));
assertTrue(Arrays.asList(JSONUtilities.getStringArray(result, "distances")).contains("levenshtein"));
}
}

View File

@ -90,6 +90,7 @@ function registerCommands() {
RS.registerCommand(module, "compute-facets", new Packages.com.google.refine.commands.browsing.ComputeFacetsCommand());
RS.registerCommand(module, "compute-clusters", new Packages.com.google.refine.commands.browsing.ComputeClustersCommand());
RS.registerCommand(module, "get-clustering-functions-and-distances", new Packages.com.google.refine.commands.browsing.GetClusteringFunctionsAndDistancesCommand());
RS.registerCommand(module, "edit-one-cell", new Packages.com.google.refine.commands.cell.EditOneCellCommand());
RS.registerCommand(module, "text-transform", new Packages.com.google.refine.commands.cell.TextTransformCommand());

View File

@ -157,17 +157,17 @@
"core-dialogs/reuse": "Ginamit",
"core-dialogs/date-format": "Para sa petsa/orad bili, gamita ni nga pormat",
"core-dialogs/focusing-on": "Pagpukos sa",
"core-dialogs/fingerprint": "Mga tudlo",
"clustering-keyers/fingerprint": "Mga tudlo",
"core-dialogs/block-chars": "Block&nbsp; Chars&nbsp;",
"core-dialogs/long-format": "Taas nga pormat sa locale",
"core-dialogs/short-format": "Maba ang pormat sa locale",
"core-dialogs/leven": "levenstin",
"clustering-distances/levenshtein": "levenstin",
"core-dialogs/rotated-clock": "Gituyok sa 45° sa hustong oras",
"core-dialogs/upload": "Upload",
"core-dialogs/remove": "Tangtanga",
"core-dialogs/merge": "Iusa?",
"core-dialogs/cluster-descr": "Kani nga kalidad tabangan mutabang sa pagpangita sa grupo sa ngkadaiyang balyo sa mga cells para aduna kay kapiliannga ikapakita sa pareho nga butang. Pananglitan, duha ka strings \"New York\" ug \"new york\" nga hapit magkapreha kung ireper nmu sa pareho nga konsepto ug nagkalahi lang sa gidak on, ug \"Gödel\" ug \"Godel\" nga kani nag reper ra sa usa ka tawo.",
"core-dialogs/phonetic": "Kolon-ponetik",
"clustering-keyers/cologne-phonetic": "Kolon-ponetik",
"core-dialogs/found": "nakit an",
"core-dialogs/starred": "Bida",
"core-dialogs/find-more": "Pagtan aw ug lain …",
@ -200,7 +200,7 @@
"core-dialogs/sel-and-ord": "Pagpili ug order kolum para iangkat",
"core-dialogs/choice-avg-length": "Kasagarang Gitas on sa mga Pilianan",
"core-dialogs/json-text": "Ang musunod JSON text nag enkod ug mga kapilian nga imung ibutang sa uban nga tab. Makakopya ka ug isave unya, ug itapot ug balik unya iklik Iapply ang ginamit nga parehang mga pinilian.",
"core-dialogs/ngram": "ngram-nga tudlo",
"clustering-keyers/ngram-fingerprint": "ngram-nga tudlo",
"core-dialogs/reorder-column": "Order ug balik / Tangtanga ang mga kolum",
"core-dialogs/char-enc": "Pag enkod sa karakter",
"core-dialogs/browse-this-cluster": "Pangitaa ni nga kluster",
@ -208,7 +208,7 @@
"core-dialogs/no-rotation": "Ayaw ituyok",
"core-dialogs/regular-dot": "Regular ang gidak on sa dot",
"core-dialogs/for-recon-cell": "Para sa inuli nga cells, resulta",
"core-dialogs/ppm": "PPM",
"clustering-distances/PPM": "PPM",
"core-dialogs/cell-value": "Ang kasamtangan nga bili sa mga cell. Mao kini ang shortcut para 'cell.value'.",
"core-dialogs/cluster-values": "Mga bili sa kluster",
"core-dialogs/clustering": "Clustering… ",
@ -260,7 +260,7 @@
"core-dialogs/error": "Sayup",
"core-dialogs/filtered-from": "sinala gikan <b>",
"core-dialogs/big-dot": "Dagko ang gidak on sa dot",
"core-dialogs/metaphone": "metapon3",
"clustering-keyers/metaphone3": "metapon3",
"core-facets/regular-dot": "Regular nga sukod sa dot",
"core-facets/current-exp": "Kasamtangang Ekspresyon",
"core-facets/set-choice-count": "Pagbutang ug pinili nga nglimit sa pag ihap",

View File

@ -160,11 +160,11 @@
"core-dialogs/reuse": "Wiederverwendung",
"core-dialogs/date-format": "Für Datums-/Zeitwerte verwenden Sie das Format",
"core-dialogs/focusing-on": "mit Schwerpunkt auf",
"core-dialogs/fingerprint": "Fingerabdruck",
"clustering-keyers/fingerprint": "Fingerabdruck",
"core-dialogs/block-chars": "Block&nbsp;Zeichen&nbsp;",
"core-dialogs/long-format": "Langes Gebietsschema",
"core-dialogs/short-format": "Kurzes Gebietsschema",
"core-dialogs/leven": "Levenshtein",
"clustering-distances/levenshtein": "Levenshtein",
"core-dialogs/sqlExporterIgnoreFacets": "Facetten und Filter ignorieren und alle Zeilen exportieren",
"core-dialogs/rotated-clock": "45° im Uhrzeigersinn gedreht",
"core-dialogs/upload": "hochladen",
@ -172,7 +172,7 @@
"core-dialogs/method": "Methode&nbsp;",
"core-dialogs/merge": "Verbinden?",
"core-dialogs/cluster-descr": "Diese Funktion hilft Ihnen, Gruppen von verschiedenen Zellwerten zu finden, die alternative Darstellungen derselben Sache sein könnten. Beispielsweise beziehen sich die beiden Zeichenketten \"New York\" und \"new york\" sehr wahrscheinlich auf dasselbe Konzept und haben nur Unterschiede in der Großschreibung, und \"Gödel\" und \"Godel\" beziehen sich wahrscheinlich auf dieselbe Person.",
"core-dialogs/phonetic": "kölsch-phonetisch",
"clustering-keyers/cologne-phonetic": "kölsch-phonetisch",
"core-dialogs/found": "gefunden",
"core-dialogs/starred": "Mit Stern versehen",
"core-dialogs/find-more": "Mehr herausfinden ...",
@ -206,7 +206,7 @@
"core-dialogs/sel-and-ord": "Auswählen und Ordnen von Spalten für den Export",
"core-dialogs/choice-avg-length": "Durchschnittliche Länge der Auswahl",
"core-dialogs/json-text": "Der folgende JSON-Text kodiert die Optionen, die Sie in den anderen Registerkarten eingestellt haben. Sie können es herauskopieren und für später speichern, wieder einfügen und auf Übernehmen klicken, um die gleichen Optionen wiederzuverwenden.",
"core-dialogs/ngram": "ngram-Fingerabdruck",
"clustering-keyers/ngram-fingerprint": "ngram-Fingerabdruck",
"core-dialogs/reorder-column": "Spalten neu ordnen / entfernen",
"core-dialogs/char-enc": "Zeichenkodierung",
"core-dialogs/browse-this-cluster": "Dieses Cluster durchsuchen",
@ -214,7 +214,7 @@
"core-dialogs/no-rotation": "Keine Drehung",
"core-dialogs/regular-dot": "Normale Punktgröße",
"core-dialogs/for-recon-cell": "Ausgabe für abgestimmte Zellen",
"core-dialogs/ppm": "PPM",
"clustering-distances/PPM": "PPM",
"core-dialogs/cell-value": "Der aktuelle Wert der Zelle. Dies ist eine Abkürzung für 'cell.value'.",
"core-dialogs/cluster-values": "Werte im Cluster",
"core-dialogs/clustering": "Clustere... ",
@ -275,7 +275,7 @@
"core-dialogs/error": "Fehler",
"core-dialogs/filtered-from": "gefiltert aus <b>",
"core-dialogs/big-dot": "Große Punktgröße",
"core-dialogs/metaphone": "metaphone3",
"clustering-keyers/metaphone3": "metaphone3",
"core-dialogs/sql-exporter": "SQL-Exporteur",
"core-dialogs/select-columns-dialog": "Spalten auswählen",
"core-buttons/unselect-all": "Auswahl aufheben",

View File

@ -147,6 +147,7 @@
"core-index-parser/click-xml": "Click on the first XML element corresponding to the first record to load.",
"core-index-parser/column-names-label": "Column names (comma separated)",
"core-index-parser/column-names-optional": "comma separated",
"core-dialogs/no-clustering-functions-and-distances": "The clustering functions and distances could not be loaded.",
"core-dialogs/cluster-edit": "Cluster & Edit column",
"core-dialogs/cluster-size": "Cluster Size",
"core-dialogs/row-count": "Row Count",
@ -173,13 +174,13 @@
"core-dialogs/key-collision": "key collision",
"core-dialogs/nearest-neighbor": "nearest neighbor",
"core-dialogs/keying-function": "Keying&nbsp;Function&nbsp;",
"core-dialogs/fingerprint": "fingerprint",
"core-dialogs/ngram": "ngram-fingerprint",
"core-dialogs/metaphone": "metaphone3",
"core-dialogs/phonetic": "cologne-phonetic",
"clustering-keyers/fingerprint": "fingerprint",
"clustering-keyers/ngram-fingerprint": "ngram-fingerprint",
"clustering-keyers/metaphone3": "metaphone3",
"clustering-keyers/cologne-phonetic": "cologne-phonetic",
"core-dialogs/distance-fun": "Distance&nbsp;Function&nbsp;",
"core-dialogs/leven": "levenshtein",
"core-dialogs/ppm": "PPM",
"clustering-distances/levenshtein": "levenshtein",
"clustering-distances/PPM": "PPM",
"core-dialogs/ngram-size": "Ngram&nbsp;Size&nbsp;",
"core-dialogs/ngram-radius": "Radius&nbsp;",
"core-dialogs/block-chars": "Block&nbsp;Chars&nbsp;",

View File

@ -160,18 +160,18 @@
"core-dialogs/reuse": "Reusar",
"core-dialogs/date-format": "Para valores de hora/fecha, usar el formato",
"core-dialogs/focusing-on": "enfocada en",
"core-dialogs/fingerprint": "Huella",
"clustering-keyers/fingerprint": "Huella",
"core-dialogs/block-chars": "Caracteres&nbsp;del&nbsp;bloque&nbsp;",
"core-dialogs/long-format": "Formato largo local",
"core-dialogs/short-format": "Formato corto local",
"core-dialogs/leven": "levenshtein",
"clustering-distances/levenshtein": "levenshtein",
"core-dialogs/rotated-clock": "Girar 45° en dirección de las manecillas de reloj",
"core-dialogs/upload": "Cargar",
"core-dialogs/remove": "Eliminar",
"core-dialogs/merge": "¿Unir?",
"core-dialogs/custom-separator": "Otro delimitador",
"core-dialogs/cluster-descr": "Esta función le permite encontrar agrupaciones de diferentes valores que pueden ser representaciones alternativas de la misma cosa. Por ejemplo, \"New York\" y \"new york\" probablemente se refieren al mismo concepto, solo se presenta diferencia en la capitalización. De la misma manera \"Gödel\" y \"Godel\" probablemente se refieren a la misma persona.",
"core-dialogs/phonetic": "cologne-phonetic",
"clustering-keyers/cologne-phonetic": "cologne-phonetic",
"core-dialogs/found": "Encontrado",
"core-dialogs/starred": "Con estrella",
"core-dialogs/find-more": "Más información ...",
@ -196,7 +196,7 @@
"core-dialogs/cluster-edit": "Agrupar y editar valores en la columna",
"core-dialogs/out-not-unmatch": "Descargar nada para celdas sin correspondencia",
"core-dialogs/date-iso": "ISO 8601, p. ej., 2011-08-24T18:36:10+08:00",
"core-dialogs/ngram": "Huella del n-grama",
"clustering-keyers/ngram-fingerprint": "Huella del n-grama",
"core-dialogs/for-recon-cell": "Para celdas cotejadas, descargar",
"core-dialogs/no-syntax-err": "No hay error de sintaxis",
"core-dialogs/opt-for": "Optciones para",
@ -212,7 +212,7 @@
"core-dialogs/no-rotation": "Sin giro",
"core-dialogs/regular-dot": "Puntos regulares",
"core-dialogs/line-based": "Formatos de texto",
"core-dialogs/ppm": "PPM",
"clustering-distances/PPM": "PPM",
"core-dialogs/cell-value": "El valor de la celda actual. Es una abreviación para 'cell.value'.",
"core-dialogs/custom": "Personalizado",
"core-dialogs/clustering": "Agrupando... ",
@ -258,7 +258,7 @@
"core-dialogs/cell-fields": "La celda actual. Tiene pocos campos: 'value' y 'recon'.",
"core-dialogs/idling": "Idling ...",
"core-dialogs/local-time": "Usar zona horaria local",
"core-dialogs/metaphone": "metaphone3",
"clustering-keyers/metaphone3": "metaphone3",
"core-dialogs/key-collision": "Colisión de llaves",
"core-dialogs/choices-in-cluster": "# Valores en la agrupación",
"core-dialogs/filtered-from": "filtrado de <b>",

View File

@ -157,17 +157,17 @@
"core-dialogs/reuse": "Gamitin ulit",
"core-dialogs/date-format": "Para sa mga halaga ng petsa / oras, gamitin ang format",
"core-dialogs/focusing-on": "na tumutuon sa",
"core-dialogs/fingerprint": "fingerprint",
"clustering-keyers/fingerprint": "fingerprint",
"core-dialogs/block-chars": "I-block&nbsp; 1;Chars&nbsp; 2;",
"core-dialogs/long-format": "Mahabang format ng lokal",
"core-dialogs/short-format": "Maikling format ng locale",
"core-dialogs/leven": "levenshten",
"clustering-distances/levenshtein": "levenshten",
"core-dialogs/rotated-clock": "Naka-rotate 45 ° Clockwise",
"core-dialogs/upload": "Mag-upload",
"core-dialogs/remove": "Tanggalin",
"core-dialogs/merge": "Pagsamahin?",
"core-dialogs/cluster-descr": "Ang tampok na ito ay tumutulong sa iyo na makahanap ng mga grupo ng iba't ibang mga halaga ng cell na maaaring alternatibong mga representasyon ng parehong bagay. Halimbawa, ang dalawang string na \"New York\" at \"new york\" ay malamang na tumutukoy sa parehong konsepto at mayroon lamang mga pagkakaiba sa kapitalismo, at ang \"Gödel\" at \"Godel\" marahil ay tumutukoy sa parehong tao.",
"core-dialogs/phonetic": "cologne-ponetic",
"clustering-keyers/cologne-phonetic": "cologne-ponetic",
"core-dialogs/found": "nahanap",
"core-dialogs/starred": "Naka-star",
"core-dialogs/find-more": "Alamin ang higit pa ...",
@ -200,7 +200,7 @@
"core-dialogs/sel-and-ord": "Piliin at Mag-order ng Mga Hanay sa I-export",
"core-dialogs/choice-avg-length": "Average na taas ng Pagpipilian",
"core-dialogs/json-text": "Ang mga sumusunod na teksto ng JSON ay naka-encode ng mga pagpipilian na iyong itinakda sa iba pang mga tab. Maaari mong kopyahin ito at i-save ito para sa ibang pagkakataon, at idikit muli ito at i-click ang Ilapat upang muling gamitin ang parehong mga opsyon.",
"core-dialogs/ngram": "ngram- fingerprint",
"clustering-keyers/ngram-fingerprint": "ngram- fingerprint",
"core-dialogs/reorder-column": "Muling-order / Alisin ang Mga Haligi",
"core-dialogs/char-enc": "karacter i-encoding",
"core-dialogs/browse-this-cluster": "I-browse ang cluster na ito",
@ -208,7 +208,7 @@
"core-dialogs/no-rotation": "Walang pag-ikot",
"core-dialogs/regular-dot": "Regular na Dot Size",
"core-dialogs/for-recon-cell": "Para sa mga nakipagkasundo na mga cell, output",
"core-dialogs/ppm": "P P M",
"clustering-distances/PPM": "P P M",
"core-dialogs/cell-value": "Ang halaga ng kasalukuyang cell. Ito ay isang shortcut para sa 'cell.value'.",
"core-dialogs/cluster-values": "Mga Halaga sa klaster",
"core-dialogs/clustering": "Klastering... ",
@ -260,7 +260,7 @@
"core-dialogs/error": "Eror",
"core-dialogs/filtered-from": "na-filter mula sa <b>",
"core-dialogs/big-dot": "Malaking sukat ng tuldok",
"core-dialogs/metaphone": "meta-fone3",
"clustering-keyers/metaphone3": "meta-fone3",
"core-facets/regular-dot": "Regular na sukat ng tuldok",
"core-facets/current-exp": "Kasalukuyang Ekspresyun",
"core-facets/set-choice-count": "Itakda ang limitasyon sa bilang ng pagpipilian",

View File

@ -161,11 +161,11 @@
"core-dialogs/reuse": "Réutiliser",
"core-dialogs/date-format": "Pour la date/heure, utiliser le format",
"core-dialogs/focusing-on": "centrer sur",
"core-dialogs/fingerprint": "empreinte",
"clustering-keyers/fingerprint": "empreinte",
"core-dialogs/block-chars": "Bloc de caractères",
"core-dialogs/long-format": "Format long",
"core-dialogs/short-format": "Format court",
"core-dialogs/leven": "Levenshtein",
"clustering-distances/levenshtein": "Levenshtein",
"core-dialogs/sqlExporterIgnoreFacets": "Ignorer les facettes, les filtres et exporter toutes les lignes",
"core-dialogs/rotated-clock": "Tourné de 45°",
"core-dialogs/upload": "Téléverser",
@ -173,7 +173,7 @@
"core-dialogs/method": "Méthode&nbsp;",
"core-dialogs/merge": "Fusionner ?",
"core-dialogs/cluster-descr": "Cet outil vous aide à identifier des groupes de cellules ayant des valeurs différentes mais qui peuvent correspondre à des représentations alternatives de la même valeur. Par exemple, les deux chaînes \"New York\" et \"new york\" nont quune différence de casse et font très certainement référence à la même ville. \"Gödel\" et \"Godel\" se réfèrent probablement à la même personne.",
"core-dialogs/phonetic": "phonétique de Cologne",
"clustering-keyers/cologne-phonetic": "phonétique de Cologne",
"core-dialogs/found": "trouvé",
"core-dialogs/starred": "Étoilée",
"core-dialogs/find-more": "En trouver davantage...",
@ -206,7 +206,7 @@
"core-dialogs/sel-and-ord": "Choisir et trier les colonnes à exporter",
"core-dialogs/choice-avg-length": "Longueur moyenne des choix",
"core-dialogs/json-text": "Le texte en JSON contient les options que vous avez définies dans les autres onglets. Vous pouvez copier et sauver ce texte pour un usage ultérieur. Il suffira de le coller et de cliquer 'Appliquer' pour réutiliser les mêmes options.",
"core-dialogs/ngram": "empreinte N-grammes",
"clustering-keyers/ngram-fingerprint": "empreinte N-grammes",
"core-dialogs/reorder-column": "Trier / Supprimer des colonnes",
"core-dialogs/char-enc": "Encodage des caractères",
"core-dialogs/browse-this-cluster": "Voir ce groupe",
@ -214,7 +214,7 @@
"core-dialogs/no-rotation": "Sans rotation",
"core-dialogs/regular-dot": "Point de taille normale",
"core-dialogs/for-recon-cell": "pour réconcilier les cellules, sortie",
"core-dialogs/ppm": "PPM",
"clustering-distances/PPM": "PPM",
"core-dialogs/cell-value": "La valeur de la cellule en cours. Cest un alias de 'cell.value'.",
"core-dialogs/cluster-values": "Valeurs dans le groupe",
"core-dialogs/clustering": "Groupage... ",
@ -276,7 +276,7 @@
"core-dialogs/error": "Erreur",
"core-dialogs/filtered-from": "filtré à partir de <b>",
"core-dialogs/big-dot": "Point de grande taille",
"core-dialogs/metaphone": "metaphone3",
"clustering-keyers/metaphone3": "metaphone3",
"core-dialogs/custom-tab-exp": "Exporteur tabulaire personnalisé",
"core-dialogs/select-columns-dialog": "Sélectionner les colonnes",
"core-facets/regular-dot": "Point de taille normale",

View File

@ -141,13 +141,13 @@
"core-dialogs/key-collision": "התנגשות מפתח",
"core-dialogs/nearest-neighbor": "השכן הקרוב ביותר",
"core-dialogs/keying-function": "מפתוח&nbsp;פונקציה&nbsp;",
"core-dialogs/fingerprint": "טביעת אצבע",
"core-dialogs/ngram": "ngram-טביעת אצבע",
"core-dialogs/metaphone": טהפון3",
"core-dialogs/phonetic": "cologne-phonetic",
"clustering-keyers/fingerprint": "טביעת אצבע",
"clustering-keyers/ngram-fingerprint": "ngram-טביעת אצבע",
"clustering-keyers/metaphone3": טהפון3",
"clustering-keyers/cologne-phonetic": "cologne-phonetic",
"core-dialogs/distance-fun": "מרחק&nbsp;פונקציית&nbsp;",
"core-dialogs/leven": "levenshtein",
"core-dialogs/ppm": "PPM",
"clustering-distances/levenshtein": "levenshtein",
"clustering-distances/PPM": "PPM",
"core-dialogs/ngram-size": "Ngram&nbsp;גודל&nbsp;",
"core-dialogs/ngram-radius": "רדיוס&nbsp;",
"core-dialogs/block-chars": "חסימת&nbsp;תווים&nbsp;",

View File

@ -156,7 +156,7 @@
"core-dialogs/reuse": "Újrafelhasználás",
"core-dialogs/date-format": "Dátum/idő formátum",
"core-dialogs/focusing-on": "erre összpontosítva",
"core-dialogs/fingerprint": "ujjlenyomat",
"clustering-keyers/fingerprint": "ujjlenyomat",
"core-dialogs/block-chars": "Blokk-karakter",
"core-dialogs/long-format": "Hosszú helyi formátum",
"core-dialogs/short-format": "Rövid helyi formátum",
@ -198,7 +198,7 @@
"core-dialogs/sel-and-ord": "Exportálandó oszlopok kiválasztása és átrendezése",
"core-dialogs/choice-avg-length": "Elemek átlagos hossza",
"core-dialogs/json-text": "A következő JSON szöveg a korábbi füleken megadott beállításokat tartalmazza. Lehetőség van kimásolni, elmenteni és később újra beszúrni a jelenlegi beállítások ismételt használatához.",
"core-dialogs/ngram": "ngram-ujjlenyomat",
"clustering-keyers/ngram-fingerprint": "ngram-ujjlenyomat",
"core-dialogs/reorder-column": "Oszlopok átrendezése / eltávolítása",
"core-dialogs/char-enc": "Karakterkódolás",
"core-dialogs/browse-this-cluster": "Ezen csoport böngészése",
@ -253,7 +253,7 @@
"core-dialogs/choices-in-cluster": "Elemek száma a csoportban",
"core-dialogs/filtered-from": "összesen <b>",
"core-dialogs/big-dot": "Nagy pontméret",
"core-dialogs/metaphone": "metaphone3",
"clustering-keyers/metaphone3": "metaphone3",
"core-views/all": "Összes",
"core-views/custom-facet": "Egyéni facetta az oszlopon",
"core-views/copy-recon-judg": "Oszlop összeegyeztetési döntéseinek másolása",

View File

@ -159,11 +159,11 @@
"core-dialogs/reuse": "Riusa",
"core-dialogs/date-format": "Per valori data/ora, usa il formato",
"core-dialogs/focusing-on": "incentrato su",
"core-dialogs/fingerprint": "fingerprint",
"clustering-keyers/fingerprint": "fingerprint",
"core-dialogs/block-chars": "Block&nbsp;Chars&nbsp;",
"core-dialogs/long-format": "Formato lungo",
"core-dialogs/short-format": "Formato breve",
"core-dialogs/leven": "levenshtein",
"clustering-distances/levenshtein": "levenshtein",
"core-dialogs/sqlExporterIgnoreFacets": "Ignora faccette e filtri ed esporta tutte le righe",
"core-dialogs/rotated-clock": "Ruotato di 45° senso Orario",
"core-dialogs/upload": "Carica",
@ -171,7 +171,7 @@
"core-dialogs/for-include-drop-statement-checkbox": "Includi direttive di DROP",
"core-dialogs/merge": "Unire?",
"core-dialogs/cluster-descr": "Questa feature aiuta a trovare gruppi di valori che portrebbero essere rappresentazioni alternative di uno stesso dato. Ad esemmpio, le due stringhe \"New York\" e \"new york\" probabilmente si riferiscono allo stesso concetto e differisocno solo per le maiuscole, come \"Gödel\" e \"Godel\" probabilmente si riferiscono alla stessa persona.",
"core-dialogs/phonetic": "cologne-phonetic",
"clustering-keyers/cologne-phonetic": "cologne-phonetic",
"core-dialogs/found": "trovati",
"core-dialogs/starred": "Preferiti",
"core-dialogs/find-more": "Per saperne di più ...",
@ -204,7 +204,7 @@
"core-dialogs/sel-and-ord": "Seleziona ed ordina le colonne da esportare",
"core-dialogs/choice-avg-length": "Lunghezza media delle alternative",
"core-dialogs/json-text": "Il seguente JSON codifica le opzioni impostate nelle altre schede. Puoi copiarlo e salvarlo per riutilizzarlo, incollandolo qui e cliccando Applica.",
"core-dialogs/ngram": "ngram-fingerprint",
"clustering-keyers/ngram-fingerprint": "ngram-fingerprint",
"core-dialogs/reorder-column": "Riordina / Rimuovi Colonne",
"core-dialogs/char-enc": "Codifica caratteri",
"core-dialogs/browse-this-cluster": "Naviga questo cluster",
@ -212,7 +212,7 @@
"core-dialogs/no-rotation": "Nessuna Rotazione",
"core-dialogs/regular-dot": "Dimensione Punto: Normale",
"core-dialogs/for-recon-cell": "Per celle riconciliate, esporta",
"core-dialogs/ppm": "PPM",
"clustering-distances/PPM": "PPM",
"core-dialogs/cell-value": "Il valore della cella corrente. Questa è una scorcatoia per 'cell.value'.",
"core-dialogs/cluster-values": "valori nei Cluster",
"core-dialogs/clustering": "Clustering... ",
@ -274,7 +274,7 @@
"core-dialogs/error": "Errore",
"core-dialogs/filtered-from": "filtrati da <b>",
"core-dialogs/big-dot": "Dimensione Punto: Grande",
"core-dialogs/metaphone": "metaphone3",
"clustering-keyers/metaphone3": "metaphone3",
"core-facets/regular-dot": "Dimensione Punto: Normale",
"core-facets/current-exp": "Espressione corrente",
"core-facets/set-choice-count": "Imposta limite alla quantità di alternative",

View File

@ -161,11 +161,11 @@
"core-dialogs/reuse": "再利用",
"core-dialogs/date-format": "日付時刻の値には、ISO 8601形式を使ってください",
"core-dialogs/focusing-on": "フォーカス対象",
"core-dialogs/fingerprint": "fingerprint",
"clustering-keyers/fingerprint": "fingerprint",
"core-dialogs/block-chars": "文字ブロック",
"core-dialogs/long-format": "長いロケール形式",
"core-dialogs/short-format": "短いロケール形式",
"core-dialogs/leven": "レーベンシュタイン距離法",
"clustering-distances/levenshtein": "レーベンシュタイン距離法",
"core-dialogs/sqlExporterIgnoreFacets": "ファセット、フィルターを無視し、全行を出力",
"core-dialogs/rotated-clock": "時計回りに45度回転する",
"core-dialogs/upload": "アップロード",
@ -173,7 +173,7 @@
"core-dialogs/method": "方法&nbsp;",
"core-dialogs/merge": "マージしますか?",
"core-dialogs/cluster-descr": "この機能は、同じものの別の名前かもしれないセルのグループを探すのに役立ちます。たとえば、\"New York\" と \"new york\" は非常に似た概念ですが表記の違いがあります。また、 \"Gödel\" と \"Godel\" は多分同じ人を示します。",
"core-dialogs/phonetic": "cologne-phonetic",
"clustering-keyers/cologne-phonetic": "cologne-phonetic",
"core-dialogs/found": "結果",
"core-dialogs/starred": "星付き",
"core-dialogs/find-more": "詳細はこちら ...",
@ -206,7 +206,7 @@
"core-dialogs/sel-and-ord": "出力するカラムを選択してください",
"core-dialogs/choice-avg-length": "選択肢の長さの平均",
"core-dialogs/json-text": "次のJSONは、あなたが設定したオプションをコード化しています。コピーして保存したり、貼り付けて再利用することができます。",
"core-dialogs/ngram": "ngram-fingerprint",
"clustering-keyers/ngram-fingerprint": "ngram-fingerprint",
"core-dialogs/reorder-column": "カラムの並べ替え/削除",
"core-dialogs/char-enc": "文字エンコード",
"core-dialogs/browse-this-cluster": "このクラスタを閲覧",
@ -214,7 +214,7 @@
"core-dialogs/no-rotation": "回転なし",
"core-dialogs/regular-dot": "標準的なドット",
"core-dialogs/for-recon-cell": "照合したセルを出力",
"core-dialogs/ppm": "PPM",
"clustering-distances/PPM": "PPM",
"core-dialogs/cell-value": "現在のセルのvalue: cell.valueの別名です.",
"core-dialogs/cluster-values": "クラスタの値",
"core-dialogs/clustering": "クラスタリング中... ",
@ -276,7 +276,7 @@
"core-dialogs/error": "エラー",
"core-dialogs/filtered-from": "対象<b>",
"core-dialogs/big-dot": "大きいドット",
"core-dialogs/metaphone": "metaphone3",
"clustering-keyers/metaphone3": "metaphone3",
"core-dialogs/sql-exporter": "SQLエクスポート",
"core-dialogs/select-columns-dialog": "カラムを選択",
"core-facets/regular-dot": "標準的なドット",

View File

@ -169,11 +169,11 @@
"core-dialogs/method": "Metode&nbsp;",
"core-dialogs/key-collision": "nøkkelkollisjon",
"core-dialogs/nearest-neighbor": "nærmeste nabo",
"core-dialogs/fingerprint": "fingeravtrykk",
"core-dialogs/ngram": "n-gram-fingeravtrykk",
"core-dialogs/metaphone": "Metaphone3",
"clustering-keyers/fingerprint": "fingeravtrykk",
"clustering-keyers/ngram-fingerprint": "n-gram-fingeravtrykk",
"clustering-keyers/metaphone3": "Metaphone3",
"core-dialogs/distance-fun": "Distanse&nbsp;funksjon&nbsp;",
"core-dialogs/ppm": "DPM",
"clustering-distances/PPM": "DPM",
"core-dialogs/ngram-size": "N-gram&nbsp;størrelse&nbsp;",
"core-dialogs/ngram-radius": "Radius&nbsp;",
"core-dialogs/block-chars": "Blogg&nbsp;tegn&nbsp;",

View File

@ -159,17 +159,17 @@
"core-dialogs/reuse": "Reusar",
"core-dialogs/date-format": "Para valores de data/hora use o formato",
"core-dialogs/focusing-on": "foco em",
"core-dialogs/fingerprint": "fingerprint",
"clustering-keyers/fingerprint": "fingerprint",
"core-dialogs/block-chars": "Caracteres&nbsp;do&nbsp;bloco&nbsp;",
"core-dialogs/long-format": "Formato local longo",
"core-dialogs/short-format": "Formato local curto",
"core-dialogs/leven": "levenshtein",
"clustering-distances/levenshtein": "levenshtein",
"core-dialogs/rotated-clock": "Rotacionar 45° no sentido horário",
"core-dialogs/upload": "Carregar",
"core-dialogs/remove": "Excluir",
"core-dialogs/merge": "Unir?",
"core-dialogs/cluster-descr": "Esta funcionalidade ajuda você a encontrar grupos em diferentes células que podem representar a mesma coisa. Por exemplo, \"New York\" e \"new york\" provavelmente se referem a mesma coisa diferenciando somente pelas letras maiúsculas. Da mesma maneira, \"Gödel\" e \"Godel\" provavelmente representam a mesma pessoa.",
"core-dialogs/phonetic": "cologne-phonetic",
"clustering-keyers/cologne-phonetic": "cologne-phonetic",
"core-dialogs/found": "encontrado",
"core-dialogs/starred": "Com estrela",
"core-dialogs/find-more": "Mais informações...",
@ -194,7 +194,7 @@
"core-dialogs/cluster-edit": "Agrupar e editar coluna",
"core-dialogs/out-not-unmatch": "Nenhuma saída para células sem correspondência",
"core-dialogs/date-iso": "ISO 8601, ex., 2011-08-24T18:36:10+08:00",
"core-dialogs/ngram": "ngram-fingerprint",
"clustering-keyers/ngram-fingerprint": "ngram-fingerprint",
"core-dialogs/for-recon-cell": "Para células reconciliadas, saída",
"core-dialogs/no-syntax-err": "Não há erro de sintaxe",
"core-dialogs/opt-for": "Opções para",
@ -210,7 +210,7 @@
"core-dialogs/no-rotation": "Não rotacionar",
"core-dialogs/regular-dot": "Pontos normais",
"core-dialogs/line-based": "Formatos de texto",
"core-dialogs/ppm": "PPM",
"clustering-distances/PPM": "PPM",
"core-dialogs/cell-value": "O valor atual da célula. É um atalho para 'cell.value'.",
"core-dialogs/custom": "Personalizado",
"core-dialogs/clustering": "Agrupando... ",
@ -258,7 +258,7 @@
"core-dialogs/cell-fields": "A célula atual. Ela tem alguns campos: 'valor' e 'reconhecer'.",
"core-dialogs/idling": "Aguarde...",
"core-dialogs/local-time": "Usar fuso horário local",
"core-dialogs/metaphone": "metaphone3",
"clustering-keyers/metaphone3": "metaphone3",
"core-dialogs/key-collision": "colisão de chaves",
"core-dialogs/choices-in-cluster": "# Escolhas no cluster",
"core-dialogs/error": "Erro",

View File

@ -196,17 +196,17 @@
"core-dialogs/reuse": "Применить",
"core-dialogs/date-format": "Для времени и даты использовать формат",
"core-dialogs/focusing-on": "фокус на",
"core-dialogs/fingerprint": "Fingerprint",
"clustering-keyers/fingerprint": "Fingerprint",
"core-dialogs/block-chars": "Размер&nbsp;блока&nbsp;",
"core-dialogs/long-format": "Длинный региональный",
"core-dialogs/short-format": "Короткий региональный",
"core-dialogs/leven": "Левенштейна",
"clustering-distances/levenshtein": "Левенштейна",
"core-dialogs/rotated-clock": "Повернуть на 45° по часовой",
"core-dialogs/upload": "Выгрузить",
"core-dialogs/remove": "Удалить",
"core-dialogs/merge": "Слить?",
"core-dialogs/cluster-descr": "Этот функционал помогает находить группы ячеек с различными значениями, являющимися альтернативным представлением одной и той же сущности. Например, строки \"New York\" и \"new york\" вероятно представляют одно и то же понятие и различаются размером первой буквы, а \"Gödel\" и \"Godel\" возможно указывают на одного и того же человека.",
"core-dialogs/phonetic": "ColognePhonetic",
"clustering-keyers/cologne-phonetic": "ColognePhonetic",
"core-dialogs/found": "найдено",
"core-dialogs/starred": "Избранное",
"core-dialogs/find-more": "Узнать больше ...",
@ -239,7 +239,7 @@
"core-dialogs/sel-and-ord": "Укажите колонки и их порядок для экспорта",
"core-dialogs/choice-avg-length": "Средняя длина вариантов",
"core-dialogs/json-text": "Этот JSON-текст содержит настройки сделанные вами на других закладках. Вы можете скопировать его и сохранить для последующего использования, а также вставить его и нажать Применить чтобы воспользоваться сохраненными ранее настройками.",
"core-dialogs/ngram": "Fingerprint(NGram)",
"clustering-keyers/ngram-fingerprint": "Fingerprint(NGram)",
"core-dialogs/reorder-column": "Переупорядочить / Удалить колонки",
"core-dialogs/char-enc": "Кодировка символов",
"core-dialogs/browse-this-cluster": "Показать этот кластер",
@ -247,7 +247,7 @@
"core-dialogs/no-rotation": "Не поворачивать",
"core-dialogs/regular-dot": "Стандартный размер точки",
"core-dialogs/for-recon-cell": "Вывод ячеек прошедших сверку",
"core-dialogs/ppm": "РРМ",
"clustering-distances/PPM": "РРМ",
"core-dialogs/cell-value": "Значение текущей ячейки. Сокращённое наименование для 'cell.value'.",
"core-dialogs/cluster-values": "Значения в кластере",
"core-dialogs/clustering": "Кластеризация... ",
@ -299,7 +299,7 @@
"core-dialogs/error": "Ошибка",
"core-dialogs/filtered-from": "отфильтровано из <b>",
"core-dialogs/big-dot": "Большой размер точки",
"core-dialogs/metaphone": "Metaphone3",
"clustering-keyers/metaphone3": "Metaphone3",
"core-facets/regular-dot": "Стандартный размер точки",
"core-facets/current-exp": "Текущее выражение",
"core-facets/set-choice-count": "Установить ограничение на число вариантов",

View File

@ -157,17 +157,17 @@
"core-dialogs/reuse": "Gamiting muli",
"core-dialogs/date-format": "Para sa balyu ng petsa/oras, gitin ang pormat",
"core-dialogs/focusing-on": "nakapokus sa",
"core-dialogs/fingerprint": "tatak ng daliri",
"clustering-keyers/fingerprint": "tatak ng daliri",
"core-dialogs/block-chars": "Magharang&nbsp;Karakter&nbsp;",
"core-dialogs/long-format": "Mahabang lokal na pormat",
"core-dialogs/short-format": "Maikling lokal na pormat",
"core-dialogs/leven": "ang levenshtein",
"clustering-distances/levenshtein": "ang levenshtein",
"core-dialogs/rotated-clock": "Umiikot ng 45° Clockwise",
"core-dialogs/upload": "I-upload",
"core-dialogs/remove": "Tanggalin",
"core-dialogs/merge": "Pagsamahin?",
"core-dialogs/cluster-descr": "Ang katagiang ito ay makakatulong sa iyong paghahanap ng ibat-ibang mga balyu ng cell na maaaring maging alternatibong pagpresenta sa magkaparehong bagay. Halimbawa, ang dalawang strings na \"New York\" at \"new york\" ay malamang na tumutukoy sa parehong konsepto at mayroong pagkakaiba sa kapitalisasyon, at ahhhh \"Gödel\" and \"Godel\" na maaaring nag reper sa parehong tao.",
"core-dialogs/phonetic": "ang cologne-phonetic",
"clustering-keyers/cologne-phonetic": "ang cologne-phonetic",
"core-dialogs/found": "Nakita na",
"core-dialogs/starred": "Naka-starred",
"core-dialogs/find-more": "Maghanap pa ng marami ...",
@ -200,7 +200,7 @@
"core-dialogs/sel-and-ord": "Pumili at Maghanay ng mga Kulom sa Pag-eksport",
"core-dialogs/choice-avg-length": "Ang Average na Haba ng mga Pagpipilian",
"core-dialogs/json-text": "Ang sumusunod na teksto ng JSON ay mag-encode ng mga opsiyon na iyong itinakda sa ibang mga tabs. Pwede mo itong kopyahin at i-save para sa ibang pagkakataon, at muling i-paste at i-klik ang Apply para muling gamiting ang parihong mga opsiyon.",
"core-dialogs/ngram": "ang ngram-fingerprint",
"clustering-keyers/ngram-fingerprint": "ang ngram-fingerprint",
"core-dialogs/reorder-column": "Muling pagkasunod-sunod / Tanggalin ang mga kolum",
"core-dialogs/char-enc": "Ang pag-encode ng mga karakter",
"core-dialogs/browse-this-cluster": "I-browse ang klaster na ito",
@ -208,7 +208,7 @@
"core-dialogs/no-rotation": "Walang pag-ikot",
"core-dialogs/regular-dot": "Regular na Sukat ng Tuldok",
"core-dialogs/for-recon-cell": "Para sa mga narekonsilang mga cells, kalalabasan",
"core-dialogs/ppm": "PPM",
"clustering-distances/PPM": "PPM",
"core-dialogs/cell-value": "Ang kasalukuyang balyu ng mga cell. Ito ay isang shortcut para sa 'cell.value'.",
"core-dialogs/cluster-values": "Ang mga balyu sa Klaster",
"core-dialogs/clustering": "Ang pagklaster... ",
@ -260,7 +260,7 @@
"core-dialogs/error": "Hindi nagtagumpay",
"core-dialogs/filtered-from": "Isinasala mula sa <b>",
"core-dialogs/big-dot": "Malaking Sukat ng Tuldok",
"core-dialogs/metaphone": "ang metaphone3",
"clustering-keyers/metaphone3": "ang metaphone3",
"core-facets/regular-dot": "Katamtamang Sukat ng Tuldok",
"core-facets/current-exp": "Ang kasalukuyang ekspresyon",
"core-facets/set-choice-count": "Mag-takda ng pagpipilian na makapagbilang ng limit",

View File

@ -141,13 +141,13 @@
"core-dialogs/key-collision": "关键词碰接",
"core-dialogs/nearest-neighbor": "就近原则",
"core-dialogs/keying-function": "关键词算法",
"core-dialogs/fingerprint": "指纹分类算法",
"core-dialogs/ngram": "ngram-指纹分类算法",
"core-dialogs/metaphone": "metaphone3算法",
"core-dialogs/phonetic": "cologne-phonetic算法",
"clustering-keyers/fingerprint": "指纹分类算法",
"clustering-keyers/ngram-fingerprint": "ngram-指纹分类算法",
"clustering-keyers/metaphone3": "metaphone3算法",
"clustering-keyers/cologne-phonetic": "cologne-phonetic算法",
"core-dialogs/distance-fun": "距离算法",
"core-dialogs/leven": "levenshtein算法",
"core-dialogs/ppm": "PPM算法",
"clustering-distances/levenshtein": "levenshtein算法",
"clustering-distances/PPM": "PPM算法",
"core-dialogs/ngram-size": "Ngram&nbsp;大小&nbsp;",
"core-dialogs/ngram-radius": "半径(距离)",
"core-dialogs/block-chars": "块字符数",

View File

@ -17,17 +17,11 @@
</td>
<td>
<div class="binning-controls"><span bind="or_dialog_keying"></span>
<select bind="keyingFunctionSelector">
<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>
<select bind="keyingFunctionSelector"></select>
</div>
<div class="knn-controls hidden"><span bind="or_dialog_distance"></span>
<select bind="distanceFunctionSelector">
<option selected="true" bind="or_dialog_leven" value="levenshtein"></option>
<option bind="or_dialog_ppm" value="PPM"></option>
</select></div>
<select bind="distanceFunctionSelector"></select>
</div>
</td>
<td>
<div id="ngram-fingerprint-params" class="function-params hidden">

View File

@ -57,13 +57,6 @@ ClusteringDialog.prototype._createDialog = function() {
this._elmts.or_dialog_keyCollision.html($.i18n('core-dialogs/key-collision'));
this._elmts.or_dialog_neighbor.html($.i18n('core-dialogs/nearest-neighbor'));
this._elmts.or_dialog_keying.html($.i18n('core-dialogs/keying-function'));
this._elmts.or_dialog_fingerprint.html($.i18n('core-dialogs/fingerprint'));
this._elmts.or_dialog_ngram.html($.i18n('core-dialogs/ngram'));
this._elmts.or_dialog_metaphone.html($.i18n('core-dialogs/metaphone'));
this._elmts.or_dialog_phonetic.html($.i18n('core-dialogs/phonetic'));
this._elmts.or_dialog_distance.html($.i18n('core-dialogs/distance-fun'));
this._elmts.or_dialog_leven.html($.i18n('core-dialogs/leven'));
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'));
@ -127,7 +120,43 @@ ClusteringDialog.prototype._createDialog = function() {
this._elmts.applyCloseButton.click(function() { self._onApplyClose(); });
this._elmts.closeButton.click(function() { self._dismiss(); });
this._level = DialogSystem.showDialog(dialog);
// Fill in all the keyers and distances
$.get("command/core/get-clustering-functions-and-distances")
.success(function(data) {
var keyers = data.keyers != null ? data.keyers : [];
var distances = data.distances != null ? data.distances : [];
var i = 0;
for(; i < keyers.length; i++) {
var label = $.i18n('clustering-keyers/'+keyers[i]);
if (label.startsWith('clustering-keyers')) {
label = keyers[i];
}
var option = $('<option></option>')
.attr('value', keyers[i])
.text(label)
.appendTo(self._elmts.keyingFunctionSelector);
if (i == 0) {
option.attr('selected', 'true');
}
}
for(i = 0; i < distances.length; i++) {
var label = $.i18n('clustering-distances/'+distances[i]);
if (label.startsWith('clustering-distances')) {
label = distances[i];
}
var option = $('<option></option>')
.attr('value', distances[i])
.text(label)
.appendTo(self._elmts.distanceFunctionSelector);
if (i == 0) {
option.attr('selected', 'true');
}
}
self._level = DialogSystem.showDialog(dialog);
})
.error(function(error) {
alert($.i18n('core-dialogs/no-clustering-functions-and-distances'));
});
};
ClusteringDialog.prototype._renderTable = function(clusters) {