如何在java中仅检索字符串列表中一组相似字符串中的一个
如何在java中检索字符串列表中一组相似字符串中的一个 我有一个文本数据列表(列表的长度约为60000)(存储为字符串),其中有一些彼此非常相似的文本组。 从这个列表中,我想创建一个新的列表,每组相似的列表元素只有一个元素 简化示例:如何在java中仅检索字符串列表中一组相似字符串中的一个,java,string,fuzzy-search,Java,String,Fuzzy Search,如何在java中检索字符串列表中一组相似字符串中的一个 我有一个文本数据列表(列表的长度约为60000)(存储为字符串),其中有一些彼此非常相似的文本组。 从这个列表中,我想创建一个新的列表,每组相似的列表元素只有一个元素 简化示例: the boy ate an apple boy ate apple the boy ate apple 在新列表中应仅包含上述内容中的一项 我的一般方法是有两个列表: 原始列表和将保存唯一列表的新列表 For each text in original_lis
the boy ate an apple
boy ate apple
the boy ate apple
在新列表中应仅包含上述内容中的一项
我的一般方法是有两个列表:
原始列表和将保存唯一列表的新列表
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堆空间问题
我还删除了停止字,并使用稀疏矩阵转换为术语向量。然而,这是非常缓慢的
我确实认为我可以使用overrideequals()
和hashcode()
选项,因为我是模糊匹配的,所以我不能保证hashcode()
对于仅相似的字符串是相等的
有谁能为我的算法提出更有效的方法吗?我对数据结构有点生疏,一直在绞尽脑汁在网上寻找解决方案
我希望我的问题是清楚的。感谢我按照建议使用Lucene为每个字符串编制索引,这使得检查相似性的总体性能大大提高 我确实遇到了另一个建议的替代方案,看起来它可能会起作用,但没有尝试,因为我从Lucene那里得到了我所需要的
谢谢 您可以使用。谢谢用户880772。Lucene很聪明。