作者IMPOSSIBLEr (高级外劳)
看板iPhone
标题Re: [心得] iOS8 中文输入法真的很聪明
时间Mon Sep 29 07:08:49 2014
: 推 ishuen: 但是apple说输入法没用到网路 这些资料都在手机里吗? 09/29 01:00
: → KANO1931: 需要庞大资源的部分是在计算阶段 应用的部分是结果 不一 09/29 01:05
: → KANO1931: 定占很大空间 但如果要动态更新常用词就需要了 09/29 01:09
: 推 pm2001: 没用到网路我觉得不可能 这资料量非常大 09/29 01:18
小弟非专业发言,大家看看就好
个人觉得像这种切进时事的联想字,应该都是需要网路的
如同KANO大所说,需要大量运算资源的是计算阶段,实作阶段所需资源并不大
我举一个我最近为虾米键盘实作简易联想词的方法为例
虾米键盘的联想词功能目前实作流程如下
1. 下载Google ngrams dataset简中版本(因为没有繁中...)
上文所述需要大量运算资源的就是这部份,如何产生ngrams
而google已经帮我们作好了(佛心
Google ngrams dataset资料格式看起来像这样
<中文词> <某西元年> <该西元年中发现此词汇数量> <该西元年中在多少着作中发现该词>
我下载下来的dataset总共大小约1.3gb(只取2 gram)
2. 使用程式语言parse下载下来的dataset,输出成frequency list, 格式如下
<中文词> <总发生数量>
存成纯文字档,目前我跑出来的这个档大小为500kb左右,40000左右中文词
像这第二步,需要读入1.3gb的原始资料,在手机上会耗时良久
但读入500kb的资料,目前虾米键盘的速度还算可以(iPhone 5)
3. 在键盘初始化时parse第二步产生的frequency list存进记忆体。
这部份的资料结构可采用简单的hash map或是高级一点(比较难实作)的trie
不过如果词的长度不是很长,例如我的第二步出来的档,里面最长的词只有4字
那使用hash map应该整体来说效能会好一点,当然这是个人感觉
基本上有了这个backend data structure,再写一个function,输入为字串,
然後到这个data structure中查询,输出为一个字串阵列,然後就可以输出到
键盘画面上给使用者选择。
由上可知,如果想要动态产生联想词例如结合时事,或是使用最近的报章blog文章
当作ngrams的corpus,那麽网路是必须的。
不专业分享,请勿笔战~~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 24.5.179.190
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/iPhone/M.1411945732.A.D3D.html
※ linpien:转录至看板 Liu 09/29 07:44
1F:推 hoho8: 这不是专业那什麽才叫专业 09/29 08:27
2F:→ hoho8: 虾米键盘通过审核了吗? 09/29 08:29
还没啊...十天了Q_Q
已寄信给app review team问到底是怎样审到天荒地老
3F:推 gv8899: 专业推 09/29 08:38
4F:推 caster5566: 看不懂 但感觉你说的很专业 09/29 08:55
5F:推 KANO1931: 推同样NLP人~~ 09/29 10:45
※ 编辑: IMPOSSIBLEr (24.5.179.190), 09/29/2014 11:40:58
6F:推 pm2001: 一样阿 你还是需要网路去更新资料 09/29 12:07
7F:→ Tenka: 好想赢韩国都一年半前的事了 什麽实事... 09/29 12:29
请问您上次更新Apple内建键盘是何时?
如果键盘没有使用网路存取,这种对照表就只有在更新软体时有办法更新
所以我猜是apple有偷偷定时下载对照表XDDD
※ 编辑: IMPOSSIBLEr (24.5.179.190), 09/29/2014 12:51:21