Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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_Database_Algorithm_Cluster Analysis_Hash - Fatal编程技术网

估计聚合字符串相似性的Java库方法或算法?

估计聚合字符串相似性的Java库方法或算法?,java,database,algorithm,cluster-analysis,hash,Java,Database,Algorithm,Cluster Analysis,Hash,我收到了用户对多项选择题的回复,例如(大致): 我想要的是通过将所有响应聚合到一个字段中来估计相似度,该字段可以跨数据库中的用户进行比较,而不是对每个列运行查询。 因此,例如,一些响应可能如下所示: Married-Female-American Single-Female-European 但我不想存储一个庞大的文本对象来表示所有可能的串联响应,因为它们可能有50个 因此,是否有某种方法可以使用某种Java库方法更简洁地表示一组响应 换句话说,这种方法将采用已婚美国女性生成一个代码,比如说a

我收到了用户对多项选择题的回复,例如(大致):

我想要的是通过将所有响应聚合到一个字段中来估计相似度,该字段可以跨数据库中的用户进行比较,而不是对每个列运行查询。

因此,例如,一些响应可能如下所示:

Married-Female-American
Single-Female-European
但我不想存储一个庞大的文本对象来表示所有可能的串联响应,因为它们可能有50个

因此,是否有某种方法可以使用某种Java库方法更简洁地表示一组响应

换句话说,这种方法将采用
已婚美国女性
生成一个代码,比如说
abc
,而
单身欧洲女性
将生成一个代码,比如说,
def


这样,如果我想知道两个用户是否是
已婚的美国女性
,我只需查询一列代码
abc

好吧,如果是一个多项选择题,你可以列举选择。也就是说,编号。那么为什么不使用
1-1-2
23-1-75
?即使你有50个答案,它仍然是可控的

现在,如果您碰巧需要相似性,那么聚合是您最不想要的。您需要的是一个简单的给定答案ID数组和一个定义两个答案数组之间距离的函数。不要使用字符串,不要聚合。留下干净漂亮的向量,所有的ML库都将为您服务

要引用JavaML库,请尝试


更新:您可能想尝试的另一件事是。我认为这对你来说不是一个好主意,但你的问题看起来像是一个要求。试一试。

你有有限的选项吗(多选似乎意味着这一点)

从字符串到数字数据集是一种常见的性能技术,基本上是对可用字符串进行索引。只要你只需要身份,这是完美的。比较整数比比较字符串快得多,而且它们通常占用更少的内存

字符本质上是
0-255
中的整数,因此您当然可以使用它

所以只要定义一个字母表:

a Married
b Single
c Male
d Female
e American
f Latin American
g European
h Asian
i African
事实上,即使你有超过256个单词,如果它们是位置性的(并且没有一个问题有超过256个选项),你也可以使用这个选项。然后你会使用

a Q1: Married
b Q1: Single
a Q2: Male
b Q2: Female
a Q3: American
b Q3: Latin American
c Q3: European
d Q3: Asian
e Q3: African
然后,您的示例将被编码为(变体1)
ade
bdg
或(变体2)
aba
bbc
。然后字符串的固定长度应为50(如果您有50个问题),并且可以非常有效地存储


要比较答案,只需访问字符串的
n
th个字符。也许您的数据库也允许索引子字符串查询。正如您在上面的示例中所看到的,两个字符串只在第二个字符上一致,就像答案一致一样。

已婚美国女性变成
abc
的方法是什么,而
单身欧洲女性
变成
def
的方法是什么?我假设您想要
dbf
…此外,您的问题标题要求一个算法来计算相似度,但您的问题正文要求一个算法只是执行字符串转换…目前,您是否将所有答案存储在数据库的一列中?显然(?)的解决方案是将第一个选择表示为一位,第二个作为一位,第三个作为三位,并将它们全部打包成一个整数。有什么原因不起作用吗?也就是说,您需要比较相似性,还是比较半自由形式的字段?你的问题意味着你想要相似性——你想如何衡量相似性?@Dave不,我目前正在将所有答案存储在单独的列中,但我想创建一个新的列,其中包含用于比较的聚合代码。+1:将一大堆字段塞进一个列中可能会使操作更加困难(不仅是相似性匹配,还包括标准索引/查找操作),以及降低可维护性。@Olicharlessworth我的观点正是如此。这些工具对于多功能数据来说是完美的磨砺。在50个功能中选择一个功能就像是在限制中进行功夫搏斗:这也许是一个不错的挑战,但很可能是痛苦的。
a Q1: Married
b Q1: Single
a Q2: Male
b Q2: Female
a Q3: American
b Q3: Latin American
c Q3: European
d Q3: Asian
e Q3: African