我正在研究一个允许导入的文件被本地化为其他语言的系统。识别字符串中的相似性
这主要是一个私人项目获得MVC3,的EntityFramework,LINQ,诸如此类的窍门。因此,我喜欢做一些疯狂的事情来增加最终结果,其中之一就是对类似字符串的认识。
想象一下,你有一个字符串下面的列表 - 从游戏我已经在过去曾与借来的:
- Megabeth:圣滚轮统一 - 包括头部,躯干和腿
- Megabeth:圣滚筒均匀头
- Megabeth:圣滚轮统一腿
- Megabeth:圣滚轮统一躯干
- Megabeth:PAX东部2012统一 - 包括头部,躯干和腿
- Megabeth:PAX东部2012统一主管
- Megabeth:PAX东部2012统一腿
- Megabeth:PAX东部2012统一躯干
正如你可以看到,当用户已经翻译了第4串,以下4个份额有很多相似之处,在这种情况下:
- Megabeth
- 统一
- 包括头部,躯干和腿
- 头
- 腿
- 躯干
考虑的第一个4串确实已经翻译,当用户从列表中选择5号线,是什么样的算法或技术可以用来向用户显示“类似字符串”的子标题下的第一个字符串(以及其他可能的字符)?
编辑 - 在Levenshtein距离有点评论: 我目前针对数据库中的10K字符串。 Levenshtein Distance将每个字符串的字符串进行比较,因此在这种情况下为10k x(10k -1)个可能的组合。我如何以可行的方式来解决这个问题?有没有更好的解决方案,这个特定的算法?
有趣的问题。我不知道该从哪里开始回答这个问题,但是生病了,看着。 – Gallen
编辑距离。其品种很多。而且相当直接。如果矩阵变大,可能在计算上很昂贵。 – DarthVader
你可以连接所有的字符串,然后通过空格分隔(使用正则表达式),然后用'.Distint()'将其转换并用替换执行翻译。与此相关的问题是,并非所有的语言都会逐字翻译。 – Jay