问一个算法题目,如何求字符串集合中全部公共字串的情况

2018-11-27 19:31:36 +08:00
 iblislsy

场景:

先把实际情况说一下,数据量在 9000w 行,每行都是“一个字符串+一个种类”,字符串长度平均在 1000 位左右

1.字符串类似'abcdefg','aabbcc','aabcc',没有实际英语含义。

2.每个字符串都有一个种类, 'dog','cat,'car', 一共 10 种种类。

3.显然数据集的大小是 9000w 行 × 2 列 的 dataframe

目标:

1.想观察出同一个种类的字符串有没有共性,由于字符串没有实际的英语含义,所以我的初步想法是通过最长字串的匹配情况来计算相似度,总结出每个种类下字符串的规则。当新的字符串出现时,我能够通过之前的规则来分类。

期望:

1.不管是算法层面的,机器学习,深度学习,还是 es 这样引擎方面的,希望能和大家讨论讨论可行的方案

2.子串的复杂度有点高...还没有好的思路,想了很久,自闭了。

3.如果我没有表述清楚问题,请指出

2226 次点击
所在节点    程序员
15 条回复
akira
2018-11-27 19:41:39 +08:00
如果字符串是摘要算法产生的,那就有难度了....
shylockhg
2018-11-27 20:54:40 +08:00
字符串 hash 画分布图
shylockhg
2018-11-27 21:06:08 +08:00
映射到向量空间算距离
pwrliang
2018-11-27 21:32:05 +08:00
AC 自动机不就是解决多个串找字串的吗
111qqz
2018-11-27 21:34:22 +08:00
目标部分没有看懂,按照题目来说,我理解的是,有一个字符串集合 S,然后求 S 中所有字符串的(最长)公共子串?
iblislsy
2018-11-27 22:13:54 +08:00
@111qqz 不是“最长”子串,是“全部”子串的情况,来总结特征
leriou
2018-11-27 22:15:56 +08:00
还是用空间向量计算相似度吧
ytterbium
2018-11-27 22:15:58 +08:00
先用最裸的 lstm 做下分类,要是分类正确率还是随机水平那就说明类别与字串无关
iblislsy
2018-11-27 22:16:17 +08:00
@111qqz 最长的子串是其中一种特征,我希望能找到更多的特征
iblislsy
2018-11-27 22:17:23 +08:00
@leriou 相似度能体现在 abcdefg 的这种字符串顺序上吗,我也不清楚
leriou
2018-11-27 22:33:58 +08:00
@iblislsy 跟顺序没关系, 空间向量是用文本在多个词维度上的夹角计算的, es 也是用这个来计算文档相似度的
xiyiailoli
2018-11-27 22:47:46 +08:00
kmp ?
ccpp132
2018-11-28 05:59:16 +08:00
先找一个较短的字符串,把它所有子串弄出来。然后拿这些串对剩下的字符串做多模匹配,统计每个子串出现的次数看是否等于总字符串数目
iblislsy
2018-11-28 08:53:41 +08:00
@leriou 我以前试过余弦距离去计算相似度,效果不好
lihanfeifan
2018-11-28 12:11:13 +08:00
有没有试过前缀树?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/512074

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX