Gem 写了一个中文词语语义相似度分析的 gem-tyccl (基于同义词词林)

wujian_hit · 2014年01月24日 · 最后由 esseak 回复于 2014年02月27日 · 7158 次阅读
本帖已被管理员设置为精华贴

中文词语语义相似度分析 gem——Tyccl

感谢@billy @luikore 提出的宝贵意见 已将实现方式更改为类方法,谢谢!

Tyccl on github and Tyccl on rubygem

词表和分析基础为同义词词林(哈工大扩展版)

功能简介:

  • 获取任意两个词语的语义距离(distance)
  • 获取任意两个词语的相似度(sim 值)
  • 获取任意词语的同义词、近义词(同义扩展)

性能分析:

  • 查找算法使用 Trie 树和 Hash, 时间复杂度为 O(n),n<=5
  • Tyccl 在定义类时就已初始化,所有方法均为类方法

使用方法:

$ gem install tyccl
一个简单的例子:


  require 'tyccl'

    result = Tyccl.dist("西红柿","黄瓜") # => #<struct Result_t value=2, x_id="Bh06A32=", y_id="Bh06A34=">
       puts result.value
       puts result.x_id
       puts result.y_id

   result = Tyccl.sim("西红柿","黄瓜") # => #<struct Result_t value=0.42891, x_id="Bh06A32=", y_id="Bh06A34=">
       puts result.value
       puts result.x_id
       puts result.y_id

    m = Tyccl.get_similar("人")  
    puts m
    #[  ["人", "士", "人物", "人士", "人氏", "人选"],
   #   ["成年人", "壮年人", "大人", "人", "丁", "壮丁", "佬", "中年人"],
   #   ["身体", "人"],
   #   ["人格", "人品", "人头", "人", "品质", "质地", "格调", "灵魂", "为人"],
   #   ["人数", "人头", "人口", "人", "口", "丁", "家口", "食指", "总人口"]    ]

gem 提供更多 methods 请参见tyccl api doc

貌似很强大。不过不理解为什么要用 singleton 呢?API 不太友好的样子。用 class method 或者 instance 感觉会常见些。

怎么分析出来的,理解语意是很难的吧。不是完全基于词表吧

lz 再这方面一直很牛!👍

不错,只是 ruby 的 class 已经是 object 了,singleton 是个败笔... 楼主应该学学正确的面向对象写法,少用设计模式

#2 楼 @billy def self.method .... end 然后把初始化的代码直接放在类里。我懂了。

#5 楼 @luikore 好的。的确这样子 instance 让别人会有些困惑。马上改成类方法。

#3 楼 @hhuai 同义词林哈工大扩展版,收录了 7 万多个常用中文单词,并按照语义的上下位,近义同义,知识分类体系,为它们编码,成为一个非常大的树型结构。分析语义距离和语义相似度就是在这个大树上进行的。

好有趣的 gem :thumbsup:

10 楼 已删除
11 楼 已删除

最近可能会用到,感谢 lz。🙏

需要 登录 后方可回复, 如果你还没有账号请 注册新账号