我试图将用户输入实时转换为有效的,使用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")。
像这个算法:
我将输入字符串标记为:
|--------|---------|
| tokens | hits |
|--------|---------|
| "A" | "alpha" |
|--------|---------|
我将新输入标记为双字母:
|--------|--------|
| tokens | hits |
|--------|--------|
| "B" | "beta" |
| "AB" | |
|-----------------|
我将新输入标记为双字母:
|--------|--------|
| tokens | hits |
|--------|--------|
| "C" | |
| "BC" | |
|-----------------|
我将新输入标记为双字母:
|--------|-----------------|
| tokens | hits |
|--------|-----------------|
| "D" | |
| "CD" | "charlie delta" |
|--------------------------|
当然, n -grams随着输入数量的增加而增长。是否有一个更简单或更快的解决方案,我没有看到?
编辑2015年3月19日:
用户的词典可能涉及数万个术语。所以,我将它存储在一个数据库中。我还将输出存储在数据库中供以后使用。
在前端,用户在文本输入中输入输入,输入的值在后台通过AJAX请求发送给PHP。
例如......
我可能会收集文本输入并每隔30秒左右发送一次,以便在服务器上进行处理,因此请求不会开始堆叠,但您明白了。
答案 0 :(得分:0)
PHP对于这个应用程序来说不是一个好主意。 PHP是一种服务器端技术,这意味着每次想要解释并更改输入的值时,您必须触发提交。这是可行的唯一方法是让用户完成输入(填写整个字段)将其提交给服务器,字符串拆分,解析和替换,然后通过页面刷新返回值。不是非常用户友好。
出于这个原因,你几乎肯定想要使用Javascript。
在javascript中,它并不是非常困难。您必须定义转换列表,可能是通过从服务器获取的ajax调用。您将结果数据分配给可以执行查找以获取值的对象。您可以在输入字段上创建一个键盘或更改事件,在这种情况下,您将评估输入,确定定义对象的输出,并将其返回到另一个字段。