1

假设我们有一个搜索输入字段。我们的用户有两种键盘布局(En)(Fa):

有时用户忘记更改键盘布局,
所以而不是 => "سلام"
输入 => "sghl"

在这种情况下,谷歌几乎可以检测到问题,并提供正确的结果。

首先,我不知道这个算法的名称是什么。我在https://searchengineland.com/how-google-instant-autocomplete-suggestions-work-62592
中搜索并找到“Google Instant 的自动完成” ,但这不是我的情况,请查看我的截图:https ://imggmi.com /full/2019/4/12/b411bcbe08dcd1eb02a46487e836a0b2-full.png.html我写的是“لخخلمث”而不是“google”,但 google 提供了正确的结果。

第二个也是主要问题,我在https://www.npmjs.com/package/convert-layout中找到了“convert-layout” ,这正是我所需要的。它的'fromEn()'函数将错误的输入更改为正确的输入,

由于我的项目是有角度的,我写道:

declare var require:any;
var fa = require('convert-layout/fa.js');
let correct = fa.fromEn('sghl');  

我希望得到“سلام”,但它返回“س`شا”,这是不正确的。我在https://github.com/ai/convert-layout/blob/master/fa.json
中检查了源代码并且地图是正确的:

“s”:“س”,
“g”:“ل”,
“h”:“ا”,
“l”:“م”,

问题是什么?

简单的可编辑地址:https ://stackblitz.com/edit/angular-mnnsg9

4

2 回答 2

2

我写这个供我个人使用。随意修改它以满足您的需要(您可以在此处找到它作为要点):

function fixPersian(input) {
  var letters = {
    'q': 'ض',
    'w': 'ص',
    'e': 'ث',
    'r': 'ق',
    't': 'ف',
    'y': 'غ',
    'u': 'ع',
    'i': 'ه',
    'o': 'خ',
    'p': 'ح',
    '[': 'ج',
    ']': 'چ',
    'a': 'ش',
    's': 'س',
    'd': 'ی',
    'f': 'ب',
    'g': 'ل',
    'h': 'ا',
    'j': 'ت',
    'k': 'ن',
    'l': 'م',
    ';': 'ک',
    '\'': 'گ',
    'z': 'ظ',
    'x': 'ط',
    'c': 'ز',
    'v': 'ر',
    'b': 'ذ',
    'n': 'د',
    'm': 'پ',
    ',': 'و',
    'C': 'ژ',
    'H': 'آ',
    'A': 'ؤ',
    'S': 'ئ',
    'G': 'أ',
    'L': '«',
    'K': '»'
  };

  var output = '';

  for (var i = 0, il = input.length; i < il; i++) {
    output += letters[input.charAt(i)] || input.charAt(i);
  }

  return output;
}
于 2019-12-06T15:26:04.103 回答
1

我认为您不需要使用任何库来执行此操作。您可以编写一个简单的 javascript 函数并将错误的单词传递给它(sghl例如在您的情况下)。这个函数可以是这样的:

function correctWord(input) {
   var fa = require('convert-layout/fa.json');
   var result = '';
   var charArray = input.split('');
   for (let ch of charArray) {
      result += fa[ch];
   }
   return result;
}
于 2019-04-12T08:48:14.810 回答