我有一个来自外部数据库的大约 1500 个字符串的列表,随着时间的推移,当一组业务用户管理它们时,它们开始具有具有语义值的重复出现的子字符串。
我正在构建一个前端,并希望向用户展示这些子字符串的过滤下拉列表。
例如,如果我有输入字符串:
- 美国富
- 美国酒吧(无效)
- 英国 bat
- 英国 baz(无效)
- 澳大利亚 womp
- AU大鼠
我想回去:
- 美国
- 英国
- 澳大利亚
- 不活跃
我的第一个想法是拥有一个阈值参数和一个分隔符列表。对于上面的内容,我可能会说 threshold=.3 并且分隔符是空格、(, 和 )。
然后使用分隔符执行 string.split 并使用像集合这样的数据结构来计算重复项(?)...
我并不是要让某人在这里为我完成工作 - 从已经做过这件事的人那里获得有关方法的建议会很棒。
最佳答案
这个问题很适合使用 Linq 方法:
var words = from s in listOfStrings
from word in s.Split(new[] { ' ', '(', ')' }, StringSplitOptions.RemoveEmptyEntries)
group word by word;
var dic = words.ToDictionary(g => g.Key, g => g.Count());
关于c# - 在一组短字符串中查找非常常见的子字符串的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7757809/