【问题标题】:Search for similar strings and generate translation搜索相似的字符串并生成翻译
【发布时间】:2014-04-04 14:15:43
【问题描述】:

我正在开发一个带有翻译“已知”字符串的数据库的程序。

例如,如果我有“汽车是蓝色的”,它会在数据库中查找这个确切的字符串,如果字符串存储在数据库中,则获取相应的翻译并将其粘贴到那里。

到目前为止一切正常。

问题是很多时候我有一个句子,比如“公园里有 3 辆蓝色汽车”,但我的数据库中存储了“公园里有 2 辆蓝色汽车”这样的句子。

我需要的是程序在数据库中查找相同但数字不同的字符串。 (Sqlite 数据库)

到目前为止,它应该不会太难。它将返回翻译后的文本,但数字错误。现在我需要将文本中的数字替换为正确的数字。这也不会太难。但问题是一个句子可能有多个数字,而在翻译文本中数字的顺序是不同的。

例如句子“公园里有 3 辆汽车有 2 个座位”一旦翻译成“公园里有 3 辆汽车中有 2 个座位”(显然是用正确的语言)

数字已切换,我需要在生成新翻译时考虑到这一点。这最后一部分如何解决?

谢谢

编辑:

我有一个想法,但我不确定它是否有效:

我有我的原始字符串“公园里有 3 辆汽车,有 2 个座位”

我搜索没有数字的字符串,然后找到数字错误的字符串。

例如:“公园里有 4 辆车,有 5 个座位​​”

我比较了两个句子,知道每个“3”都换成“4”,每2换成“5”

我对返回的翻译文本运行字符串替换并替换所有数字...

但是当我在写的时候我注意到一个问题:如果我有句子“有 3 辆汽车在他的公园里有 2 个座位”并且从数据库返回的句子是“公园里有 5 辆汽车有 5 个座位” 然后它不会工作,因为结果将是“公园里有 3 辆汽车,有 3 个座位”.. 你知道如何克服这最后一部分吗?

【问题讨论】:

    标签: vb.net string replace


    【解决方案1】:

    您可能希望使用string.Format 并将字符串存储在数据库中: There are {0} cars with {1} seats

    这将在代码中变为: string.Format("There are {0} cars with {1} seats", amountOfCars, amountOfSeats);

    当然,对于翻译人员和维护人员来说,这让事情变得更加复杂(“{0} 是座位数量吗?还是汽车数量?嗯……”)因此您可以使用简单的替换:

    "There are {#cars} cars with {#seats} seats"
        .Replace("{#cars}", amountOfCars)      
        .Replace("{#seats}", amountOfSeats);
    

    如果这会使事情变得过于复杂,也许您需要研究某种模板引擎/库。

    【讨论】:

    • 感谢您的建议。请看我对康拉德·科科萨回答的评论
    【解决方案2】:

    根据正则表达式和引用组构建它,例如正则表达式:

    there are (\d+) cars with (\d+) seats in the park
    

    可以替换为(这是波兰语):

    Na parkingu jest $2 miejsc w $1 samochodach.
    

    然后简单地使用Regex.Replace方法:

    Dim pattern As String = "there are (\d+) cars with (\d+) seats in the park"
    Dim replacement As String = "Na parkingu jest $2 miejsc w $1 samochodach."
    Dim rgx As New Regex(pattern)
    Dim result As String = rgx.Replace(input, replacement)
    

    注意:您可以使用命名组使这些模式更易读:

    there are (?<Cars>\d+) cars with (?<Seats>\d+) seats in the park
    Na parkingu jest ${Seats} miejsc w ${Cars} samochodach.
    

    【讨论】:

    • 感谢提示.. 问题是无法更改数据库中的列表。它是从预制列表中导入的,实际上可以是任何字符串。它是第三方软件至少使用过一次的字符串列表。我只知道原始字符串、对应的相似字符串以及相似字符串的翻译。从这里我需要得到原始字符串的翻译。
    • @user2452250,在我看来,您需要一些自动过程来从您拥有的一对翻译中构建一对正则表达式(就像我提供的那样),所以事情确实变得棘手......跨度>
    • 我有一个想法,但不确定它是否有效.. 更新第一篇文章并将报告
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2012-05-01
    • 2012-12-29
    • 1970-01-01
    • 2014-01-25
    相关资源
    最近更新 更多