如何只检索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距离java库。 但是,即使我将jre内存增加到6GB
,我最终也会遇到java堆空间问题我还删除了停用词并使用稀疏矩阵转换为术语向量。但是,这很慢。
我认为我可以使用覆盖equals()
和hashcode()
选项,因为我是模糊匹配的,我不能保证hashcode()
对于只相似的字符串是相等的。< / p>
有人能建议我的算法更有效吗?我对数据结构有点生疏,一直绞尽脑汁,在网上寻找解决方案。
我希望我的问题很明确。感谢
答案 0 :(得分:2)