<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>wujian_hit (wj)</title>
    <link>https://ruby-china.org/wujian_hit</link>
    <description>腐男coder</description>
    <language>en-us</language>
    <item>
      <title>nohup rvm ruby 不知为何不能运行</title>
      <description>&lt;p&gt;sce.sh:&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="nb"&gt;source&lt;/span&gt; /home/admin/.rvm/environments/ruby-2.1.2@rails4

ruby /export/Data/wj/schedule/update_middle_page_mediaid.rb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;nohup sh sce.sh &amp;amp;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;显示挂起了 job，但是 .rb 中写入 file 并未成功。&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Thu, 13 Nov 2014 01:41:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/22637</link>
      <guid>https://ruby-china.org/topics/22637</guid>
    </item>
    <item>
      <title>iOS 自带邮件客户端 正文如何加入锚点？</title>
      <description>&lt;p&gt;rt。
类似于 &lt;a href="#tab0"&gt;tab0&lt;/a&gt; 这种 html 会在邮件正文中被 ios 解析成 url，点击它直接跳到浏览器，这样子无法进行邮件正文导航的页面滚动。&lt;/p&gt;

&lt;p&gt;求问各位大神，有没有解决方案。公司副总裁用 iphone 看邮件报表，说有这个问题。难倒了我们一众开发。&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Wed, 29 Oct 2014 23:24:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/22346</link>
      <guid>https://ruby-china.org/topics/22346</guid>
    </item>
    <item>
      <title>JAXB 比起 Nokogiri 真是太难用了。。。</title>
      <description>&lt;p&gt;在 ruby 下被 Nokogiri 惯坏的孩子，换成 JAVA 用 JAXB 解 xml 真是累觉不爱。JAVA 真是太不舒服了。&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Tue, 14 Oct 2014 20:29:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/22042</link>
      <guid>https://ruby-china.org/topics/22042</guid>
    </item>
    <item>
      <title>Ruby 很小众吗？今天被同事说 Ruby 很小众，几乎没未来。</title>
      <description>&lt;p&gt;毕业后，进入了一家公司做大数据统计分析。中午闲聊，同事如此说，让我很不爽。&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Mon, 28 Jul 2014 15:11:02 +0800</pubDate>
      <link>https://ruby-china.org/topics/20713</link>
      <guid>https://ruby-china.org/topics/20713</guid>
    </item>
    <item>
      <title>中文分词 gem－nlpir 已与 ICTCLAS2014 同步，所有 bug 均已修复。</title>
      <description>&lt;p&gt;nlpir 使用 ruby2.0 fiddle 模块封装，最新版本 1.0.0 封装自 ICTCLAS2014 最新版本，完美支持 linux x86 x64，之前反应的用户词典 bug 已经修复。并且，新版的 gem 提供了 ruby 风格的函数，使用更简单。
&lt;a href="http://ruby-china.org/topics/12872" title=""&gt;旧贴已更新&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/JoeWoo/nlpir" rel="nofollow" target="_blank" title=""&gt;nlpir@github&lt;/a&gt;
&lt;a href="https://rubygems.org/gems/nlpir" rel="nofollow" target="_blank" title=""&gt;nlpir@rubygems&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;欢迎使用～！&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Thu, 03 Apr 2014 12:00:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/18360</link>
      <guid>https://ruby-china.org/topics/18360</guid>
    </item>
    <item>
      <title>gem push 这次用 goagent 都不管用。。。</title>
      <description>&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$:&lt;/span&gt; &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;http_proxy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;127.0.0.1:8087
&lt;span class="nv"&gt;$:&lt;/span&gt; gem push xxx.gem

ERROR:  While executing gem ... &lt;span class="o"&gt;(&lt;/span&gt;Gem::RemoteFetcher::FetchError&lt;span class="o"&gt;)&lt;/span&gt;
    too many connection resets &lt;span class="o"&gt;(&lt;/span&gt;https://rubygems.org/api/v1/gems&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;无语，求助啊！！&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Wed, 02 Apr 2014 20:21:48 +0800</pubDate>
      <link>https://ruby-china.org/topics/18350</link>
      <guid>https://ruby-china.org/topics/18350</guid>
    </item>
    <item>
      <title>写了一个中文词语语义相似度分析的 gem－tyccl (基于同义词词林)</title>
      <description>&lt;h2 id="中文词语语义相似度分析gem——Tyccl"&gt;中文词语语义相似度分析 gem——Tyccl&lt;/h2&gt;
&lt;p&gt;感谢&lt;a href="/billy" class="user-mention" title="@billy"&gt;&lt;i&gt;@&lt;/i&gt;billy&lt;/a&gt; &lt;a href="/luikore" class="user-mention" title="@luikore"&gt;&lt;i&gt;@&lt;/i&gt;luikore&lt;/a&gt; 提出的宝贵意见 已将实现方式更改为类方法，谢谢！&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/JoeWoo/tyccl" rel="nofollow" target="_blank" title=""&gt;Tyccl on github&lt;/a&gt; and &lt;a href="http://rubygems.org/gems/tyccl" rel="nofollow" target="_blank" title=""&gt;Tyccl on rubygem&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;词表和分析基础为同义词词林（哈工大扩展版）&lt;/p&gt;
&lt;h2 id="功能简介："&gt;功能简介：&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;获取任意两个词语的语义距离（distance）&lt;/li&gt;
&lt;li&gt;获取任意两个词语的相似度（sim 值）&lt;/li&gt;
&lt;li&gt;获取任意词语的同义词、近义词（同义扩展）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="性能分析："&gt;性能分析：&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;查找算法使用 Trie 树和 Hash, 时间复杂度为 O(n)，n&amp;lt;=5&lt;/li&gt;
&lt;li&gt;Tyccl 在定义类时就已初始化，所有方法均为类方法&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="使用方法："&gt;使用方法：&lt;/h2&gt;
&lt;p&gt;$ gem install tyccl&lt;br&gt;
一个简单的例子：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;
&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt; &lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'tyccl'&lt;/span&gt;

    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Tyccl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"西红柿"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"黄瓜"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="c1"&gt;# =&amp;gt; #&amp;lt;struct Result_t value=2, x_id="Bh06A32=", y_id="Bh06A34="&amp;gt;&lt;/span&gt;
     &lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt; &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;value&lt;/span&gt;
     &lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt; &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;x_id&lt;/span&gt;
     &lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt; &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;y_id&lt;/span&gt;

&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt;  &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Tyccl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"西红柿"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"黄瓜"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; #&amp;lt;struct Result_t value=0.42891, x_id="Bh06A32=", y_id="Bh06A34="&amp;gt;&lt;/span&gt;
     &lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt; &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;value&lt;/span&gt;
     &lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt; &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;x_id&lt;/span&gt;
     &lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt; &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;y_id&lt;/span&gt;

    &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Tyccl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_similar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"人"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt;
    &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;
    &lt;span class="c1"&gt;#[  ["人", "士", "人物", "人士", "人氏", "人选"],&lt;/span&gt;
&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt;  &lt;span class="c1"&gt;#   ["成年人", "壮年人", "大人", "人", "丁", "壮丁", "佬", "中年人"],&lt;/span&gt;
&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt;  &lt;span class="c1"&gt;#   ["身体", "人"],&lt;/span&gt;
&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt;  &lt;span class="c1"&gt;#   ["人格", "人品", "人头", "人", "品质", "质地", "格调", "灵魂", "为人"],&lt;/span&gt;
&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt;  &lt;span class="c1"&gt;#   ["人数", "人头", "人口", "人", "口", "丁", "家口", "食指", "总人口"]    ]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;gem 提供更多 methods 请参见&lt;a href="https://github.com/JoeWoo/tyccl/tree/master/doc" rel="nofollow" target="_blank" title=""&gt;tyccl api doc&lt;/a&gt;&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Fri, 24 Jan 2014 22:41:11 +0800</pubDate>
      <link>https://ruby-china.org/topics/16977</link>
      <guid>https://ruby-china.org/topics/16977</guid>
    </item>
    <item>
      <title>如何让 gem push 快一些啊？慢死，对大墙简直无语。</title>
      <description>&lt;p&gt;如题。&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Wed, 04 Dec 2013 13:00:23 +0800</pubDate>
      <link>https://ruby-china.org/topics/15988</link>
      <guid>https://ruby-china.org/topics/15988</guid>
    </item>
    <item>
      <title>天了噜，heroku 让我升级到 2 x dony。。。</title>
      <description>&lt;p&gt;如题，webapp 在跑了 30 天之后被 halt 了。。。
这个 app 只是提供一个 webservice，实验室内部用。。。
不想交钱。。。怎么办？&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Fri, 18 Oct 2013 20:53:13 +0800</pubDate>
      <link>https://ruby-china.org/topics/14849</link>
      <guid>https://ruby-china.org/topics/14849</guid>
    </item>
    <item>
      <title>哈工大 LTP-Cloud 提供自然语言处理服务的 ruby 接口</title>
      <description>&lt;h4 id="哈工大LTP-Cloud"&gt;&lt;a href="http://ltp-cloud.com/" rel="nofollow" target="_blank" title=""&gt;哈工大 LTP-Cloud&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;语言云（语言技术平台云 LTP-Cloud）是由哈工大社会计算与信息检索研究中心研发的云端自然语言处理服务平台。后端依托于语言技术平台，语言云为用户提供了包括 &lt;strong&gt;分词&lt;/strong&gt; 、 &lt;strong&gt;词性标注&lt;/strong&gt; 、 &lt;strong&gt;依存句法分析&lt;/strong&gt; 、 &lt;strong&gt;命名实体识别&lt;/strong&gt; 、 &lt;strong&gt;语义角色标注&lt;/strong&gt; 在内的丰富高效的自然语言处理服务。&lt;/p&gt;

&lt;p&gt;语言云已经提供了包括 C++，Java，C#，Python，&lt;a href="http://ltp-cloud.com/document/#api2_ruby" rel="nofollow" target="_blank" title=""&gt;Ruby&lt;/a&gt;在内的客户端，其他编程语言的客户端也在开发之中。&lt;/p&gt;

&lt;p&gt;语言技术平台面向国内外大学、中科院各研究所以及个人研究者免费开放源代码，但如上述机构和个人将该平台用于商业目的（如企业合作项目等）则需要付费。  &lt;/p&gt;

&lt;p&gt;====&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;语言技术平台（Language Technology Platform，LTP）是哈工大社会计算与信息检索研究中心历时十年研制的一整套开放中文自然语言处理系统。 LTP制定了基于XML的语言处理结果表示，并在此基础上提供了一整套自底向上的丰富、高效、高精度的中文自然语言处理模块 （包括词法、句法、语义等5项中文处理核心技术，在多次国内外技术评测中获得优异成绩， 特别是获得CoNLL 2009国际句法和语义分析联合评测的第一名），应用程序接口，可视化工具，以及能够以网络服务使用的语言技术云。 学术版LTP已共享给500多家研究机构免费使用，百度、腾讯、华为、金山等企业付费使用LTP商业版本。 2010年，LTP荣获行业最高奖--“钱伟长中文信息处理科学技术一等奖”。
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Wed, 11 Sep 2013 12:18:45 +0800</pubDate>
      <link>https://ruby-china.org/topics/14032</link>
      <guid>https://ruby-china.org/topics/14032</guid>
    </item>
    <item>
      <title>通过分析 GitHub 获得你的工作习惯和偏好</title>
      <description>&lt;p&gt;今天在微博上看到有人分享的  &lt;a href="http://osrc.dfm.io/" rel="nofollow" target="_blank"&gt;http://osrc.dfm.io/&lt;/a&gt;  分析 GitHub 的数据获得你的工作习惯和偏好。&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Tue, 10 Sep 2013 14:22:28 +0800</pubDate>
      <link>https://ruby-china.org/topics/14003</link>
      <guid>https://ruby-china.org/topics/14003</guid>
    </item>
    <item>
      <title>使用 ruby::fiddle 封装动态链接库</title>
      <description>&lt;p&gt;environment require: ruby2.0.0 &amp;amp; libffi&lt;/p&gt;

&lt;p&gt;在 ruby2.0.0 中 stdlib 里内置了 fiddle。fiddle 是 ruby 语言用来包装其他语言函数接口的一个扩展。fiddle is based on libffi，libffi 是一个非常流行的 c 库，它允许用一种语言代码包装另一语言的接口，实现跨语言的调用。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. 环境准备&lt;/strong&gt;
Linux 下初次使用 fiddle 需要安装 libffi_dev&lt;br&gt;
Windows 下只要在安装 ruby 时勾选安装 DevKit 就可以使用  &lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;libffi_dev
rvm reinstall 2.0.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;2. 一个简单的例子调用&lt;code&gt;/lib/i386-linux-gnu/libm.so.6&lt;/code&gt;中的 floor 函数&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;函数原型：&lt;code&gt;double floor(double)&lt;/code&gt;&lt;br&gt;
ruby 包装：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'fiddle'&lt;/span&gt;
&lt;span class="n"&gt;libm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dlopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/lib/i386-linux-gnu/libm.so.6'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;floor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;libm&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'floor'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;TYPE_DOUBLE&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;TYPE_DOUBLE&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;#使用&lt;/span&gt;
&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;3.14159&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;3. 代码解释&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Fiddle.dlopen(#{Path})&lt;/code&gt;，与 c 中调用动态链接库方法名相同 dlopen&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Fiddle::Function.new(函数名，参数，返回值)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;多个参数则：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;so&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dlopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'×××.so'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;so&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'funcname'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;TYPE_DOUBLE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;TYPE_INT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;TYPE_VOIDP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;TYPE_CHAR&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;

     &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;TYPE_VOIDP&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Fiddle 中定义了 C 对应的数据类型&lt;code&gt;TYPE_CHAR，TYPE_INT，TYPE_FLOAT，TYPE_DOUBLE，TYPE_LONG&lt;/code&gt;，布尔型和 int 型相同，指针则一律使用&lt;code&gt;TYPE_VOIDP&lt;/code&gt;,结构体、共用体也有对应的类可供使用。详见：&lt;a href="http://www.ruby-doc.org/stdlib-2.0/libdoc/fiddle/rdoc/Fiddle.html" rel="nofollow" target="_blank" title=""&gt;ruby-rdoc-Fiddle 文档&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.  写一个相对复杂的例子 (结构体、内存操作)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;c 语言中我们经常会动态 malloc 内存，甚至有时会组织返回一块内存，来实现大块数据的返回和传递，现在有一段 c 语言实现：&lt;/p&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;st_term&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;detail&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;used&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;term&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;term&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;get_terms&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;strlength&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="n"&gt;term&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;pterm&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;strlength&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;term&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;term&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;pterm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;pterm&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;......&lt;/span&gt;
        &lt;span class="n"&gt;pterm&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; 

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;函数&lt;code&gt;get_terms&lt;/code&gt;传入一个字符串 string，和一个&lt;code&gt;int* strlength&lt;/code&gt;，返回一块内存，这块内存里顺序放着一个个结构体 term，每一个 term 里放着函数处理后的结果。现在我们用 ruby 来封装这个函数。为了便于 ruby 操作，我们将返回的这块内存封装成一个 array，array 中的元素是一个一个的 term 结构体。注意：传入的两个参数都是指针，第一个&lt;code&gt;char*&lt;/code&gt;型我们可以直接传入一个 ruby 的 string 类即可，第二个&lt;code&gt;int*&lt;/code&gt;则需要我们手工进行包装，将一个 Fixnum 类转变为一个&lt;code&gt;int*&lt;/code&gt;，&lt;code&gt;int*&lt;/code&gt;其实就是一个内存地址。&lt;/p&gt;

&lt;p&gt;1.定义结构体&lt;br&gt;
2.提取链接库接口&lt;br&gt;
3.定义 ruby 函数&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'fiddle'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'fiddle/struct'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'fiddle/import'&lt;/span&gt;
&lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;CParser&lt;/span&gt;
&lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Importer&lt;/span&gt;

&lt;span class="c1"&gt;###结构体定义&lt;/span&gt;
 &lt;span class="n"&gt;term&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s1"&gt;'int id'&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="s1"&gt;'int weight'&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="s1"&gt;'float  detail[5]'&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="s1"&gt;'char used'&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;###打开链接库&lt;/span&gt;
 &lt;span class="n"&gt;lib&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dlopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expand_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"./libname.so"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;###将链接库中的函数入口封装为Fiddle::Function型&lt;/span&gt;
 &lt;span class="n"&gt;get_terms_rb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;                                  
      &lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'get_terms'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;TYPE_VOIDP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;TYPE_VOIDP&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;TYPE_VOIDP&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;###对应的ruby函数&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_terms&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

     &lt;span class="c1"&gt;#获取传入第二个参数值 （字符串长度 Fixnum型）&lt;/span&gt;
    &lt;span class="n"&gt;resultCount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt;
     &lt;span class="c1"&gt;#将其类变为Pointer型   &lt;/span&gt;
    &lt;span class="n"&gt;pResultCount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Pointer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_ptr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resultCount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          

     &lt;span class="c1"&gt;#传参调用Fiddle::Function 返回值为c指针p（p的值为内存地址）&lt;/span&gt;
    &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_terms_rb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pResultCount&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="c1"&gt;#将c指针p变为Pointer型            &lt;/span&gt;
    &lt;span class="n"&gt;pVecResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Fiddle&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Pointer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                           
     &lt;span class="c1"&gt;#初始化一array&lt;/span&gt;
    &lt;span class="n"&gt;terms_list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt; 
     &lt;span class="c1"&gt;#将指向第一块term的Pointer压入array         &lt;/span&gt;
    &lt;span class="n"&gt;terms_list&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;term&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pVecResult&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;#后面详解term.new函数  &lt;/span&gt;

     &lt;span class="c1"&gt;#逐个压入指向剩余term的Pointer&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="n"&gt;resultCount&lt;/span&gt;  &lt;span class="k"&gt;do&lt;/span&gt;
          &lt;span class="c1"&gt;#Pointer向后移动一个term.size 大小&lt;/span&gt;
        &lt;span class="n"&gt;terms_list&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;term&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pVecResult&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;term&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;terms_list&lt;/span&gt;

&lt;span class="k"&gt;end&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;值得注意的是：term.new 这个函数，传入一个 Pointer 实例，返回一个 term 实例。功能是将这个 Pointer 包装成一个 term 结构体，就像 c 中&lt;code&gt;p=(term*)p&lt;/code&gt;将一个&lt;code&gt;char* p&lt;/code&gt;强制转化为&lt;code&gt;term*&lt;/code&gt;类型一样。这样就可以对这块内存，以 term 结构体的方式进行有关的操作了。比如通过 term.XXX 访问 term 的内的字段，具体使用看下面：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;#调用下get_terms&lt;/span&gt;
    &lt;span class="n"&gt;tempArray&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;get_terms&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"我爱你中国"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;tempArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;term&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"word_ID:&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;term&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ok, that`all~&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Tue, 30 Jul 2013 22:04:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/12919</link>
      <guid>https://ruby-china.org/topics/12919</guid>
    </item>
    <item>
      <title>中文分词 gem——nlpir for win 已发布</title>
      <description>&lt;p&gt;&lt;strong&gt;中文分词 gem——nlpir for windows 已发布&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ICTCLAS2013 windows 版库对用户词典功能支持较好，欢迎使用。&lt;/p&gt;

&lt;p&gt;该 gem 仍在 rubygems.org 的&lt;a href="https://rubygems.org/gems/nlpir" rel="nofollow" target="_blank" title=""&gt;nlpir&lt;/a&gt;下。&lt;/p&gt;

&lt;p&gt;使用方法见：&lt;a href="http://ruby-china.org/topics/12872" title=""&gt;nlpir 原帖&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/JoeWoo/nlpir_win" rel="nofollow" target="_blank" title=""&gt;nlpir_win@github&lt;/a&gt;&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Tue, 30 Jul 2013 12:37:02 +0800</pubDate>
      <link>https://ruby-china.org/topics/12899</link>
      <guid>https://ruby-china.org/topics/12899</guid>
    </item>
    <item>
      <title>写了一个中文分词的 gem——nlpir</title>
      <description>&lt;p&gt;&lt;strong&gt;nlpir gem 封装自中科院中文分词 ICTCLAS2014&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ICTCLAS 是由中国科学院计算技术研究所研发。功能包括中文分词；词性标注；命名实体识别；新词识别；同时支持用户词典。目前性能最好的中文分词工具。&lt;/p&gt;

&lt;p&gt;nlpir 使用 ruby2.0 fiddle 模块封装，最新版本 1.0.0 封装自 ICTCLAS2014 最新版本，完美支持 linux x86 x64，之前反应的用户词典 bug 已经修复。新版的 gem 提供了 ruby 风格的函数。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gem install nlpir&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="usage:"&gt;usage:&lt;/h2&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'nlpir'&lt;/span&gt;
&lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;Nlpir&lt;/span&gt;

&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"坚定不移沿着中国特色社会主义道路前进  为全面建成小康社会而奋斗"&lt;/span&gt;

&lt;span class="c1"&gt;#在当前文件夹路径下初始化&lt;/span&gt;
&lt;span class="n"&gt;nlpir_init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expand_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"../"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="no"&gt;UTF8_CODE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;#处理字符串&lt;/span&gt;
&lt;span class="n"&gt;text_proc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 

&lt;span class="c1"&gt;#处理文件&lt;/span&gt;
&lt;span class="n"&gt;file_proc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"example.txt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"result.txt"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 

&lt;span class="c1"&gt;#导入用户词典&lt;/span&gt;
&lt;span class="n"&gt;import_userdict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"./userdict.txt"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;text_proc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;nlpir_exit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;欢迎各位继续丰富 ruby 在自然语言处理领域的包&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/JoeWoo/nlpir/blob/master/README.md" rel="nofollow" target="_blank" title=""&gt;用法&lt;/a&gt; 和 &lt;a href="https://github.com/JoeWoo/nlpir/blob/master/test/test_nlpir.rb" rel="nofollow" target="_blank" title=""&gt;test 中的用法&lt;/a&gt;
&lt;a href="https://rubygems.org/gems/nlpir" rel="nofollow" target="_blank" title=""&gt;nlpir@rubygems.org&lt;/a&gt;
&lt;a href="https://github.com/JoeWoo/nlpir" rel="nofollow" target="_blank" title=""&gt;nlpir@github&lt;/a&gt;&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;有人问性能，官方文档里其实有测试数据，ICTCLAS 测试：&lt;/p&gt;

&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/45366d6cc8614aaa1ffa3656cd508424.png" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Mon, 29 Jul 2013 16:55:14 +0800</pubDate>
      <link>https://ruby-china.org/topics/12872</link>
      <guid>https://ruby-china.org/topics/12872</guid>
    </item>
    <item>
      <title>ruby gem 可不可以封装打包一个动态链接库？</title>
      <description>&lt;p&gt;如题，&lt;/p&gt;

&lt;p&gt;各位大神，我是 gem 小白，现在我的项目需要封装一个第三方的动态链接库，现在我有 linux 下的编译过的 so，和 windows 的 dll，&lt;code&gt;我想把这个封装成一个gem，请问这样是可行的吗？如果可行，私心想gem是跨平台的，那么是需要把所有平台的库都封装进去吗？&lt;/code&gt;&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Fri, 05 Jul 2013 23:05:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/12290</link>
      <guid>https://ruby-china.org/topics/12290</guid>
    </item>
    <item>
      <title>Ruby::Fiddle::Pointer 问题</title>
      <description>&lt;p&gt;各位大神，我在使用 ruby Fiddle 封装一个 C 库时，遇到一个问题。描述如下：&lt;/p&gt;

&lt;p&gt;我要封装如下一个函数：&lt;/p&gt;

&lt;p&gt;有一个 c source code 定义了结构体 A，还有一函数原型为：struct A* func(char*);&lt;br&gt;
函数中将处理后的多个结果保存在一个一个的结构体中，因此它 malloc 了一块大小为 n*sizeof(A) 的内存，最后它将指向这一大块内存的指针 p 返回 (p 的类型为 A*)。&lt;br&gt;
在 c 中使用时，用类型为 A*的指针遍历这块内存取出每个结构体中的结果数据即可。&lt;/p&gt;

&lt;p&gt;我使用了 Fiddle 中的 CStruct 定义了这个结构体 A，用一个变量接收到该函数的返回值，然后将该变量包装为一个 Fiddle::Pointer，现在的问题是，我如何让这个 Fiddle::Pointer 的类型变为 A*？然后读出指针指向内存中的内容。&lt;/p&gt;

&lt;p&gt;查了很久，网上关于 Fiddle 的文档和例程很少，Ruby 官方的文档给出的也不详细。希望能有朋友帮忙。&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Mon, 17 Jun 2013 22:43:05 +0800</pubDate>
      <link>https://ruby-china.org/topics/11793</link>
      <guid>https://ruby-china.org/topics/11793</guid>
    </item>
    <item>
      <title>Ruby::Fiddle::CStruct undefined method `[]'</title>
      <description>&lt;p&gt;我用 ruby2.0.0p0`s fiddle 类去封装一个c的 dll, 当我用 fiddle::CStruct 去封装一个C struct 的时候遇到了一个奇怪的问题。&lt;/p&gt;

&lt;p&gt;精简的代码如下：&lt;/p&gt;

&lt;p&gt;require "fiddle"
    require "fiddle/import"
    require 'fiddle/struct'&lt;/p&gt;

&lt;p&gt;types=[Fiddle::TYPE_INT,Fiddle::TYPE_INT]
    members = ["id","name"]&lt;/p&gt;

&lt;p&gt;MyStruct = Fiddle::CStructBuilder.create(Fiddle::CStruct, types, members)
    obj = MyStruct.allocate&lt;/p&gt;

&lt;p&gt;puts obj.methods
    puts obj.id&lt;/p&gt;

&lt;p&gt;我打印了 obj 的 methods, 结果包含了 id 和 id= 这两个方法，可当我调用 id或 id=方法时，它抛出了一个异常 "ruby-2.0.0-p0/lib/ruby/2.0.0/fiddle/struct.rb:59:in block (3 levels) in create': undefined method[]' for nil:NilClass (NoMethodError)" . 我不知道问题出在哪里。&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Tue, 07 May 2013 09:00:55 +0800</pubDate>
      <link>https://ruby-china.org/topics/10773</link>
      <guid>https://ruby-china.org/topics/10773</guid>
    </item>
    <item>
      <title>heroku error： You have Rails 2.3-style plugins</title>
      <description>&lt;p&gt;以前在 heroku 部署 rails3.2.12 从没遇到这种问题，昨天在部署应用时，heroku 报错&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: &lt;a href="http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released" rel="nofollow" target="_blank"&gt;http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released&lt;/a&gt;. (called from  at /app/config/environment.rb:8)&lt;/p&gt;

&lt;p&gt;app/vendor/bundle/ruby/1.9.1/gems/activesupport-    3.2.12/lib/active_support/dependencies.rb:317:in &lt;code&gt;rescue in depend_on': No such file to load -- spec_helper (LoadError)&lt;/code&gt;&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;然后在 stackoverflow 上发现这个解释：&lt;/p&gt;

&lt;p&gt;Response from Heroku:
    Lincoln, Jan 29 08:32 pm (PST):
    Hi, they are deprecated in 3.2, but will continue to function correctly until Rails 4.0 is released.
    We are aware of this and working on an updated system for this, no current ETA but I'd imagine definitely before 4.0 ships.
    Cheers, - Linc&lt;/p&gt;

&lt;p&gt;在本地跑没有任何问题。生产环境也使用了 pg。&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Tue, 26 Mar 2013 12:56:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/9756</link>
      <guid>https://ruby-china.org/topics/9756</guid>
    </item>
    <item>
      <title>Nokogiri 编码问题解决</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# encoding : utf-8&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'nokogiri'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'open-uri'&lt;/span&gt;

&lt;span class="c1"&gt;#example：baidu encoding：GB2312&lt;/span&gt;

&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"http://www.baidu.com/"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;
&lt;span class="n"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;Nokogiri&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;HTML&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;meta_encoding&lt;/span&gt;&lt;span class="c1"&gt;#！有些网页没有定义charset则不适用&lt;/span&gt;
&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;charset&lt;/span&gt;
&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;force_encoding&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;charset&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"utf-8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:undef&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ss"&gt;:replace&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:replace&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:invalid&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ss"&gt;:replace&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Nokogiri&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;HTML&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt;
&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者（个人推荐第二种，这个函数扫便天下）&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'rchardet19'&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;toUtf8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;cd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;CharDet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;detect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="c1"&gt;#用于检测编码格式  在gem rchardet9里&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;0.6&lt;/span&gt;
      &lt;span class="n"&gt;_string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;force_encoding&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encoding&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="n"&gt;_string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"utf-8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:undef&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ss"&gt;:replace&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:replace&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:invalid&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ss"&gt;:replace&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;_string&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;begin&lt;/span&gt;
   &lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Nokogiri&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;HTML&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;toUtf8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"http://www.baidu.com/"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
   &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;字符编码问题详解：unicode 编码，ruby1.8，ruby1.9 编码机制区别详解：
&lt;a href="http://about.ac/2012/06/understanding-m17n.html" rel="nofollow" target="_blank"&gt;http://about.ac/2012/06/understanding-m17n.html&lt;/a&gt;&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Wed, 21 Nov 2012 15:53:23 +0800</pubDate>
      <link>https://ruby-china.org/topics/6970</link>
      <guid>https://ruby-china.org/topics/6970</guid>
    </item>
    <item>
      <title>GUI——bowline 尝试失败，project dead，等待 bowline-team fixes</title>
      <description>&lt;p&gt;今天尝试了下 ruby 的 GUI 框架 bowline，结果无疾而终。bowline 貌似因为 ruby1.9 的原因出现了版本问题，在 bowline-bundle 时出现了 class type erorr。大家在 github 上报告的 issues——&lt;a href="https://github.com/maccman/bowline/issues?state=open" rel="nofollow" target="_blank"&gt;https://github.com/maccman/bowline/issues?state=open&lt;/a&gt;&lt;/p&gt;</description>
      <author>wujian_hit</author>
      <pubDate>Wed, 21 Nov 2012 12:57:38 +0800</pubDate>
      <link>https://ruby-china.org/topics/6962</link>
      <guid>https://ruby-china.org/topics/6962</guid>
    </item>
  </channel>
</rss>
