Browse Source

Complete the document

chenhaiyang 4 years ago
parent
commit
4551dc06f7
1 changed files with 106 additions and 1 deletions
  1. 106 1
      README.md

+ 106 - 1
README.md

@@ -1,3 +1,108 @@
 # sim-dict
 
-短文本相似度
+## 简介 Introduction
+
+sim-dict 是一个计算文本相似度的模块,支持词语、短文本、长文本相似度计算;对中文字符提供包含语义的相似度计算,非中文字符只支持字符层面的相似度计算。
+
+## 快速上手 Getting Started
+
+```python
+>>> from sim.text_sim import get_similarity
+>>> get_similarity('环境算法实现', '温度控制策略')
+0.7166666666666667
+```
+
+## 入门 Basics
+
+### 环境准备 Prerequisite
+
+建议使用 [virtualenv](https://virtualenv.pypa.io/en/latest/) 创建虚拟环境作为开发和生产环境,virtualenv 是用来为应用创建一套“隔离”的 Python 运行环境的工具。
+
+首先,用 pip 安装 virtualenv
+
+```bash
+$ pip3 install virtualenv
+```
+
+假如我们要开发一个新的项目,需要一套独立的 Python 运行环境,可以这么做:
+
+第一步,创建目录:
+
+```bash
+~ mkdir myproject
+~ cd myproject
+```
+
+第二步,创建一个独立的 Python 运行环境,命名为 venv:
+
+```bash
+~/myproject virtualenv -p /usr/bin/python venv
+Running virtualenv with interpreter /usr/bin/python
+Already using interpreter /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
+New python executable in /Users/highing/code/python/test/venv/bin/python
+Installing setuptools, pip, wheel...
+done.
+```
+
+参数 p 用来指定创建环境使用的 Python 解释器的路径,比如我们要使用 Python 3.8 版本的虚拟环境,可以用版本为 3.8 的解释器路径来替
+代 -p 后边的参数,这样创建的环境也就是 Python 3.8 了
+
+命令 virtualenv 就可以创建一个独立的 Python 运行环境,新建的 Python 环境就被放到当前目录下的 venv 目录。我们可以通过 source 命令进入环境
+
+```bash
+~/myproject source venv/bin/activate
+(venv) ~/myproject
+```
+
+### 安装 Installation
+
+sim-dict 目前已经被打包放在公司的[私服仓库](http://dev.dp.sagacloud.cn:8082/#admin/repository/repositories)了,我们可以在创建好的虚拟环境安装它
+
+```bash
+(venv) ~/myproject pip install short-text-sim -i http://dev.dp.sagacloud.cn:8082/repository/saga-pypi-group/simple --trusted-host dev.dp.sagacloud.cn
+```
+
+## 进阶篇 Advanced
+
+在 sim-dict 实现的文本相似度计算方法中,大概分为分词、词相似度计算、文本相似度计算三个步骤。
+
+### 关于词林
+
+[「同义词词林」](https://baike.baidu.com/item/%E5%90%8C%E4%B9%89%E8%AF%8D%E8%AF%8D%E6%9E%97)是梅家驹等人与 1983 年词林编撰完成的,后经哈工大更新扩展,sim-dict 是在扩展版基础上实现的。
+词林根据词语的含义、类型、词性将所收录的汉语词分为了 12 大类,从大到小一共五层,第五层成为原子词群,意为不可再分,每个原子词群都有一个五层结构的编码,比如 Aa01C02=。
+
+### 词相似度计算
+
+根据词林建立一个「词——编码」的哈希表,通过这样的哈希表,就可以查询词的编码。获取两个待计算相似度词的编码,对比两个编码,根据匹配程度计算相似度。编码具有五个层级,
+从大到小匹配得分分别为 3,3,2,1,1,总分为 10 分,匹配累计得分与总分的比值即为相似度。
+
+### 文本相似度计算
+
+ 将两个待计算相似度的文本进行分词操作,我们这里用的分词工具是[结巴分词](https://github.com/fxsjy/jieba)。根据分词结构计算词相似度,得到如下的词相似度矩阵
+ 分别获取该矩阵每行、每列的最大值的均值,计算这两个平均值的均值,即为这两个文本的相似度。
+
+ -   | 环境 | 算法 | 实现
+ ----| ----| --- | ---
+ 温度 | 0.4 | 0.3 | 0.2
+ 控制 | 0.1 | 0.3 | 0.4
+ 策略 | 0.4 | 0.6 | 0.2
+
+### 更新词林
+
+往词林是添加新词(词林未收录的词)没有明确统一的方法,主要基于个人对于词林对理解,下边是我们常用的思路。
+
+对于一个新词,尝试列举它的同义词、近义词,如果它的同/近义词在词林里,那么将该新词直接放在它的同/近义词所在的原子词群即可,这样通过词林计算二者相似度的时候即可得到最高的分数,
+与我们认为的二者是同义/近义是相符的。
+
+如果无法列举该词合适的同/近义词,或者该词的同/近义词未被词林收录,我们要尝试总结该词的类型、词性、词义,并根据词林分类的逻辑,将其放入合适的词群或者建立新的词群和与之对应的编码。
+比如“空调主机”要放在第一大类“物”里,第二大类“机具”里,第三类“机器 工具 泵”里……
+
+如果该词是多义的,对于每一个词义,按照上述逻辑分别执行添词操作即可。
+
+由于基于词林方法的性质,即通过人的理解将词分类,并以此为基础进行词、句相似度的计算,所以目前来说无法通过机器自动完成新词添加操作,这也是这种方法维护最为繁琐的地方。
+
+## 附录 Appendix
+
+[基于同义词词林的词语相似度计算方法](http://gb.oversea.cnki.net/KCMS/detail/detail.aspx?filename=CCYD201006010&dbcode=CJFD&dbname=CJFD2010)
+
+[Final_word_Similarity](https://github.com/yaleimeng/Final_word_Similarity)