搜索类似的字符串并生成翻译

时间:2014-04-04 14:15:44

标签: vb.net string replace

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

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

到目前为止一切正常。

问题是很多次我有一句话,“公园里有3辆蓝色车”,但我的数据库中有“公园内有2辆蓝色车”的句子。

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

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

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

数字已经切换,我需要在生成新翻译时将其考虑在内。如何解决这个最终部分?

由于

编辑:

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

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

我搜索没有数字的字符串,并获得错误数字的字符串。

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

我比较两个句子并知道每个“3”被一个“4”取代,每2个被一个“5”替换

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

但在我写作的时候,我注意到一个问题:如果我有句子“有3辆车,他有2个座位停放”,并且从数据库中返回的句子是“公园里有5辆车有5个座位“那么它不会起作用,因为结果将是”公园里有3辆座位的3辆车“。你对如何克服最后一部分有所了解吗?

2 个答案:

答案 0 :(得分:0)

您可能希望使用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);

如果这会使事情变得太复杂,或许你需要研究某种模板引擎/库。

答案 1 :(得分:0)

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

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)

注意:通过使用命名组,您可以使这些模式对于pleaple更具可读性:

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