如何在 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 得到了我需要的东西。
谢谢!
如何在 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 得到了我需要的东西。
谢谢!