【问题标题】:How do I translate user input in real-time with a user-defined dictionary?如何使用用户定义的词典实时翻译用户输入?
【发布时间】: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”)。

类似这样的算法:

  1. 用户输入“A”。
  2. 我对输入字符串进行标记:

    |--------|---------|
    | tokens | hits    |
    |--------|---------|
    | "A"    | "alpha" |
    |--------|---------|
    
  3. 我输出“alpha”。
  4. 用户将“B”附加到输入字符串(“A”+“B”)。
  5. 我将新输入标记为二元组:

    |--------|--------|
    | tokens | hits   |
    |--------|--------|
    | "B"    | "beta" |
    | "AB"   |        |
    |-----------------|
    
  6. 我将“beta”附加到输出字符串(“alpha”+“beta”)。
  7. 用户将“C”附加到输入字符串(“AB”+“C”)。
  8. 我将新输入标记为二元组:

    |--------|--------| 
    | tokens | hits   |
    |--------|--------|
    | "C"    |        |
    | "BC"   |        |
    |-----------------|
    
  9. 我没有在输出中附加任何内容,因为没有命中。
  10. 用户将“D”附加到输入字符串(“ABC”+“D”)。
  11. 我将新输入标记为二元组:

    |--------|-----------------| 
    | tokens | hits            |
    |--------|-----------------|
    | "D"    |                 |
    | "CD"   | "charlie delta" |
    |--------------------------|
    
  12. 我将“charlie delta”附加到输出字符串(“alpha bravo”+“charlie delta”)。

当然,n-gram 会随着可能的输入数量而增长。有没有我没有看到的更简单或更快的解决方案?

2015 年 3 月 19 日编辑:

用户的词典可能涉及数以万计的术语。所以,我将它存储在数据库中。我还将输出存储在数据库中以备后用。

在前端,用户在文本输入中输入他们的输入,输入的值在后台通过 AJAX 请求发送到 PHP。

例如...

  1. 用户在文本输入中输入“A”。
  2. 在按键时,Javascript 获取文本输入的值,在后台将其发送到服务器,并清除输入的值。
  3. 用户在文本输入中输入“B”。
  4. 在按键时,Javascript 会捕获文本输入的值,在后台将其发送到服务器,并清除输入的值。
  5. ...等等等等...

我可能会收集文本输入并每隔 30 秒左右发送一次,以便在服务器上进行处理,这样请求就不会开始堆积,但你明白了。

【问题讨论】:

    标签: php string dictionary translation


    【解决方案1】:

    对于这个应用程序来说,PHP 并不是一个好主意。 PHP 是一种服务器端技术,这意味着您每次想要让它解释并更改输入的值时都必须触发提交。唯一可行的方法是让用户完成条目(填写整个字段)将其提交到服务器,将其字符串拆分,解析和替换,然后通过页面刷新返回值。不是非常用户友好。

    因此,您几乎肯定会想要使用 Javascript。

    在 javascript 中,这并不是很困难。您必须定义您的转换列表,可能是通过从您的服务器获取它的 ajax 调用。您可以将该结果数据分配给一个对象,您可以在该对象上进行查找以获取值。您将在输入字段上创建 keyup 或更改事件,在这种情况下,您将评估输入,确定定义对象的输出,并将其返回到另一个字段。

    【讨论】:

    • 嘿-o!感谢你的回答。我将问题限制在 PHP 上,因为那是我要做繁重工作的地方。用户的字典可能有数千个条目,我需要将翻译保存到数据库中。我不能用 Javascript 来做这一切,但是,你是对的。我会在用户输入时通过后台的 AJAX 请求将用户的输入发送到 PHP。我只是想弄清楚是否有比 n-gram 更快的方法来翻译输入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    相关资源
    最近更新 更多