【发布时间】:2015-03-19 18:43:20
【问题描述】:
我正在尝试使用 PHP 将用户输入实时翻译成他们定义的语言。
例如,用户创建以下字典(其中左侧是输入,右侧是输出):
[
"A" => "alpha",
"B" => "bravo",
"CD" => "charlie delta"
]
然后,用户输入以下内容(有关详细信息,请参阅下面的编辑):
"A", "B", "C", "D"
如何实时翻译这些输入:
|-------------|---------------------------------|
| input | output |
|-------------|---------------------------------|
| "A" | "alpha" |
| "A" + "B" | "alpha" + "bravo" |
| "AB" + "C" | "alpha bravo" + ? |
| "ABC" + "D" | "alpha bravo" + "charlie delta" |
|-------------|---------------------------------|
如果输入字符串和输出字符串是一对一的关系,那就没问题了。但是,多个输入字符串可能与单个输出字符串相关(例如,“CD”是“charlie delta”)。
可能的解决方案
我考虑将输入字符串标记为 n-grams,其中 n 是用户字典中单个输出的最大输入数(在上面的示例中) , n 将是 2 因为“CD”)。
类似这样的算法:
- 用户输入“A”。
-
我对输入字符串进行标记:
|--------|---------| | tokens | hits | |--------|---------| | "A" | "alpha" | |--------|---------| - 我输出“alpha”。
- 用户将“B”附加到输入字符串(“A”+“B”)。
-
我将新输入标记为二元组:
|--------|--------| | tokens | hits | |--------|--------| | "B" | "beta" | | "AB" | | |-----------------| - 我将“beta”附加到输出字符串(“alpha”+“beta”)。
- 用户将“C”附加到输入字符串(“AB”+“C”)。
-
我将新输入标记为二元组:
|--------|--------| | tokens | hits | |--------|--------| | "C" | | | "BC" | | |-----------------| - 我没有在输出中附加任何内容,因为没有命中。
- 用户将“D”附加到输入字符串(“ABC”+“D”)。
-
我将新输入标记为二元组:
|--------|-----------------| | tokens | hits | |--------|-----------------| | "D" | | | "CD" | "charlie delta" | |--------------------------| - 我将“charlie delta”附加到输出字符串(“alpha bravo”+“charlie delta”)。
当然,n-gram 会随着可能的输入数量而增长。有没有我没有看到的更简单或更快的解决方案?
2015 年 3 月 19 日编辑:
用户的词典可能涉及数以万计的术语。所以,我将它存储在数据库中。我还将输出存储在数据库中以备后用。
在前端,用户在文本输入中输入他们的输入,输入的值在后台通过 AJAX 请求发送到 PHP。
例如...
- 用户在文本输入中输入“A”。
- 在按键时,Javascript 获取文本输入的值,在后台将其发送到服务器,并清除输入的值。
- 用户在文本输入中输入“B”。
- 在按键时,Javascript 会捕获文本输入的值,在后台将其发送到服务器,并清除输入的值。
- ...等等等等...
我可能会收集文本输入并每隔 30 秒左右发送一次,以便在服务器上进行处理,这样请求就不会开始堆积,但你明白了。
【问题讨论】:
标签: php string dictionary translation