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

问题描述 投票:0回答:2

我正在尝试使用 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-gram,其中 n 是用户字典中单个输出的最大输入数量(在上面的示例中,由于“CD”,n 将为 2) )。

类似这样的算法:

  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
2个回答
0
投票

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

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

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


0
投票

????????? 阿曼航空 wy2435 mct syz 周二和周五,wy 2436 syz mct 周二和周五,塔班航空 mct syz hh7218 syz mct hh 7217 周二和周五,基什航空 mct syz y9 6044 周六 syz mct y9 6045星期三,mct kih 基什空气 y9 6053 星期三,kih mct 基什空气 y96052 星期六,mct zbr y9 6025 基什空气 星期六,zbr mct y9 6024 基什空气 星期六,mct ifn varesh 空气 vrh 6830 星期日,ifn mct varesh 空气 vrh 6829 星期日,mct ika varesh air vrh 6811 周日和周三,ika mct varesh air vrh 6810 周日和周三

© www.soinside.com 2019 - 2024. All rights reserved.