<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>Rest Valley &#187; sogou</title> <atom:link href="http://lihdd.net/tag/sogou/feed/" rel="self" type="application/rss+xml" /><link>http://lihdd.net</link> <description>The scratchpad of quark</description> <lastBuildDate>Sat, 09 Oct 2010 13:56:19 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=</generator> <item><title>ibus-sogoupycc，我的输入法，我的寒假</title><link>http://lihdd.net/my-work-on-ibus-sogoupycc/</link> <comments>http://lihdd.net/my-work-on-ibus-sogoupycc/#comments</comments> <pubDate>Sun, 28 Feb 2010 17:22:46 +0000</pubDate> <dc:creator>quark</dc:creator> <category><![CDATA[Life]]></category> <category><![CDATA[ibus-sogoupycc]]></category> <category><![CDATA[ime]]></category> <category><![CDATA[sogou]]></category><guid
isPermaLink="false">http://lihdd.net/?p=322</guid> <description><![CDATA[五月天的 “突然好想你” MV 中的有两段对着屏幕录的输入中文的过程，看起来输入很方便，由此，我对台湾的输入法产生了兴趣。 由于天之痕而喜欢上轩辕剑系列的我，在云之遥上市之后，看着台湾玩家慢慢地通关，和他们聊起了输入法，被告知无虾米输入法目 前是超过新仓颉，最流行，最好学，最快的输入法，连幼儿园小朋友都在学。 难以想象把注音、字形、英文单词混合编码的输入法是什么样子，但无虾米输入法就是这样的输入法，它还是拥有 Windows 98 时代的灰色界面，并收费的繁体世界最流行的输入法。我尝试练习一段时间之后，聚精会神地输入最基本的字根的速度只有双拼的四分之一，又由于繁体字和简体字 有很大区别，注音和拼音也有区别，决定放弃无虾米。 拼音类的输入法的通病，重码很多，一不留神就会输入错字。我想去尝试一些其他的形码输入法。简体的形码输入，比较流行的就是五笔和郑码，虽然似乎五 笔的名气大一些，但是郑码看起来更加好，我决定在寒假期间学会它。 世事万变，突然有一天，我收到一用户的邮件，其中提到了对 ibus-sogoupycc 的建议，还指出了几处错误。本来觉得用 Linux 的人就很少了，用双拼的人就更少了，同时使用 Linux、双拼，还要是 ibus 的用户也许就只有十几个。但是那封邮件让我觉得世界上这样的用户多了起来，这个几个月没有变化的项目是时候去动一下了。我重新考虑了形码输入法是不是值得 去学，认为不用选词、两个键一个字、不用按空格确认的双拼肯定比形码快不少。至于云服务器识别错误的汉字，我想到了微软拼音的“纠正”功能，一种不会打扰正常输入而提供纠正错字的办法。于是我决定在寒假期间实现这些想法，并放弃学习形码输入法。 说到微软拼音，我一直觉得它是输入法界最有技术含量、最规范的。它规范到了不愿意接受网络词汇（2010版本之前），就让其它的拼音输入法有了可乘 之机。微软拼音的整句输入感觉很舒服，输入完拼音之后，不用多余的空格确认，可以按一个标点，表示确认输入并加上这个标点。写 ibus-sogoupycc 的时候我参照了微软拼音的一些行为，比如：选中文字后，可以将文字转换回会拼音，再开始选词，用于纠正错字；使用双拼的时候，屏幕显示的是全拼的提示。 主流拼音输入法需要用数字键选词，而数字键按起来不方便，这就有了用空格， Ctrl，Alt 等键来选词的特殊需求。那么如果用 asdfjkl 来选词，不就会更好吗？ ibus-sogoupycc 默认就是这样，为了区分需选词按键和拼音按键，输入完拼音后需要按下 Tab 键，才开始选词，用 h 和 g 键翻页。 没想到，真正开始写程序之后，很快就进入了令人寝食难安的调试周。程序似乎在各个地方都能出错，在我的代码外。使用了各种正道歪道，无济于事。多线 程程序，你也许是有体会的。几天后实在找不到原因，就在 ibus-devel 讨论组提问，感谢 P.Huang ，我知道了像 glib 和 dubs 这样的东西并不愿意知道目前运行的程序是多线程的，你需要调用它们的函数通知一下才可以。相比之下 glibc 就很听话，使用 `-pthread` 编译参数就可以使得大量的 glibc 调用变成可重入的版本。 [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://lihdd.net/wp-content/uploads/2010/03/miss_you_suddenly_mv-may_day.png"><img
class="alignright size-full wp-image-323" title="miss_you_suddenly_mv-may_day" src="http://lihdd.net/wp-content/uploads/2010/03/miss_you_suddenly_mv-may_day.png" alt="miss_you_suddenly_mv-may_day" width="120" height="103" /></a>五月天的 “突然好想你” MV 中的有两段对着屏幕录的输入中文的过程，看起来输入很方便，由此，我对台湾的输入法产生了兴趣。</p><p>由于天之痕而喜欢上轩辕剑系列的我，在云之遥上市之后，看着<a
href="http://zh-tw.justin.tv/nagisa36605">台湾玩家</a>慢慢地通关，和他们聊起了输入法，被告知<a
href="http://boshiamy.com/">无虾米输入法</a>目 前是超过新仓颉，最流行，最好学，最快的输入法，连幼儿园小朋友都在学。<span
id="more-322"></span></p><p>难以想象把注音、字形、英文单词混合编码的输入法是什么样子，但无虾米输入法就是这样的输入法，它还是拥有 Windows 98  时代的灰色界面，并收费的繁体世界最流行的输入法。我尝试练习一段时间之后，聚精会神地输入最基本的字根的速度只有双拼的四分之一，又由于繁体字和简体字 有很大区别，注音和拼音也有区别，决定放弃无虾米。</p><p>拼音类的输入法的通病，重码很多，一不留神就会输入错字。我想去尝试一些其他的形码输入法。简体的形码输入，比较流行的就是五笔和郑码，虽然似乎五 笔的名气大一些，但是郑码看起来更加好，我决定在寒假期间学会它。</p><p>世事万变，突然有一天，我收到一用户的邮件，其中提到了对 <a
href="http://code.google.com/p/ibus-sogoupycc/">ibus-sogoupycc</a> 的建议，还指出了几处错误。本来觉得用 Linux 的人就很少了，用双拼的人就更少了，同时使用 Linux、双拼，还要是 ibus  的用户也许就只有十几个。但是那封邮件让我觉得世界上这样的用户多了起来，这个几个月没有变化的项目是时候去动一下了。我重新考虑了形码输入法是不是值得 去学，认为不用选词、两个键一个字、不用按空格确认的双拼肯定比形码快不少。至于云服务器识别错误的汉字，我想到了微软拼音的“纠正”功能，一种不会打扰正常输入而提供纠正错字的办法。于是我决定在寒假期间实现这些想法，并放弃学习形码输入法。</p><div
id="attachment_327" class="wp-caption aligncenter" style="width: 400px"><a
href="http://lihdd.net/wp-content/uploads/2010/03/ibus-sogoupycc-demo.gif"><img
class="size-full wp-image-327" title="ibus-sogoupycc-demo" src="http://lihdd.net/wp-content/uploads/2010/03/ibus-sogoupycc-demo.gif" alt="ibus-sogoupycc-demo" width="390" height="124" /></a><p
class="wp-caption-text">不用选词的双拼</p></div><p>说到微软拼音，我一直觉得它是输入法界最有技术含量、最规范的。它规范到了不愿意接受网络词汇（2010版本之前），就让其它的拼音输入法有了可乘 之机。微软拼音的整句输入感觉很舒服，输入完拼音之后，不用多余的空格确认，可以按一个标点，表示确认输入并加上这个标点。写  ibus-sogoupycc   的时候我参照了微软拼音的一些行为，比如：选中文字后，可以将文字转换回会拼音，再开始选词，用于纠正错字；使用双拼的时候，屏幕显示的是全拼的提示。</p><p>主流拼音输入法需要用数字键选词，而数字键按起来不方便，这就有了用空格， Ctrl，Alt 等键来选词的特殊需求。那么如果用 asdfjkl  来选词，不就会更好吗？ ibus-sogoupycc 默认就是这样，为了区分需选词按键和拼音按键，输入完拼音后需要按下 Tab  键，才开始选词，用 h 和 g 键翻页。</p><p><a
href="http://lihdd.net/wp-content/uploads/2010/03/ibus-sogoupycc.png"><img
class="alignright size-full wp-image-324" title="ibus-sogoupycc" src="http://lihdd.net/wp-content/uploads/2010/03/ibus-sogoupycc.png" alt="ibus-sogoupycc" width="48" height="48" /></a>没想到，真正开始写程序之后，很快就进入了令人寝食难安的调试周。程序似乎在各个地方都能出错，在我的代码外。使用了各种正道歪道，无济于事。多线 程程序，你也许是有体会的。几天后实在找不到原因，就在 ibus-devel 讨论组提问，感谢 P.Huang ，我知道了像 glib 和  dubs 这样的东西并不愿意知道目前运行的程序是多线程的，你需要调用它们的函数通知一下才可以。相比之下 glibc 就很听话，使用  `-pthread` 编译参数就可以使得大量的 glibc 调用变成可重入的版本。</p><p>让我好几天辗转反复的问题居然就这样添加两个函数调用解决了，虽不甘心，但确实可以继续做下去了。寒假最后的两天，原来以为会比较难做的通过外部词 库选词，实际上比较容易就完成了。2月27日，我在<a
href="http://code.google.com/p/ibus-sogoupycc/downloads/">项目的  Download 页</a>放上了 0.1.0 的版本以及 Archlinux 用的安装包，更新了许多 wiki  页。但是随后我自己就发现了几个问题，不乏有低级错误。2月28日，我的一个好朋友过生日的这一天，我修正了我自己发现的那些问题，并通过测试，确保没有 问题。把版本更新到了 0.1.1 ，更新了 wiki 页。至此，我觉得是比较好了。</p><p>以前，用 Windows 的时候总是感觉到输入法比 Linux 好太多了，现在感觉倒过来了 <img
src='http://lihdd.net/wp-includes/images/smilies/happy.png' alt='(:' class='wp-smiley' /></p> ]]></content:encoded> <wfw:commentRss>http://lihdd.net/my-work-on-ibus-sogoupycc/feed/</wfw:commentRss> <slash:comments>25</slash:comments> </item> <item><title>云中的搜狗,云下的输入法</title><link>http://lihdd.net/sogou-cloud-on-ibus/</link> <comments>http://lihdd.net/sogou-cloud-on-ibus/#comments</comments> <pubDate>Thu, 05 Nov 2009 05:25:29 +0000</pubDate> <dc:creator>quark</dc:creator> <category><![CDATA[Coding]]></category> <category><![CDATA[ibus-sogoupycc]]></category> <category><![CDATA[ime]]></category> <category><![CDATA[sogou]]></category><guid
isPermaLink="false">http://lihdd.net/?p=277</guid> <description><![CDATA[前不久，搜狗官方公布了云输入法，简单的说就是把所有的拼音转换成汉字的工作都交给搜狗服务器来做，按照搜狗官方的说法，服务器的词库和速度都是个人计算机不能比的，当然效果会很不错，错字会比较少。实际使用感觉也十分好，让我想到了第一次用微软拼音输入法的时候，那种能够整句输入并且结果不错的兴奋的感觉 :-) 官方给出的云输入法是基于web页面的，只能在浏览器中使用，目前只支持全拼，在浏览器中一旦转移到其它页面，就需要重新加载一次输入法，用起来成本很高。检查后发现官方的云输入法客户端其实就是向服务器发送了明文的全拼字符串，然后服务器会返回一段js脚本，包含了候选结果，往往第一个结果就是所需的，确实识别结果不错。Linux下的各种拼音输入法都没有Windows平台下的好用，既然搜狗云输入法是这样简单的AJAX请求，那么能不能包装一下它，让它在其他的地方也能用呢? 之前对ibus的示例代码有印象，觉得在ibus上面开发输入法比较简单，而且ibus这个平台看起来很可靠的样子，于是就开始动手了，这次从一开始就决定用C来写，写到中间的时候发现真的是自找麻烦 :-( ，许多数据结构如果用C++的话就容易多了，也免去了考虑内存泄漏等各种问题。 我用输入法的话，肯定是用双拼的了，于是就先去找双拼的代码，关于双拼，其实我以前已经写过几份了，在目前的本本上能找到的版本就是有一次修改sun-pinyin让它支持双拼的时候，那时的代码是为了达到目的而不择手段的，使用if else硬编码了所有的双拼组合，不仅看起来惨不忍睹，时间复杂度想来也不好。这次改用C语言的OO写法写了双拼的一个类，使用动态构造的简单的trie大幅提高查询速度。这里还用了char **[]这样的数据类型，写完后用pluskid上次在小课堂上介绍的valgrind检查内存发现没有泄漏，比较高兴 :-) 但是并不是所有地方都是这样顺利的，输入法的最麻烦的地方是对用户按键事件的处理，确实有很多很多情况，稍不注意就会出问题，确实在这个地方调试了不少时间，而且在这里改代码，改正一个问题的时候很容易产生新的问题 。为了让用户在服务器没有返回结果的时候还能继续输入，我使用了多线程去从服务器获取结果，为了数据完整，我在所有写操作的地方都简单地使用了锁，第一次写这样的多线程程序，死锁了几次，后来熟悉起来就没有再犯错误 :-) 当我写的差不多的时候，升级到了ibus 1.2版本，这个版本和我开发使用的1.1版本接口不一样，似乎改动的地方文档不全的样子，我只好又改成了1.2版本使用的代码，不过由此也产生了各种问题，可能到现在都还存在。 虽然自己发现目前的程序还会在某些时候不知道为什么而垮掉，而且似乎还有各种已知和未知的小问题 但我觉得基本功能已经不错，可以拿出去分享一下了，就放在了这里，也许能够交几个朋友或者是收到比较不错的建议呢 目前的情况在上面的项目主页有介绍，程序的主要特点就是多线程，用户输入无阻塞，以及支持双拼（到底有多少人用双拼啊，可怜的孤独的我&#8230; -.- ），没有选词功能，始终采用服务器返回的第一个结果，这样其实在鼓励用户不要去选词，少按空格确认输入的拼音，因为标点符号就附带有这样的效果(和微软拼音一样)，用户可以流畅而义无反顾地输入整句的拼音，不因为实际出现的汉字而打扰思考 :-) 如果网络流畅的话，实际体验是很不错的： 在网络条件不好的地方，应该也是不错的吧，我模拟的网络延迟比较大的情况，大概会是这样的情况： 如果搜狗官方可以持续做这个项目并且不把接口改得没法看懂的话，这个项目还可以继续做下去，继续做的话有两个功能可以加上:第一个是输入一个字的话就不经由服务器了，这时候给出本地的符合要求的所有汉字列表，这样可以解决生僻字输入问题，也对个别汉字纠错提供方便。第二个是缓存一些比较短的词语，再次输入的时候可以使用缓存的数据(不过用云输入的话基本都是整句输入，不会缓存到许多数据的吧 ) 这篇日志的前面500字就是用ibus-sogoupycc在无线网上写的，除了个别时候出现网络错误之外，确实是几乎没有错字(5个左右吧)，后面由于网络条件太差改用普通的拼音输入法了，明显感觉到正确识别率低了许多许多 总之,现在的情况还是多谢搜狗官方啊,希望这项服越做越好,可以一直用下去 ]]></description> <content:encoded><![CDATA[<p><a
href="http://lihdd.net/wp-content/uploads/2009/11/ibus-sogoupycc.png"><img
class="alignright size-full wp-image-278" title="ibus-sogoupycc" src="http://lihdd.net/wp-content/uploads/2009/11/ibus-sogoupycc.png" alt="ibus-sogoupycc" width="48" height="48" /></a>前不久，搜狗官方公布了<a
title="搜狗云输入法" href="http://pinyin。sogou。com/cloud/" target="_blank">云输入法</a>，简单的说就是把所有的拼音转换成汉字的工作都交给搜狗服务器来做，按照搜狗官方的说法，服务器的词库和速度都是个人计算机不能比的，当然效果会很不错，错字会比较少。实际使用感觉也十分好，让我想到了第一次用微软拼音输入法的时候，那种能够整句输入并且结果不错的兴奋的感觉  :-)</p><p>官方给出的云输入法是基于web页面的，只能在浏览器中使用，目前只支持全拼，在浏览器中一旦转移到其它页面，就需要重新加载一次输入法，用起来成本很高。检查后发现官方的云输入法客户端其实就是向服务器发送了明文的全拼字符串，然后服务器会返回一段js脚本，包含了候选结果，往往第一个结果就是所需的，确实识别结果不错。Linux下的各种拼音输入法都没有Windows平台下的好用，既然搜狗云输入法是这样简单的AJAX请求，那么能不能包装一下它，让它在其他的地方也能用呢? <img
src='http://lihdd.net/wp-includes/images/smilies/icon_rolleyes.gif' alt=':roll:' class='wp-smiley' /> <span
id="more-277"></span></p><p>之前对<a
title="ibus project home" href="http://code.google.com/p/ibus/" target="_blank">ibus</a>的示例代码有印象，觉得在ibus上面开发输入法比较简单，而且ibus这个平台看起来很可靠的样子，于是就开始动手了，这次从一开始就决定用C来写，写到中间的时候发现真的是自找麻烦  :-( ，许多数据结构如果用C++的话就容易多了，也免去了考虑内存泄漏等各种问题。</p><p>我用输入法的话，肯定是用双拼的了，于是就先去找双拼的代码，关于双拼，其实我以前已经写过几份了，在目前的本本上能找到的版本就是有一次修改sun-pinyin让它支持双拼的时候，那时的代码是为了达到目的而不择手段的，使用if else硬编码了所有的双拼组合，不仅看起来惨不忍睹，时间复杂度想来也不好。这次改用C语言的OO写法写了双拼的一个类，使用动态构造的简单的trie大幅提高查询速度。这里还用了<code>char **[]</code>这样的数据类型，写完后用<a
title="Free Mind of pluskid" href="http://blog.pluskid.org/" target="_blank">pluskid</a>上次在<a
title="MSTC 小课堂之 C 语言调试技术" href="http://blog.pluskid.org/?p=403" target="_blank">小课堂</a>上介绍的valgrind检查内存发现没有泄漏，比较高兴  :-)</p><p>但是并不是所有地方都是这样顺利的，输入法的最麻烦的地方是对用户按键事件的处理，确实有很多很多情况，稍不注意就会出问题，确实在这个地方调试了不少时间，而且在这里改代码，改正一个问题的时候很容易产生新的问题 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_confused.gif' alt=':-?' class='wp-smiley' /> 。为了让用户在服务器没有返回结果的时候还能继续输入，我使用了多线程去从服务器获取结果，为了数据完整，我在所有写操作的地方都简单地使用了锁，第一次写这样的多线程程序，死锁了几次，后来熟悉起来就没有再犯错误 :-) 当我写的差不多的时候，升级到了ibus 1.2版本，这个版本和我开发使用的1.1版本接口不一样，似乎改动的地方文档不全的样子，我只好又改成了1.2版本使用的代码，不过由此也产生了各种问题，可能到现在都还存在。</p><p>虽然自己发现目前的程序还会在某些时候不知道为什么而垮掉，而且似乎还有各种已知和未知的小问题 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_redface.gif' alt=':oops:' class='wp-smiley' /> 但我觉得基本功能已经不错，可以拿出去分享一下了，就放在了<a
title="ibus-sogoupycc" href="http://code.google.com/p/ibus-sogoupycc/">这里</a>，也许能够交几个朋友或者是收到比较不错的建议呢 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /></p><p>目前的情况在上面的项目主页有介绍，程序的主要特点就是多线程，用户输入无阻塞，以及支持双拼（到底有多少人用双拼啊，可怜的孤独的我&#8230; -.- ），没有选词功能，始终采用服务器返回的第一个结果，这样其实在鼓励用户不要去选词，少按空格确认输入的拼音，因为标点符号就附带有这样的效果(和微软拼音一样)，用户可以流畅而义无反顾地输入整句的拼音，不因为实际出现的汉字而打扰思考 :-) 如果网络流畅的话，实际体验是很不错的：</p><div
id="attachment_280" class="wp-caption aligncenter" style="width: 268px"><a
href="http://lihdd.net/wp-content/uploads/2009/11/ibus-sogoupycc-demo.gif"><img
class="size-full wp-image-280" title="ibus-sogoupycc-demo" src="http://lihdd.net/wp-content/uploads/2009/11/ibus-sogoupycc-demo.gif" alt="网络比较流畅的情况下输入法的表现" width="258" height="33" /></a><p
class="wp-caption-text">网络比较流畅的情况</p></div><p>在网络条件不好的地方，应该也是不错的吧，我模拟的网络延迟比较大的情况，大概会是这样的情况：</p><div
id="attachment_279" class="wp-caption aligncenter" style="width: 310px"><a
href="http://lihdd.net/wp-content/uploads/2009/11/ibus-sogoupycc-slow-network-demo.gif"><img
class="size-full wp-image-279" title="ibus-sogoupycc-slow-network-demo" src="http://lihdd.net/wp-content/uploads/2009/11/ibus-sogoupycc-slow-network-demo.gif" alt="网络延迟明显的情况下输入法的表现" width="300" height="102" /></a><p
class="wp-caption-text">网络延迟明显(模拟)的情况</p></div><p>如果搜狗官方可以持续做这个项目并且不把接口改得没法看懂的话，这个项目还可以继续做下去，继续做的话有两个功能可以加上:第一个是输入一个字的话就不经由服务器了，这时候给出本地的符合要求的所有汉字列表，这样可以解决生僻字输入问题，也对个别汉字纠错提供方便。第二个是缓存一些比较短的词语，再次输入的时候可以使用缓存的数据(不过用云输入的话基本都是整句输入，不会缓存到许多数据的吧 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_eek.gif' alt='8-O' class='wp-smiley' /> )</p><p>这篇日志的前面500字就是用ibus-sogoupycc在无线网上写的，除了个别时候出现网络错误之外，确实是几乎没有错字(5个左右吧)，后面由于网络条件太差改用普通的拼音输入法了，明显感觉到正确识别率低了许多许多 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_neutral.gif' alt=':-|' class='wp-smiley' /></p><p>总之,现在的情况还是多谢搜狗官方啊,希望这项服越做越好,可以一直用下去  <img
src='http://lihdd.net/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /></p> ]]></content:encoded> <wfw:commentRss>http://lihdd.net/sogou-cloud-on-ibus/feed/</wfw:commentRss> <slash:comments>17</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: lihdd.net @ 2012-05-19 15:09:50 -->
