Giter Site home page Giter Site logo

ime-for-minority-language-'s Introduction

IME For Minority Language

小语种输入法支持梵文、巴利文、西夏文、藏文、婆罗米文等。 支持平台:Windows7,8,10;UWP。

本文是对项目的简介,描述大致的轮廓和使用到的技术。

小语种输入法为私有项目,所有权归企业,因此仓库没有代码,也没有任何项目文件。

小语种输入法由作者独立设计和完成。

目录

  1. 设计模式
  2. Text Service Framework
  3. 进程同步
  4. 自然语言处理
  5. 词库设计
  6. 数据库设计
  7. 视觉/交互设计

下载

使用 baidu/google 搜索梵语巴利语输入法即可找到下载地址

设计模式 - MVVM & MVC

项目逻辑上被划分为三块:

  1. 远程服务 - 使用 HTTP/HTTPS,FTP与本地服务进行数据同步。
  2. 本地服务 - 基于远程服务和本地数据,为输入法端提供计算服务。
  3. 输入法端 - 使用 TCP 与本地服务进行状态同步。

设计模式和语言

  1. 远程服务设计模式和语言 MVC JAVA
  2. 本地服务设计模式和语言 MVVM C#
  3. 输入法端语言 C++

基于WPF的特性,本地服务端选用了MVVM

MVVMView和View-Model之间具有松耦合的特性

因此,在项目中将GUI与业务逻辑进行了分离,降低了复杂度、同时也保证了质量。



支持Windows多平台 - Text Service Framework(TSF)

Windows输入法开发由于文档很少,组织也比较混乱,因此存在一定的开发难度。

在可查到的公开信息中,没有发现对TSF框架的内部逻辑细节描述的文档。

微软仅仅给出一个基于TSF框架实现的输入法样例,并且未作任何说明。

本项目修改基于TSF框架的输入法样例,并在其中嵌入计算和通信模块,完成了输入法端的工作。



进程同步-TCP SOCKET

TSF框架中内置了简单的GUI模块,但为了实现更复杂的GUI,并且绕开TSF框架中复杂的数据结构

设计了本地服务端,并且屏蔽了TSF中的GUI,所以本地服务端和输入法端需要做数据同步。

由于匿名管道用于亲子关系的进程同步,而命名管道在UWP技术中被禁用。

所以项目使用了windows socket作进程同步的基础,由于项目私密原因,在此不作具体说明。

进程同步涉及到的知识点有:阻塞与非阻塞模式字符的编码多进程的管理



自然语言处理

NLP-拼写错误纠正-最小编辑距离

拼写错误纠正基于最小编辑距离算法实现,算法定义如下图,本项目基于此算法,为用户给出纠正后的候选项。


NLP-候选列表生成-LRU Cache的应用

LRU Cache 是操作系统中的一个概念,直译为最近最少使用缓存。

一般来说,用户的常用词汇是有限的,将用户输入和选择的候选项放入LRU Cache中,可以帮助用户快速的输入常用的词汇。

本文使用链表和哈希表(键值对)实现,维护LRU Cache涉及大量的删除/查找操作,因此选用了删除/查找时间为o(1)的链表/哈希表。



词库设计 - 字节流加密

输入法的词库被设计为一个二进制文件,为了保证数据的安全性,同时兼顾查询速度。

加密函数被设计为一个,定义域x=[0,255],值域F(x)=[0,255]的函数,由于项目私密原因,在此不作具体说明。



数据库设计 - JSON Object

抛开远程服务端,本项目涉及的数据量较少,数据(除了词库数据)将在系统初始化时,加载到内存中。

因此使用数据库系统(MYSQL,SQL,sqlite),在效率和可维护性上并不是一个明智的选择。(如果未来的需求需要修改model,那将要更改数据库)

项目使用了一种更巧妙的做法,可以避免修改Model时还需要更改数据库的问题,同时效率也很高。

将 Model(数据) 转换为 JSON Object,并以文本的形式存储于本地。

涉及到敏感数据时,将对此文本进行加密。

由于项目私密原因,加密算法不作具体说明。



视觉/交互设计

使用XAML重写了窗体样式和诸多控件样式,以使APP在Windows7和windows10视觉体验一致。

交互设计基于本人的北航硕士课程交互设计,以及微软的设计规范和Fluent Design。

hello

mainpage

ime-for-minority-language-'s People

Contributors

nzaocan avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.