如何使用用户定义的字典实时翻译用户输入?

时间:2015-03-19 18:43:21

标签: php string dictionary translation

我试图将用户输入实时转换为有效的,使用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. 我追加"查理三角洲"到输出字符串(" alpha bravo" +" charlie delta")。
  13. 当然, n -grams随着输入数量的增加而增长。是否有一个更简单或更快的解决方案,我没有看到?

    编辑2015年3月19日:

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

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

    例如......

    1. 用户输入" A"在文字输入中。
    2. 在按键时,Javascript获取文本输入的值,在后台将其发送到服务器,并清除输入的值。
    3. 用户输入" B"在文字输入中。
    4. 在按键时,Javascript捕获文本输入的值,在后台将其发送到服务器,并清除输入的值。
    5. ......等等......
    6. 我可能会收集文本输入并每隔30秒左右发送一次,以便在服务器上进行处理,因此请求不会开始堆叠,但您明白了。

1 个答案:

答案 0 :(得分:0)

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

出于这个原因,你几乎肯定想要使用Javascript。

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