Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用用户定义的词典实时翻译用户输入?_Php_String_Dictionary_Translation - Fatal编程技术网

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

Php 如何使用用户定义的词典实时翻译用户输入?,php,string,dictionary,translation,Php,String,Dictionary,Translation,我正在尝试使用PHP将用户输入实时转换为他们定义的语言 例如,用户创建以下词典(其中左侧为输入,右侧为输出): 然后,用户输入以下内容(有关详细信息,请参阅下面的编辑): 如何实时转换这些输入: |-------------|---------------------------------| | input | output | |-------------|---------------------------------| |

我正在尝试使用PHP将用户输入实时转换为他们定义的语言

例如,用户创建以下词典(其中左侧为输入,右侧为输出):

然后,用户输入以下内容(有关详细信息,请参阅下面的编辑):

如何实时转换这些输入:

|-------------|---------------------------------|
| input       | output                          |
|-------------|---------------------------------|
| "A"         | "alpha"                         |
| "A" + "B"   | "alpha" + "bravo"               |
| "AB" + "C"  | "alpha bravo" + ?               |
| "ABC" + "D" | "alpha bravo" + "charlie delta" |
|-------------|---------------------------------|
如果输入字符串和输出字符串之间是一对一的关系,那么就不会有问题。但是,多个输入字符串可能与单个输出字符串相关(例如,“CD”是“charlie delta”)

可能的解决方案

我考虑将输入字符串标记为n-grams,其中n是用户字典中单个输出的最大输入数(在上面的示例中,由于“CD”,n将为2)

类似这样的算法:

  • 用户输入“A”
  • 我将输入字符串标记化:

    |--------|---------|
    | tokens | hits    |
    |--------|---------|
    | "A"    | "alpha" |
    |--------|---------|
    
  • 我输出“alpha”
  • 用户将“B”附加到输入字符串(“A”+“B”)
  • 我将新输入标记为Bigram:

    |--------|--------|
    | tokens | hits   |
    |--------|--------|
    | "B"    | "beta" |
    | "AB"   |        |
    |-----------------|
    
    |--------|--------| 
    | tokens | hits   |
    |--------|--------|
    | "C"    |        |
    | "BC"   |        |
    |-----------------|
    
    |--------|-----------------| 
    | tokens | hits            |
    |--------|-----------------|
    | "D"    |                 |
    | "CD"   | "charlie delta" |
    |--------------------------|
    
  • 我将“beta”附加到输出字符串(“alpha”+“beta”)
  • 用户将“C”附加到输入字符串(“AB”+“C”)
  • 我将新输入标记为Bigram:

    |--------|--------|
    | tokens | hits   |
    |--------|--------|
    | "B"    | "beta" |
    | "AB"   |        |
    |-----------------|
    
    |--------|--------| 
    | tokens | hits   |
    |--------|--------|
    | "C"    |        |
    | "BC"   |        |
    |-----------------|
    
    |--------|-----------------| 
    | tokens | hits            |
    |--------|-----------------|
    | "D"    |                 |
    | "CD"   | "charlie delta" |
    |--------------------------|
    
  • 我没有在输出中添加任何内容,因为没有点击
  • 用户将“D”附加到输入字符串(“ABC”+“D”)
  • 我将新输入标记为Bigram:

    |--------|--------|
    | tokens | hits   |
    |--------|--------|
    | "B"    | "beta" |
    | "AB"   |        |
    |-----------------|
    
    |--------|--------| 
    | tokens | hits   |
    |--------|--------|
    | "C"    |        |
    | "BC"   |        |
    |-----------------|
    
    |--------|-----------------| 
    | 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对于这个应用程序来说不是一个好主意。PHP是一种服务器端技术,这意味着您必须在每次想要让提交解释和更改输入值时启动提交。唯一可行的方法是让用户完成条目(填写整个字段)将其提交给服务器,对其进行字符串拆分、解析和替换,然后通过页面刷新返回值。不是非常友好

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


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

    Hey-o!谢谢你的回答。我把问题限制在PHP上,因为我将在PHP上完成繁重的工作。用户的字典可能有数千个条目,我需要将翻译保存到数据库中。我不能用Javascript完成所有的工作,但是,你是对的。当用户输入时,我会在后台通过AJAX请求将用户输入发送到PHP。我只是想弄清楚是否有比n-grams更快的方法来翻译输入。