大量字符串数据的相似字符串查找

wjbianjason 2015-04-08 04:27:50
字符串数量为300万条,且均为短文本,所以用simhash和lcs都是不行,前者因为短文本的缘故一个词的增加都会造成10的汉明距离差异,lcs效率太慢。不知道大家有什么好的方法,谢谢了,以下是我的一个简单思路,但还没有尝试
先把所有字符串存入vector,然后再把字符串分词后按照key为词,value为一个bit的数组,该数组中为1的就表示vector该下标下的字符串有这个分词,把这个hashmap叫做map1,当然会另建一个表存储字符串和对应分词的表map2,当然虚词停词这种词频较高的会被去除,然后新来一个字符串就依靠分词取出自己分词对应的bit数组进行与运算,比如取出四个分词,有三个分词与出来的结果不为0,就找出下标然后判定该字符串与目标字符串相似。。现在问题是我现在有三百万个字符串,用这种方法开销有多大,我的bit数组会采取二进制压缩,压缩比会有多大
...全文
707 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fjkxyl 2017-03-21
  • 打赏
  • 举报
回复
如果这个数组有10个G,你的虚拟机内存只有512M,你们也敢直接查找吗?
gotopause 2015-04-09
  • 打赏
  • 举报
回复
判断字符串是否相似有个编辑距离算法,你看看是不是你要的,我觉得用Lucene创建索引还不错
lyw985 2015-04-09
  • 打赏
  • 举报
回复
现在说下我的想法 LZ的思路是反向索引的雏形,需要解决的事情很多,比如如何分词精确,储存方式是nosql还是文本,模糊查询处理机制 好在有现成的反向索引,Apache 开源项目 Lucene
lyw985 2015-04-09
  • 打赏
  • 举报
回复
LZ,问题要通俗易懂。 我不明白什么叫短文本,140个字?? 你可以这样提问:“现有300W行文本,每行文本长度大致为XXX个字,现输入指定文本,如何快速找到与该文本最相似的文本数据?”

51,407

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧