我正在寻找一个算法或函数,可以采用文本字符串并将其转换为数字

时间:2012-10-16 00:45:23

标签: algorithm machine-learning data-mining

我正在寻找可以获取字符串并将其转换为数字的算法,函数或技术。我希望算法或函数具有以下属性:

  1. 相同的字符串会产生相同的计算值
  2. 类似的字符串会产生类似的值(类似的可以定义为相似的含义或相似的组成)

  3. 能够处理可变长度的字符串

  4. 几年前我读了一篇文章,希望能够实现这一目标。不幸的是,我无法回想起文章的来源。

5 个答案:

答案 0 :(得分:3)

组成相似很容易,我会让其他人解决这个问题。

类似的意思是更难,但很有趣:),我记得读过一篇关于如何训练神经网络来构建一大堆英语单词的2D“语义意义图”的文章,其中两个之间的距离单词代表了它们在意义上的“相似”程度,只需在维基百科文章中进行训练即可。

你可以做同样的事情,但是把它做成一维的,它会给你一个连续的数字,相似的单词会相互靠近。

答案 1 :(得分:3)

非严肃答案:将所有内容映射为0

属性1:检查。财产2:检查。财产3:检查。

但我想你也想要不同的字符串来获得不同的值。那么问题是,什么是相似的,什么不是。

基本上,您正在寻找哈希函数

有很多哈希函数设计有不同的目标。例如,Crypographic哈希计算的代价非常昂贵,因为你想要使它很难倒退,甚至预测输入的变化如何影响输出。因此,他们非常努力地违反您的条件2.还有更简单的散列函数,主要是尝试传播数据。他们大多试图确保之后的密切输入值彼此不相近(但如果它是可预测的则可以。)

您可能想阅读维基百科:

https://en.wikipedia.org/wiki/Hash_function#Finding_similar_substrings

(是的,它有一个关于“通过Hashing查找类似子串”的部分)

维基百科还有一个哈希函数列表:

https://en.wikipedia.org/wiki/List_of_hash_functions

有几个相关的东西给你。例如,可以使用 minhash 。这是一个针对您的minhash风格的方法:定义一些字母表中所有字母的随机列表。假设我的字母“abcde”仅用于此示例。我将只为此示例使用两个列表。然后我的名单是:

p1 = "abcde"
p2 = "edcba"

f1(str)成为我的测试词中第一个字母p1的索引,f2(str) p2中的第一个字母。所以“bababa”这个词会映射到0,3。 “ababab”这个词也是。 “dada”这个词会产生0,1,而“ce”会映射到2,0。请注意,此映射对于单词排列是不变的(因为它将它们视为集合),对于长文本,它将收敛为“0,0”。然而,经过一些微调,它可以让你很快找到候选人进行仔细检查。

答案 2 :(得分:2)

模糊散列(上下文触发的分段散列)可能就是你要找的东西。

实施:ssdeep

算法说明:Identifying almost identical files using context triggered piecewise hashing

答案 3 :(得分:2)

我认为你可能正在使用哈希函数,正如众多海报所说的那样。然而,在一种方式之后,类似的含义也是可能的:使用Latent Dirichlet AllocationLatent Semantic Analysis之类的东西将你的单词映射到多维空间,相对于在大量文本上训练的模型(这些预先如果您无法访问您感兴趣的文本类型的代表性样本,则可以下载经过培训的模型。如果你需要一个标量值而不是多维向量(很难说,你没有说出你想要的东西),你可以尝试一些事情,比如最可能的话题的概率,维度的平均值,最可能的主题索引等。

答案 4 :(得分:0)

num = 0
for (byte in getBytes(str))
    num += UnsignedIntValue(byte)

这将满足所有3个属性(对于#2,这适用于字符串二进制组合)。