当前位置: 代码迷 >> java >> 如何在Java中的字符串列表中仅检索一组相似字符串中的一个
  详细解决方案

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

热度:53   发布时间:2023-07-17 20:01:51.0

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

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

简化示例:

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

对于相似性函数,我使用了类似的Levenshtein距离Java库。 但是,即使将jre内存增加到6GB,我最终也会遇到Java堆空间问题

我还删除了停用词,并使用稀疏矩阵将其转换为术语向量。 但是,这非常慢。

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

有人可以建议一种对我的算法更有效的方法吗? 我对数据结构有些不满,一直在绞尽脑汁,在网上寻找解决方案。

希望我的问题清楚。 谢谢

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

我确实在遇到了另一个建议的替代方案它看起来可能有用,但由于我从Lucene那里得到了所需的东西,所以没有尝试。

谢谢!

  相关解决方案