【问题标题】:How to convert English input layout to Persian(farsi)如何将英语输入布局转换为波斯语(波斯语)
【发布时间】:2019-04-12 08:31:12
【问题描述】:

假设我们有一个搜索输入字段。我们的用户有两种键盘布局(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

【问题讨论】:

  • 我不认为谷歌有一个特定的算法,相反,我认为他们会注意到大多数搜索“sghl”的人不会点击结果中的任何链接并搜索紧随其后的“سلام”

标签: javascript angular farsi


【解决方案1】:

我写这个是为了我个人使用。随意修改它以满足您的需求(您可以将其作为要点找到它here):

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;
}

【讨论】:

    【解决方案2】:

    我认为您不需要使用任何库来执行此操作。您可以编写一个简单的 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;
    }
    

    【讨论】:

    • 谢谢@hamed,但它支持多种语言,从和到,大写和...,无论如何我想找到问题 ممنون。
    • 它很有用。 (;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多