【发布时间】:2012-10-22 20:17:12
【问题描述】:
我正在开发一个允许将导入的文件本地化为其他语言的系统。
这主要是一个私人项目,用于掌握 MVC3、EntityFramework、LINQ 等的窍门。因此,我喜欢做一些疯狂的事情来为最终结果增添趣味,其中之一就是识别相似的字符串。
假设您有以下字符串列表 - 从我过去使用过的游戏中借用:
- Megabeth:Holy Roller 制服 - 包括头部、躯干和腿部
- Megabeth:神圣滚轮制服头
- Megabeth:Holy Roller 制服腿
- Megabeth:Holy Roller 制服躯干
- Megabeth:PAX East 2012 制服 - 包括头部、躯干和腿部
- Megabeth:PAX East 2012 制服主管
- Megabeth:PAX East 2012 制服腿
- Megabeth:PAX East 2012 制服躯干
如您所见,一旦用户翻译了前 4 个字符串,以下 4 个字符串有很多相似之处,在这种情况下:
- 百兆
- 制服
- 包括头部、躯干和腿部
- 头
- 腿
- 躯干
考虑到前 4 个字符串确实已经翻译,当用户从列表中选择第 5 个字符串时,我可以使用哪种算法或技术向用户显示子标题下的第一个字符串(可能还有其他字符串) “相似的字符串”?
编辑 - 对 Levenshtein 距离的一点评论: 我目前的目标是数据库中的 10k 个字符串。 Levenshtein Distance 比较每个字符串的字符串,因此在这种情况下有 10k x (10k -1) 个可能的组合。我将如何以可行的方式解决这个问题?有没有比这个特定算法更好的解决方案?
【问题讨论】:
-
有趣的问题。我不知道从哪里开始回答这个问题,但我想出去看看。
-
编辑距离。其中有很多品种。并且相当直截了当。如果矩阵变大,计算量可能会很大。
-
你可以连接所有的字符串,然后用空格分割(使用正则表达式),然后用
.Distint()linq 并用替换执行翻译。问题在于,并非所有语言都逐字翻译。 -
@Jay 没关系,它应该帮助用户完成翻译过程,而不是为他完成所有工作......但至少:p
标签: c# asp.net-mvc-3 entity-framework localization similarity