如何在 java 中的字符串列表中仅检索一组相似字符串中的一个

How to retrieve only one of a group of similar strings in a list of strings in java

如何在 java 中的字符串列表中仅检索一组相似字符串中的一个。

我有一个文本数据列表(列表长度约为 60000)(存储为字符串),其中包含彼此非常相似的文本组。 从这个列表我想创建一个新列表,每组相似的列表元素只有 1 个元素

简化示例:

the boy ate an apple
boy ate apple
the boy ate apple

在新列表中应该只有以上一项

我的一般方法是有 2 个列表: 原始列表和将包含唯一列表的新列表

For each text in original_list
    for each utext in the unique list
        if similarity(text, utext) > threshold (threshold can be 90%)
            break
        else
            is_similar = false
    end for

    if is_similar = false   
        add text to unique list
end for

对于相似度函数,我使用了 simmetrics Levenshtein distance java 库。 但是我最终 运行 进入 java 堆 space 问题,即使我将 jre 内存增加到 6GB

我还删除了停用词并使用稀疏矩阵转换为词向量。然而,这是非常缓慢的。

我确实认为我可以使用覆盖 equals()hashcode() 选项,因为我是模糊匹配,所以我不能保证 hashcode() 对仅相似的字符串相等.

任何人都可以为我的算法提出更有效的方法吗?对数据结构有点生疏,绞尽脑汁上网找解决办法

我希望我的问题很清楚。谢谢

我按照建议使用了 Lucene 来索引每个字符串,这使得检查相似性的整体性能更好!

我确实遇到了另一个建议的替代方案 here,看起来它可能有效但没有尝试,因为我从 Lucene 得到了我需要的东西。

谢谢!