确定给定字符串与字符串集合的相似程度


10

我不确定这个问题是否属于这里,如果没有,我深表歉意。我要做的是开发一种编程方式,通过该方式我可以概率确定给定的字符串是否“属于”一袋字符串。例如,如果我有10,000个美国城市名称,然后有字符串“费城”,我想根据我已经知道的美国城市名称,用某种定量方法来衡量“费城”是美国城市名称的可能性。虽然我知道在这种情况下我无法将真实的城市名称与假的城市名称区分开,但我至少会希望排除诸如“ 123.75”和“快速的红狐狸跳过懒惰的棕色狗”之类的字符串一些门槛。

首先,我研究了Levenshtein距离,并探讨了如何将其应用于至少与我要解决的问题类似的问题。我发现的一个有趣的应用是窃检测,其中一篇论文描述了如何使用Levenshtein距离和改进的Smith-Waterman算法对纸张进行打分,并根据它们是给定原纸的抄袭版本的可能性进行评分。我的问题是,是否有人可以用其他可能对我有帮助的既定算法或方法为我指明正确的方向。我感觉这可能是过去有人试图解决的问题,但到目前为止,我的Google-fu无法使我成功。


如果您有正面和负面的例子,那么您可以尝试训练分类器。对于功能,首先,我将尝试提取一些简单的统计数据,例如Yuval Filmus建议的统计数据。
尼克


城市名称似乎是一个不好的例子。他们遍布各地,尤其是在美国。在这里,表查找似乎是最有效的方法。您的问题更一般吗?
拉斐尔

Answers:


5

一些值得考虑的更好的统计数据是字长和 gram分析。对于单词长度,您可以收集城市名称的单词长度分布的统计数据,并将其与所获得的长度进行比较。n元语法分析着眼于示例文本中n个字母序列的分布(例如n = 2)。两种方法可以结合使用。ññññ=2

在启发式的情况下,您可以使用可能性来获得一个分数,该分数(希望)比其他文本要高。为了确定合理的阈值,您可以执行交叉验证。选择一组不是城市名称的示例短语。将城市名称分为两部分,大部分(例如80%)和一小部分(例如20%)。在大部分方面训练您的模型(即,收集大部分方面的统计信息),然后在较小部分和不良短语样本上评估模型。确定是否存在通过大多数城市名称的合理阈值,但仅通过少量不良短语。


谢谢。我已经开始研究n-gram了,但不知道我是否完全脱离基地,所以很高兴您提到它。字长听起来也很有趣,这是我没有想到的。
安德鲁(Andrew)

您可能要为此添加字符频率。特别是,这应该摆脱所有数字内容。一个优点是这种频率是可以在许多统计模型中训练/识别的数字向量。
拉斐尔

1
1个ñ+1个ñ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.