gpt4 book ai didi

java - 在拉丁文字中匹配两个包含少于 10 个单词的字符串的最佳算法是什么

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:10 25 4
gpt4 key购买 nike

我正在比较歌曲标题,使用拉丁文字(虽然不总是),我的目标是如果两首歌的标题看起来相同则给出高分的算法,如果它们什么都没有则给出非常低的分数共同点。

现在我已经不得不编写代码 (Java) 以使用 Lucene 和 RAMDirectory 编写此代码 - 但是仅使用 Lucene 来比较两个字符串太重量级,因此太慢。我现在开始使用 https://github.com/nickmancol/simmetrics它有许多用于比较两个字符串的不错的算法:

https://github.com/nickmancol/simmetrics/tree/master/src/main/java/uk/ac/shef/wit/simmetrics/similaritymetrics

BlockDistance
ChapmanLengthDeviation
ChapmanMatchingSoundex
ChapmanMeanLength
ChapmanOrderedNameCompoundSimilarity
CosineSimilarity
DiceSimilarity
EuclideanDistance
InterfaceStringMetric
JaccardSimilarity
Jaro
JaroWinkler
Levenshtein
MatchingCoefficient
MongeElkan
NeedlemanWunch
OverlapCoefficient
QGramsDistance
SmithWaterman
SmithWatermanGotoh
SmithWatermanGotohWindowedAffine
Soundex

但我不太精通这些算法,什么是好的选择?

我认为 Lucene 以某种形式使用 CosineSimilarity,所以这是我的出发点,但我认为可能会有更好的东西。

具体来说,该算法应该适用于短字符串并且应该理解单词的概念,即应该特殊对待空格。拉丁文字的良好匹配是最重要的,但韩语和中文等其他文字的良好匹配也很重要,但我预计将需要不同的算法,因为它们处理空格的方式。

最佳答案

他们都很好。它们作用于字符串的不同属性并具有不同的匹配属性。最适合您的方法取决于您的需要。

我正在使用 JaccardSimilarity 来匹配名称。我选择 JaccardSimilarity 是因为它速度相当快,而且对于短字符串来说,在匹配带有常见拼写错误的名称方面表现出色,同时会迅速降低其他任何内容的分数。给空间额外的重量。它对词序也不敏感。我需要这种行为,因为误报的影响比漏报高得多,空格可能是错别字,但不常见,而且词序并不那么重要。

请注意,这是结合删除非变音符号的简化器和将剩余字符映射到 a-z 范围的映射器完成的。这是通过将所有单词分隔符标准化为单个空格的规范化传递的。最后,解析名称以挑选出首字母、pre- inner- 和后缀。这是因为名称的结构和格式对仅字符串比较具有相当的抵抗力。

要做出选择,您需要列出您想要的标准,然后寻找满足这些标准的算法。您还可以制作一个相当大的测试集并在该测试集上运行所有算法,以查看在时间、正数、误报、假负数和负数、系统应处理的错误类别等方面的权衡,等等,等等。

如果您仍然不确定您的选择,您还可以设置您的系统以在运行时切换精确的比较算法。这使您可以进行 A-B 测试,看看哪种算法在实践中效果最好。

TLDR;您想要哪种算法取决于您的需要,如果您不知道您需要什么,请确保您可以稍后更改它并即时运行测试。

关于java - 在拉丁文字中匹配两个包含少于 10 个单词的字符串的最佳算法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27192215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com